/ Hex Artifact Content
Login

Artifact d9c63f5c5679f6e6c96612264b5674b8020696c4:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0840: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0850: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0860: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0870: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0880: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
0890: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
08a0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
08b0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
08c0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
08d0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
08e0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
08f0: 69 73 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  isused..*/.#ifde
0900: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
0910: 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75 74   define memAbout
0920: 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73 71  ToChange(P,M) sq
0930: 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f 75  lite3VdbeMemAbou
0940: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a 23  tToChange(P,M).#
0950: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d 65  else.# define me
0960: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 50  mAboutToChange(P
0970: 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ,M).#endif../*.*
0980: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
0990: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
09a0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65  is incremented e
09b0: 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72 73  very time a curs
09c0: 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69 74  or.** moves, eit
09d0: 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53 65  her by the OP_Se
09e0: 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20 6f  ekXX, OP_Next, o
09f0: 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64 65  r OP_Prev opcode
0a00: 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a 20  s.  The test.** 
0a10: 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20 74  procedures use t
0a20: 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  his information 
0a30: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  to make sure tha
0a40: 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a 2a  t indices are.**
0a50: 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74   working correct
0a60: 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61 62  ly.  This variab
0a70: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0a80: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0a90: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0aa0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0ab0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0ac0: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0ad0: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ae0: 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
0af0: 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66  ount = 0;.#endif
0b00: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 69  ../*.** When thi
0b10: 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  s global variabl
0b20: 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20 69  e is positive, i
0b30: 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e 74  t gets decrement
0b40: 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a 2a  ed once before.*
0b50: 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74 69  * each instructi
0b60: 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e 20  on in the VDBE. 
0b70: 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73   When it reaches
0b80: 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69 73   zero, the u1.is
0b90: 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20 66  Interrupted.** f
0ba0: 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69  ield of the sqli
0bb0: 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69 73  te3 structure is
0bc0: 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74 6f   set in order to
0bd0: 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74   simulate an int
0be0: 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  errupt..**.** Th
0bf0: 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20 75  is facility is u
0c00: 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20  sed for testing 
0c10: 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20 20  purposes only.  
0c20: 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e 63  It does not func
0c30: 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72  tion.** in an or
0c40: 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a 2f  dinary build..*/
0c50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
0c60: 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  EST.int sqlite3_
0c70: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 20  interrupt_count 
0c80: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  = 0;.#endif../*.
0c90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0ca0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0cb0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0cc0: 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72 74  type the OP_Sort
0cd0: 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78   opcode.** is ex
0ce0: 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65 73  ecuted.  The tes
0cf0: 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  t procedures use
0d00: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0d10: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0d20: 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20 69  hat.** sorting i
0d30: 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20 6e  s occurring or n
0d40: 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74 20  ot occurring at 
0d50: 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d 65  appropriate time
0d60: 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  s.   This variab
0d70: 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e  le.** has no fun
0d80: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0d90: 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20   to help verify 
0da0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0db0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
0dc0: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0dd0: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0de0: 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  nt sqlite3_sort_
0df0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0e00: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78  f../*.** The nex
0e10: 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  t global variabl
0e20: 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73 69  e records the si
0e30: 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  ze of the larges
0e40: 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72  t MEM_Blob.** or
0e50: 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68 61   MEM_Str that ha
0e60: 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20 61  s been used by a
0e70: 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20 54   VDBE opcode.  T
0e80: 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75 72  he test procedur
0e90: 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20 69  es.** use this i
0ea0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61  nformation to ma
0eb0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
0ec0: 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63 74   zero-blob funct
0ed0: 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20 77  ionality.** is w
0ee0: 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79  orking correctly
0ef0: 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c  .   This variabl
0f00: 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  e has no functio
0f10: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a  n other than to.
0f20: 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  ** help verify t
0f30: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0f40: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72  tion of the libr
0f50: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0f60: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0f70: 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
0f80: 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20  ize = 0;.static 
0f90: 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42 6c  void updateMaxBl
0fa0: 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a  obsize(Mem *p){.
0fb0: 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20    if( (p->flags 
0fc0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
0fd0: 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e 6e  lob))!=0 && p->n
0fe0: 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f  >sqlite3_max_blo
0ff0: 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71 6c  bsize ){.    sql
1000: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
1010: 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a  e = p->n;.  }.}.
1020: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1030: 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61  e next global va
1040: 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d  riable is increm
1050: 65 6e 74 65 64 20 65 61 63 68 20 74 79 70 65 20  ented each type 
1060: 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70 63  the OP_Found opc
1070: 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ode.** is execut
1080: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
1090: 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65 72   to test whether
10a0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72 65   or not the fore
10b0: 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72 61  ign key.** opera
10c0: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
10d0: 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a 65   using OP_FkIsZe
10e0: 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20 54  ro is working. T
10f0: 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  his variable.** 
1100: 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20  has no function 
1110: 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68 65  other than to he
1120: 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63 6f  lp verify the co
1130: 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrect operation 
1140: 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61 72  of the.** librar
1150: 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
1160: 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c  ITE_TEST.int sql
1170: 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
1180: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
1190: 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69 73  .** Test a regis
11a0: 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69 74  ter to see if it
11b0: 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75 72   exceeds the cur
11c0: 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f  rent maximum blo
11d0: 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74  b size..** If it
11e0: 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68   does, record th
11f0: 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c  e new maximum bl
1200: 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20  ob size..*/.#if 
1210: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1220: 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  EST) && !defined
1230: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49  (SQLITE_OMIT_BUI
1240: 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65 66  LTIN_TEST).# def
1250: 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ine UPDATE_MAX_B
1260: 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64 61  LOBSIZE(P)  upda
1270: 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29  teMaxBlobsize(P)
1280: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1290: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
12a0: 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  IZE(P).#endif../
12b0: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
12c0: 20 67 69 76 65 6e 20 72 65 67 69 73 74 65 72 20   given register 
12d0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66  into a string if
12e0: 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a   it isn't one.**
12f0: 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e   already. Return
1300: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d   non-zero if a m
1310: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a  alloc() fails..*
1320: 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67  /.#define String
1330: 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20  ify(P, enc) \.  
1340: 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26   if(((P)->flags&
1350: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
1360: 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65  b))==0 && sqlite
1370: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
1380: 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20  y(P,enc)) \.    
1390: 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20   { goto no_mem; 
13a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65  }../*.** An ephe
13b0: 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c  meral string val
13c0: 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79  ue (signified by
13d0: 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66   the MEM_Ephem f
13e0: 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  lag) contains.**
13f0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1400: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
1410: 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65  cated string whe
1420: 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e  re some other en
1430: 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f  tity.** is respo
1440: 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c  nsible for deall
1450: 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72  ocating that str
1460: 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68  ing.  Because th
1470: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f  e register.** do
1480: 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74  es not control t
1490: 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69  he string, it mi
14a0: 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77  ght be deleted w
14b0: 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73  ithout the regis
14c0: 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69  ter.** knowing i
14d0: 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  t..**.** This ro
14e0: 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61  utine converts a
14f0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1500: 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69  ng into a dynami
1510: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a  cally allocated.
1520: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74  ** string that t
1530: 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65  he register itse
1540: 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e  lf controls.  In
1550: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74   other words, it
1560: 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  .** converts an 
1570: 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67  MEM_Ephem string
1580: 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e   into an MEM_Dyn
1590: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66   string..*/.#def
15a0: 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69  ine Deephemerali
15b0: 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28  ze(P) \.   if( (
15c0: 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45  (P)->flags&MEM_E
15d0: 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20  phem)!=0 \.     
15e0: 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65    && sqlite3Vdbe
15f0: 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65  MemMakeWriteable
1600: 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d  (P) ){ goto no_m
1610: 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  em;}../* Return 
1620: 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72 73  true if the curs
1630: 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73  or was opened us
1640: 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e 53  ing the OP_OpenS
1650: 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a 2f  orter opcode. */
1660: 0a 23 20 64 65 66 69 6e 65 20 69 73 53 6f 72 74  .# define isSort
1670: 65 72 28 78 29 20 28 28 78 29 2d 3e 70 53 6f 72  er(x) ((x)->pSor
1680: 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 41  ter!=0)../*.** A
1690: 72 67 75 6d 65 6e 74 20 70 4d 65 6d 20 70 6f 69  rgument pMem poi
16a0: 6e 74 73 20 61 74 20 61 20 72 65 67 69 73 74 65  nts at a registe
16b0: 72 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 70  r that will be p
16c0: 61 73 73 65 64 20 74 6f 20 61 0a 2a 2a 20 75 73  assed to a.** us
16d0: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
16e0: 69 6f 6e 20 6f 72 20 72 65 74 75 72 6e 65 64 20  ion or returned 
16f0: 74 6f 20 74 68 65 20 75 73 65 72 20 61 73 20 74  to the user as t
1700: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 20 71  he result of a q
1710: 75 65 72 79 2e 0a 2a 2a 20 54 68 69 73 20 72 6f  uery..** This ro
1720: 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 70  utine sets the p
1730: 4d 65 6d 2d 3e 74 79 70 65 20 76 61 72 69 61 62  Mem->type variab
1740: 6c 65 20 75 73 65 64 20 62 79 20 74 68 65 20 73  le used by the s
1750: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a 28 29  qlite3_value_*()
1760: 20 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 2e 0a 2a   .** routines..*
1770: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
1780: 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 4d  beMemStoreType(M
1790: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74  em *pMem){.  int
17a0: 20 66 6c 61 67 73 20 3d 20 70 4d 65 6d 2d 3e 66   flags = pMem->f
17b0: 6c 61 67 73 3b 0a 20 20 69 66 28 20 66 6c 61 67  lags;.  if( flag
17c0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
17d0: 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d      pMem->type =
17e0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a 20 20   SQLITE_NULL;.  
17f0: 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61  }.  else if( fla
1800: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
1810: 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d      pMem->type =
1820: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3b   SQLITE_INTEGER;
1830: 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20  .  }.  else if( 
1840: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
1850: 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79   ){.    pMem->ty
1860: 70 65 20 3d 20 53 51 4c 49 54 45 5f 46 4c 4f 41  pe = SQLITE_FLOA
1870: 54 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66  T;.  }.  else if
1880: 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ( flags & MEM_St
1890: 72 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74  r ){.    pMem->t
18a0: 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 54 45 58  ype = SQLITE_TEX
18b0: 54 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  T;.  }else{.    
18c0: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
18d0: 49 54 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a  ITE_BLOB;.  }.}.
18e0: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  ./*.** Allocate 
18f0: 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d 62 65  VdbeCursor numbe
1900: 72 20 69 43 75 72 2e 20 20 52 65 74 75 72 6e 20  r iCur.  Return 
1910: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e  a pointer to it.
1920: 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a    Return NULL.**
1930: 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74 20 6f   if we run out o
1940: 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61  f memory..*/.sta
1950: 74 69 63 20 56 64 62 65 43 75 72 73 6f 72 20 2a  tic VdbeCursor *
1960: 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 0a  allocateCursor(.
1970: 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20 20 20    Vdbe *p,      
1980: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76          /* The v
1990: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 2a  irtual machine *
19a0: 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 20 20  /.  int iCur,   
19b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
19c0: 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20 56 64  ex of the new Vd
19d0: 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e  beCursor */.  in
19e0: 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20 20 20  t nField,       
19f0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a00: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 74   fields in the t
1a10: 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 2a 2f  able or index */
1a20: 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20 20 20  .  int iDb,     
1a30: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
1a40: 62 61 73 65 20 74 68 65 20 63 75 72 73 6f 72 20  base the cursor 
1a50: 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d  belongs to, or -
1a60: 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42 74 72  1 */.  int isBtr
1a70: 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f 2a 20  eeCursor     /* 
1a80: 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65 65 2e  True for B-Tree.
1a90: 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73 65 75    False for pseu
1aa0: 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74 61 62  do-table or vtab
1ab0: 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64   */.){.  /* Find
1ac0: 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
1ad0: 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73   that will be us
1ae0: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
1af0: 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20  blob of memory. 
1b00: 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72   ** required for
1b10: 20 74 68 69 73 20 56 64 62 65 43 75 72 73 6f 72   this VdbeCursor
1b20: 20 73 74 72 75 63 74 75 72 65 2e 20 49 74 20 69   structure. It i
1b30: 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20  s convenient to 
1b40: 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62 65  use a .  ** vdbe
1b50: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20   memory cell to 
1b60: 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f 72  manage the memor
1b70: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
1b80: 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a  uired for a.  **
1b90: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1ba0: 63 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f  cture for the fo
1bb0: 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a  llowing reasons:
1bc0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53  .  **.  **   * S
1bd0: 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20  ometimes cursor 
1be0: 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64  numbers are used
1bf0: 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66   for a couple of
1c00: 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20   different.  ** 
1c10: 20 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20      purposes in 
1c20: 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20  a vdbe program. 
1c30: 54 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73  The different us
1c40: 65 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65  es might require
1c50: 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72  .  **     differ
1c60: 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61  ent sized alloca
1c70: 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65  tions. Memory ce
1c80: 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77  lls provide grow
1c90: 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c  able.  **     al
1ca0: 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a  locations..  **.
1cb0: 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73    **   * When us
1cc0: 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52  ing ENABLE_MEMOR
1cd0: 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65  Y_MANAGEMENT, me
1ce0: 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72  mory cell buffer
1cf0: 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62  s can.  **     b
1d00: 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76  e freed lazily v
1d10: 69 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72  ia the sqlite3_r
1d20: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20  elease_memory() 
1d30: 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20  API. This.  **  
1d40: 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65     minimizes the
1d50: 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f   number of mallo
1d60: 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20  c calls made by 
1d70: 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a  the system..  **
1d80: 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c  .  ** Memory cel
1d90: 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61  ls for cursors a
1da0: 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20  re allocated at 
1db0: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61  the top of the a
1dc0: 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63  ddress.  ** spac
1dd0: 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  e. Memory cell (
1de0: 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70  p->nMem) corresp
1df0: 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30  onds to cursor 0
1e00: 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a  . Space for.  **
1e10: 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e   cursor 1 is man
1e20: 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63  aged by memory c
1e30: 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c  ell (p->nMem-1),
1e40: 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d   etc..  */.  Mem
1e50: 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65   *pMem = &p->aMe
1e60: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b  m[p->nMem-iCur];
1e70: 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20  ..  int nByte;. 
1e80: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1e90: 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20   = 0;.  nByte = 
1ea0: 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73 69  .      ROUND8(si
1eb0: 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29  zeof(VdbeCursor)
1ec0: 29 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75 33 32  ) + 2*sizeof(u32
1ed0: 29 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20 20 20  )*nField + .    
1ee0: 20 20 28 69 73 42 74 72 65 65 43 75 72 73 6f 72    (isBtreeCursor
1ef0: 3f 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72  ?sqlite3BtreeCur
1f00: 73 6f 72 53 69 7a 65 28 29 3a 30 29 3b 0a 0a 20  sorSize():0);.. 
1f10: 20 61 73 73 65 72 74 28 20 69 43 75 72 3c 70 2d   assert( iCur<p-
1f20: 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  >nCursor );.  if
1f30: 28 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d  ( p->apCsr[iCur]
1f40: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
1f50: 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
1f60: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29   p->apCsr[iCur])
1f70: 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69  ;.    p->apCsr[i
1f80: 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Cur] = 0;.  }.  
1f90: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73  if( SQLITE_OK==s
1fa0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
1fb0: 77 28 70 4d 65 6d 2c 20 6e 42 79 74 65 2c 20 30  w(pMem, nByte, 0
1fc0: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
1fd0: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
1fe0: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
1ff0: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
2000: 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28  (pCx, 0, sizeof(
2010: 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a 20 20  VdbeCursor));.  
2020: 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69 44 62    pCx->iDb = iDb
2030: 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69 65 6c  ;.    pCx->nFiel
2040: 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20  d = nField;.    
2050: 69 66 28 20 69 73 42 74 72 65 65 43 75 72 73 6f  if( isBtreeCurso
2060: 72 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  r ){.      pCx->
2070: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
2080: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
2090: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
20a0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
20b0: 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33 32  r))+2*sizeof(u32
20c0: 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 20  )*nField];.     
20d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
20e0: 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43 75  sorZero(pCx->pCu
20f0: 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
2100: 0a 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d  .  return pCx;.}
2110: 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63  ../*.** Try to c
2120: 6f 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20 69  onvert a value i
2130: 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65  nto a numeric re
2140: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20  presentation if 
2150: 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20  we can.** do so 
2160: 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20  without loss of 
2170: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e  information.  In
2180: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
2190: 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c   the string.** l
21a0: 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62  ooks like a numb
21b0: 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 69  er, convert it i
21c0: 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20 49  nto a number.  I
21d0: 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a  f it does not.**
21e0: 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d   look like a num
21f0: 62 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61 6c  ber, leave it al
2200: 6f 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  one..*/.static v
2210: 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  oid applyNumeric
2220: 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52  Affinity(Mem *pR
2230: 65 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65 63  ec){.  if( (pRec
2240: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 52  ->flags & (MEM_R
2250: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30  eal|MEM_Int))==0
2260: 20 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20 72   ){.    double r
2270: 56 61 6c 75 65 3b 0a 20 20 20 20 69 36 34 20 69  Value;.    i64 i
2280: 56 61 6c 75 65 3b 0a 20 20 20 20 75 38 20 65 6e  Value;.    u8 en
2290: 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20  c = pRec->enc;. 
22a0: 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c     if( (pRec->fl
22b0: 61 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d 30 20  ags&MEM_Str)==0 
22c0: 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69 66  ) return;.    if
22d0: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
22e0: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
22f0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
2300: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69   ) return;.    i
2310: 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f  f( 0==sqlite3Ato
2320: 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56  i64(pRec->z, &iV
2330: 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65  alue, pRec->n, e
2340: 6e 63 29 20 29 7b 0a 20 20 20 20 20 20 70 52 65  nc) ){.      pRe
2350: 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b  c->u.i = iValue;
2360: 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61  .      pRec->fla
2370: 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  gs |= MEM_Int;. 
2380: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2390: 70 52 65 63 2d 3e 72 20 3d 20 72 56 61 6c 75 65  pRec->r = rValue
23a0: 3b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c  ;.      pRec->fl
23b0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b  ags |= MEM_Real;
23c0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a  .    }.  }.}../*
23d0: 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69  .** Processing i
23e0: 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74  s determine by t
23f0: 68 65 20 61 66 66 69 6e 69 74 79 20 70 61 72 61  he affinity para
2400: 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c  meter:.**.** SQL
2410: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a  ITE_AFF_INTEGER:
2420: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52  .** SQLITE_AFF_R
2430: 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  EAL:.** SQLITE_A
2440: 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20  FF_NUMERIC:.**  
2450: 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74    Try to convert
2460: 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65   pRec to an inte
2470: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
2480: 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66  on or a .**    f
2490: 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65  loating-point re
24a0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20  presentation if 
24b0: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
24c0: 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20  sentation.**    
24d0: 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e  is not possible.
24e0: 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20    Note that the 
24f0: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
2500: 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20  tation is.**    
2510: 61 6c 77 61 79 73 20 70 72 65 66 65 72 72 65 64  always preferred
2520: 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20 61 66  , even if the af
2530: 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20  finity is REAL, 
2540: 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e  because.**    an
2550: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2560: 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20  ntation is more 
2570: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 74 20  space efficient 
2580: 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53  on disk..**.** S
2590: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a  QLITE_AFF_TEXT:.
25a0: 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52  **    Convert pR
25b0: 65 63 20 74 6f 20 61 20 74 65 78 74 20 72 65 70  ec to a text rep
25c0: 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  resentation..**.
25d0: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f  ** SQLITE_AFF_NO
25e0: 4e 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e  NE:.**    No-op.
25f0: 20 20 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e    pRec is unchan
2600: 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ged..*/.static v
2610: 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74  oid applyAffinit
2620: 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20  y(.  Mem *pRec, 
2630: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
2640: 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61  value to apply a
2650: 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20  ffinity to */.  
2660: 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20  char affinity,  
2670: 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
2680: 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65  ity to be applie
2690: 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20  d */.  u8 enc   
26a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
26b0: 65 20 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f  e this text enco
26c0: 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28  ding */.){.  if(
26d0: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
26e0: 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20  E_AFF_TEXT ){.  
26f0: 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70    /* Only attemp
2700: 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  t the conversion
2710: 20 74 6f 20 54 45 58 54 20 69 66 20 74 68 65 72   to TEXT if ther
2720: 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  e is an integer 
2730: 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72  or real.    ** r
2740: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62  epresentation (b
2750: 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20  lob and NULL do 
2760: 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65  not get converte
2770: 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67  d) but no string
2780: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
2790: 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20  tation..    */. 
27a0: 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d     if( 0==(pRec-
27b0: 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20  >flags&MEM_Str) 
27c0: 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26  && (pRec->flags&
27d0: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
27e0: 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  t)) ){.      sql
27f0: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e  ite3VdbeMemStrin
2800: 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63 29 3b  gify(pRec, enc);
2810: 0a 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d  .    }.    pRec-
2820: 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
2830: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Real|MEM_Int);. 
2840: 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e   }else if( affin
2850: 69 74 79 21 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity!=SQLITE_AFF_
2860: 4e 4f 4e 45 20 29 7b 0a 20 20 20 20 61 73 73 65  NONE ){.    asse
2870: 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  rt( affinity==SQ
2880: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2890: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
28a0: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20  LITE_AFF_REAL.  
28b0: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66             || af
28c0: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
28d0: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
28e0: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
28f0: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
2900: 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67    if( pRec->flag
2910: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a  s & MEM_Real ){.
2920: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2930: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
2940: 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20  (pRec);.    }.  
2950: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  }.}../*.** Try t
2960: 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74 79  o convert the ty
2970: 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  pe of a function
2980: 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20 72   argument or a r
2990: 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  esult column.** 
29a0: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
29b0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20  epresentation.  
29c0: 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45 47  Use either INTEG
29d0: 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63 68  ER or REAL which
29e0: 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f  ever.** is appro
29f0: 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c  priate.  But onl
2a00: 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72 73  y do the convers
2a10: 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f 73  ion if it is pos
2a20: 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a  sible without.**
2a30: 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
2a40: 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 20  tion and return 
2a50: 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70 65  the revised type
2a60: 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   of the argument
2a70: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
2a80: 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74  _value_numeric_t
2a90: 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ype(sqlite3_valu
2aa0: 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d 20  e *pVal){.  Mem 
2ab0: 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56  *pMem = (Mem*)pV
2ac0: 61 6c 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e  al;.  if( pMem->
2ad0: 74 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58  type==SQLITE_TEX
2ae0: 54 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 4e 75  T ){.    applyNu
2af0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d  mericAffinity(pM
2b00: 65 6d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  em);.    sqlite3
2b10: 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
2b20: 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65  (pMem);.  }.  re
2b30: 74 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65 3b  turn pMem->type;
2b40: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74  .}../*.** Export
2b50: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70  ed version of ap
2b60: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54  plyAffinity(). T
2b70: 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e  his one works on
2b80: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c   sqlite3_value*,
2b90: 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74   .** not the int
2ba0: 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e  ernal Mem* type.
2bb0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2bc0: 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
2bd0: 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  ty(.  sqlite3_va
2be0: 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38  lue *pVal, .  u8
2bf0: 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38   affinity, .  u8
2c00: 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41   enc.){.  applyA
2c10: 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70  ffinity((Mem *)p
2c20: 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  Val, affinity, e
2c30: 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  nc);.}..#ifdef S
2c40: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
2c50: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
2c60: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
2c70: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
2c80: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
2c90: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
2ca0: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
2cb0: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
2cc0: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
2cd0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
2ce0: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
2cf0: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
2d00: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
2d10: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
2d20: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
2d30: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
2d40: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
2d50: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
2d60: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
2d70: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
2d80: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
2d90: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
2da0: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
2db0: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
2dc0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
2dd0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
2de0: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
2df0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
2e00: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
2e10: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
2e20: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
2e30: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
2e40: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
2e50: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
2e60: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
2e70: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
2e80: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
2e90: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
2ea0: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
2eb0: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
2ec0: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
2ed0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
2ee0: 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20  Csr, "%c", c);. 
2ef0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
2f00: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
2f10: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
2f20: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
2f30: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
2f40: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
2f50: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
2f60: 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Csr);.    for(i=
2f70: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
2f80: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
2f90: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
2fa0: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
2fb0: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
2fc0: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
2fd0: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
2fe0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
2ff0: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
3000: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
3010: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3020: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
3030: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
3040: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
3050: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
3060: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
3070: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
3080: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
3090: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
30a0: 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e  Csr, "]%s", encn
30b0: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
30c0: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
30d0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
30e0: 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26  sr);.    if( f &
30f0: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
3100: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3110: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b  ntf(100, zCsr,"+
3120: 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65  %dz",pMem->u.nZe
3130: 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  ro);.      zCsr 
3140: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3150: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3160: 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27      *zCsr = '\0'
3170: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20  ;.  }else if( f 
3180: 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  & MEM_Str ){.   
3190: 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a   int j, k;.    z
31a0: 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20  Buf[0] = ' ';.  
31b0: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
31c0: 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  n ){.      zBuf[
31d0: 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20  1] = 'z';.      
31e0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
31f0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
3200: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3210: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3220: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3230: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a   zBuf[1] = 't';.
3240: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3250: 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f   & (MEM_Dyn|MEM_
3260: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3270: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3280: 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20  MEM_Ephem ){.   
3290: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27     zBuf[1] = 'e'
32a0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
32b0: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
32c0: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
32d0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
32e0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b    zBuf[1] = 's';
32f0: 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32  .    }.    k = 2
3300: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3310: 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75  printf(100, &zBu
3320: 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d  f[k], "%d", pMem
3330: 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  ->n);.    k += s
3340: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3350: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3360: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20  uf[k++] = '[';. 
3370: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35     for(j=0; j<15
3380: 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a   && j<pMem->n; j
3390: 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20  ++){.      u8 c 
33a0: 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20  = pMem->z[j];.  
33b0: 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20      if( c>=0x20 
33c0: 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20  && c<0x7f ){.   
33d0: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
33e0: 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   c;.      }else{
33f0: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3400: 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  +] = '.';.      
3410: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66  }.    }.    zBuf
3420: 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20  [k++] = ']';.   
3430: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3440: 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20  f(100,&zBuf[k], 
3450: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
3460: 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  nc]);.    k += s
3470: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3480: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3490: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
34a0: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
34b0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
34c0: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
34d0: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
34e0: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
34f0: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
3500: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
3510: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20  Print(Mem *p){. 
3520: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3530: 4d 45 4d 5f 49 6e 76 61 6c 69 64 20 29 7b 0a 20  MEM_Invalid ){. 
3540: 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e 64 65     printf(" unde
3550: 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65  fined");.  }else
3560: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3570: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
3580: 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29 3b  printf(" NULL");
3590: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d  .  }else if( (p-
35a0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
35b0: 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45  t|MEM_Str))==(ME
35c0: 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29  M_Int|MEM_Str) )
35d0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 73  {.    printf(" s
35e0: 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29  i:%lld", p->u.i)
35f0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d  ;.  }else if( p-
3600: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
3610: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3620: 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69   i:%lld", p->u.i
3630: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
3640: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
3650: 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66  POINT.  }else if
3660: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3670: 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69  _Real ){.    pri
3680: 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e  ntf(" r:%g", p->
3690: 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c  r);.#endif.  }el
36a0: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
36b0: 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a  & MEM_RowSet ){.
36c0: 20 20 20 20 70 72 69 6e 74 66 28 22 20 28 72 6f      printf(" (ro
36d0: 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65  wset)");.  }else
36e0: 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b  {.    char zBuf[
36f0: 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65  200];.    sqlite
3700: 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72  3VdbeMemPrettyPr
3710: 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20  int(p, zBuf);.  
3720: 20 20 70 72 69 6e 74 66 28 22 20 25 73 22 2c 20    printf(" %s", 
3730: 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61  zBuf);.  }.}.sta
3740: 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65  tic void registe
3750: 72 54 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c  rTrace(int iReg,
3760: 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e   Mem *p){.  prin
3770: 74 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c  tf("REG[%d] = ",
3780: 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61   iReg);.  memTra
3790: 63 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72  cePrint(p);.  pr
37a0: 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65  intf("\n");.}.#e
37b0: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
37c0: 49 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66  ITE_DEBUG.#  def
37d0: 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41  ine REGISTER_TRA
37e0: 43 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66  CE(R,M) if(db->f
37f0: 6c 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65  lags&SQLITE_Vdbe
3800: 54 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72  Trace)registerTr
3810: 61 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23  ace(R,M).#else.#
3820: 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45    define REGISTE
3830: 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e  R_TRACE(R,M).#en
3840: 64 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42  dif...#ifdef VDB
3850: 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a  E_PROFILE../* .*
3860: 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61  * hwtime.h conta
3870: 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d  ins inline assem
3880: 62 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d  bler code for im
3890: 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68  plementing .** h
38a0: 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20  igh-performance 
38b0: 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e  timing routines.
38c0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77  .*/.#include "hw
38d0: 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a  time.h"..#endif.
38e0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 43 48 45 43 4b  ./*.** The CHECK
38f0: 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 20 6d  _FOR_INTERRUPT m
3900: 61 63 72 6f 20 64 65 66 69 6e 65 64 20 68 65 72  acro defined her
3910: 65 20 6c 6f 6f 6b 73 20 74 6f 20 73 65 65 20 69  e looks to see i
3920: 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  f the.** sqlite3
3930: 5f 69 6e 74 65 72 72 75 70 74 28 29 20 72 6f 75  _interrupt() rou
3940: 74 69 6e 65 20 68 61 73 20 62 65 65 6e 20 63 61  tine has been ca
3950: 6c 6c 65 64 2e 20 20 49 66 20 69 74 20 68 61 73  lled.  If it has
3960: 20 62 65 65 6e 2c 20 74 68 65 6e 0a 2a 2a 20 70   been, then.** p
3970: 72 6f 63 65 73 73 69 6e 67 20 6f 66 20 74 68 65  rocessing of the
3980: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 69 73   VDBE program is
3990: 20 69 6e 74 65 72 72 75 70 74 65 64 2e 0a 2a 2a   interrupted..**
39a0: 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 61  .** This macro a
39b0: 64 64 65 64 20 74 6f 20 65 76 65 72 79 20 69 6e  dded to every in
39c0: 73 74 72 75 63 74 69 6f 6e 20 74 68 61 74 20 64  struction that d
39d0: 6f 65 73 20 61 20 6a 75 6d 70 20 69 6e 20 6f 72  oes a jump in or
39e0: 64 65 72 20 74 6f 0a 2a 2a 20 69 6d 70 6c 65 6d  der to.** implem
39f0: 65 6e 74 20 61 20 6c 6f 6f 70 2e 20 20 54 68 69  ent a loop.  Thi
3a00: 73 20 74 65 73 74 20 75 73 65 64 20 74 6f 20 62  s test used to b
3a10: 65 20 6f 6e 20 65 76 65 72 79 20 73 69 6e 67 6c  e on every singl
3a20: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 0a 2a  e instruction,.*
3a30: 2a 20 62 75 74 20 74 68 61 74 20 6d 65 61 6e 74  * but that meant
3a40: 20 77 65 20 6d 6f 72 65 20 74 65 73 74 69 6e 67   we more testing
3a50: 20 74 68 61 6e 20 77 65 20 6e 65 65 64 65 64 2e   than we needed.
3a60: 20 20 42 79 20 6f 6e 6c 79 20 74 65 73 74 69 6e    By only testin
3a70: 67 20 74 68 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e  g the.** flag on
3a80: 20 6a 75 6d 70 20 69 6e 73 74 72 75 63 74 69 6f   jump instructio
3a90: 6e 73 2c 20 77 65 20 67 65 74 20 61 20 28 73 6d  ns, we get a (sm
3aa0: 61 6c 6c 29 20 73 70 65 65 64 20 69 6d 70 72 6f  all) speed impro
3ab0: 76 65 6d 65 6e 74 2e 0a 2a 2f 0a 23 64 65 66 69  vement..*/.#defi
3ac0: 6e 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54  ne CHECK_FOR_INT
3ad0: 45 52 52 55 50 54 20 5c 0a 20 20 20 69 66 28 20  ERRUPT \.   if( 
3ae0: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
3af0: 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72  pted ) goto abor
3b00: 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
3b10: 70 74 3b 0a 0a 0a 23 69 66 6e 64 65 66 20 4e 44  pt;...#ifndef ND
3b20: 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  EBUG./*.** This 
3b30: 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  function is only
3b40: 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
3b50: 68 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20  hin an assert() 
3b60: 65 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a  expression. It.*
3b70: 2a 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68  * checks that th
3b80: 65 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73  e sqlite3.nTrans
3b90: 61 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20  action variable 
3ba0: 69 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74  is correctly set
3bb0: 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65   to.** the numbe
3bc0: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
3bd0: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
3be0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65  currently in the
3bf0: 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74   .** linked list
3c00: 20 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c   starting at sql
3c10: 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e  ite3.pSavepoint.
3c20: 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a  .** .** Usage:.*
3c30: 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
3c40: 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
3c50: 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73  ount(db) );.*/.s
3c60: 74 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53  tatic int checkS
3c70: 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71  avepointCount(sq
3c80: 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e  lite3 *db){.  in
3c90: 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70  t n = 0;.  Savep
3ca0: 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70  oint *p;.  for(p
3cb0: 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b  =db->pSavepoint;
3cc0: 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20   p; p=p->pNext) 
3cd0: 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  n++;.  assert( n
3ce0: 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  ==(db->nSavepoin
3cf0: 74 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61  t + db->isTransa
3d00: 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20  ctionSavepoint) 
3d10: 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d  );.  return 1;.}
3d20: 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20  .#endif.../*.** 
3d30: 45 78 65 63 75 74 65 20 61 73 20 6d 75 63 68 20  Execute as much 
3d40: 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  of a VDBE progra
3d50: 6d 20 61 73 20 77 65 20 63 61 6e 20 74 68 65 6e  m as we can then
3d60: 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20 73   return..**.** s
3d70: 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 52 65  qlite3VdbeMakeRe
3d80: 61 64 79 28 29 20 6d 75 73 74 20 62 65 20 63 61  ady() must be ca
3d90: 6c 6c 65 64 20 62 65 66 6f 72 65 20 74 68 69 73  lled before this
3da0: 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65   routine in orde
3db0: 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20 74 68  r to.** close th
3dc0: 65 20 70 72 6f 67 72 61 6d 20 77 69 74 68 20 61  e program with a
3dd0: 20 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74 20 61   final OP_Halt a
3de0: 6e 64 20 74 6f 20 73 65 74 20 75 70 20 74 68 65  nd to set up the
3df0: 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20 61 6e   callbacks.** an
3e00: 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  d the error mess
3e10: 61 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a 2a 0a  age pointer..**.
3e20: 2a 2a 20 57 68 65 6e 65 76 65 72 20 61 20 72 6f  ** Whenever a ro
3e30: 77 20 6f 72 20 72 65 73 75 6c 74 20 64 61 74 61  w or result data
3e40: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 74   is available, t
3e50: 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c  his routine will
3e60: 20 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76 6f 6b   either.** invok
3e70: 65 20 74 68 65 20 72 65 73 75 6c 74 20 63 61 6c  e the result cal
3e80: 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72 65 20  lback (if there 
3e90: 69 73 20 6f 6e 65 29 20 6f 72 20 72 65 74 75 72  is one) or retur
3ea0: 6e 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45  n with.** SQLITE
3eb0: 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  _ROW..**.** If a
3ec0: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
3ed0: 65 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f 63 6b  e to open a lock
3ee0: 65 64 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  ed database, the
3ef0: 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a  n this routine.*
3f00: 2a 20 77 69 6c 6c 20 65 69 74 68 65 72 20 69 6e  * will either in
3f10: 76 6f 6b 65 20 74 68 65 20 62 75 73 79 20 63 61  voke the busy ca
3f20: 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72 65  llback (if there
3f30: 20 69 73 20 6f 6e 65 29 20 6f 72 20 69 74 20 77   is one) or it w
3f40: 69 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20 53 51  ill.** return SQ
3f50: 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a  LITE_BUSY..**.**
3f60: 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63   If an error occ
3f70: 75 72 73 2c 20 61 6e 20 65 72 72 6f 72 20 6d 65  urs, an error me
3f80: 73 73 61 67 65 20 69 73 20 77 72 69 74 74 65 6e  ssage is written
3f90: 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69   to memory obtai
3fa0: 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69  ned.** from sqli
3fb0: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61 6e 64  te3_malloc() and
3fc0: 20 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73 20 6d   p->zErrMsg is m
3fd0: 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  ade to point to 
3fe0: 74 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 20  that memory..** 
3ff0: 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 69  The error code i
4000: 73 20 73 74 6f 72 65 64 20 69 6e 20 70 2d 3e 72  s stored in p->r
4010: 63 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74 69  c and this routi
4020: 6e 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54  ne returns SQLIT
4030: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 49  E_ERROR..**.** I
4040: 66 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 65  f the callback e
4050: 76 65 72 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ver returns non-
4060: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 70  zero, then the p
4070: 72 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a 2a 20  rogram exits.** 
4080: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 54 68  immediately.  Th
4090: 65 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f 20 65  ere will be no e
40a0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 62 75 74  rror message but
40b0: 20 74 68 65 20 70 2d 3e 72 63 20 66 69 65 6c 64   the p->rc field
40c0: 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 53 51   is.** set to SQ
40d0: 4c 49 54 45 5f 41 42 4f 52 54 20 61 6e 64 20 74  LITE_ABORT and t
40e0: 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c  his routine will
40f0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
4100: 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d 65  RROR..**.** A me
4110: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
4120: 65 72 72 6f 72 20 63 61 75 73 65 73 20 70 2d 3e  error causes p->
4130: 72 63 20 74 6f 20 62 65 20 73 65 74 20 74 6f 20  rc to be set to 
4140: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64  SQLITE_NOMEM and
4150: 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69 6e 65   this.** routine
4160: 20 74 6f 20 72 65 74 75 72 6e 20 53 51 4c 49 54   to return SQLIT
4170: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 4f  E_ERROR..**.** O
4180: 74 68 65 72 20 66 61 74 61 6c 20 65 72 72 6f 72  ther fatal error
4190: 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  s return SQLITE_
41a0: 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 66 74  ERROR..**.** Aft
41b0: 65 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  er this routine 
41c0: 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 73 71  has finished, sq
41d0: 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c 69 7a  lite3VdbeFinaliz
41e0: 65 28 29 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a  e() should be.**
41f0: 20 75 73 65 64 20 74 6f 20 63 6c 65 61 6e 20 75   used to clean u
4200: 70 20 74 68 65 20 6d 65 73 73 20 74 68 61 74 20  p the mess that 
4210: 77 61 73 20 6c 65 66 74 20 62 65 68 69 6e 64 2e  was left behind.
4220: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  .*/.int sqlite3V
4230: 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65 20  dbeExec(.  Vdbe 
4240: 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *p              
4250: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
4260: 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 70 63  E */.){.  int pc
4270: 3d 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  =0;             
4280: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
4290: 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  ram counter */. 
42a0: 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f   Op *aOp = p->aO
42b0: 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  p;          /* C
42c0: 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f  opy of p->aOp */
42d0: 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20  .  Op *pOp;     
42e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
42f0: 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69   Current operati
4300: 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d  on */.  int rc =
4310: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
4320: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
4330: 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  eturn */.  sqlit
4340: 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20  e3 *db = p->db; 
4350: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
4360: 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65  abase */.  u8 re
4370: 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
4380: 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73   = 0; /* Reset s
4390: 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65  chema after an e
43a0: 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76 65  rror if positive
43b0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e   */.  u8 encodin
43c0: 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20  g = ENC(db);    
43d0: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
43e0: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
43f0: 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b  nt iCompare = 0;
4400: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
4410: 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43  ult of last OP_C
4420: 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 69 6f 6e  ompare operation
4430: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
4440: 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20 20 20  VmStep = 0;     
4450: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69   /* Number of vi
4460: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 73 74  rtual machine st
4470: 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  eps */.#ifndef S
4480: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
4490: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 75  ESS_CALLBACK.  u
44a0: 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73  nsigned nProgres
44b0: 73 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a 20 49 6e  sLimit = 0;/* In
44c0: 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73 28 29  voke xProgress()
44d0: 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20 72 65   when nVmStep re
44e0: 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a 23 65  aches this */.#e
44f0: 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d  ndif.  Mem *aMem
4500: 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20   = p->aMem;     
4510: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e    /* Copy of p->
4520: 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  aMem */.  Mem *p
4530: 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In1 = 0;        
4540: 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75       /* 1st inpu
4550: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
4560: 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20  em *pIn2 = 0;   
4570: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64            /* 2nd
4580: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
4590: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20  /.  Mem *pIn3 = 
45a0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
45b0: 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72  * 3rd input oper
45c0: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f  and */.  Mem *pO
45d0: 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ut = 0;         
45e0: 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70      /* Output op
45f0: 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 2a  erand */.  int *
4600: 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20 20 20  aPermute = 0;   
4610: 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75 74 61        /* Permuta
4620: 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  tion of columns 
4630: 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20 2a  for OP_Compare *
4640: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
4650: 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
4660: 64 3b 20 20 2f 2a 20 53 61 76 65 64 20 76 61 6c  d;  /* Saved val
4670: 75 65 20 6f 66 20 74 68 65 20 6c 61 73 74 20 69  ue of the last i
4680: 6e 73 65 72 74 20 52 4f 57 49 44 20 2a 2f 0a 23  nsert ROWID */.#
4690: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
46a0: 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20  LE.  u64 start; 
46b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46c0: 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75  /* CPU clock cou
46d0: 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f  nt at start of o
46e0: 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 6f  pcode */.  int o
46f0: 72 69 67 50 63 3b 20 20 20 20 20 20 20 20 20 20  rigPc;          
4700: 20 20 20 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d        /* Program
4710: 20 63 6f 75 6e 74 65 72 20 61 74 20 73 74 61 72   counter at star
4720: 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  t of opcode */.#
4730: 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53  endif.  /*** INS
4740: 45 52 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20  ERT STACK UNION 
4750: 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73  HERE ***/..  ass
4760: 65 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56  ert( p->magic==V
4770: 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b  DBE_MAGIC_RUN );
4780: 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65    /* sqlite3_ste
4790: 70 28 29 20 76 65 72 69 66 69 65 73 20 74 68 69  p() verifies thi
47a0: 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  s */.  sqlite3Vd
47b0: 62 65 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66  beEnter(p);.  if
47c0: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
47d0: 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20  NOMEM ){.    /* 
47e0: 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 66 20  This happens if 
47f0: 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64  a malloc() insid
4800: 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  e a call to sqli
4810: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
4820: 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ) or.    ** sqli
4830: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31  te3_column_text1
4840: 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a  6() failed.  */.
4850: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
4860: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
4870: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
4880: 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  || p->rc==SQLITE
4890: 5f 42 55 53 59 20 29 3b 0a 20 20 61 73 73 65 72  _BUSY );.  asser
48a0: 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
48b0: 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d  || p->readOnly!=
48c0: 30 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53  0 );.  p->rc = S
48d0: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69  QLITE_OK;.  p->i
48e0: 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b  CurrentTime = 0;
48f0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78  .  assert( p->ex
4900: 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d  plain==0 );.  p-
4910: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b  >pResultSet = 0;
4920: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
4930: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
4940: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
4950: 55 50 54 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  UPT;.  sqlite3Vd
4960: 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b  beIOTraceSql(p);
4970: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4980: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
4990: 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d  LLBACK.  if( db-
49a0: 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20  >xProgress ){.  
49b0: 20 20 61 73 73 65 72 74 28 20 30 20 3c 20 64 62    assert( 0 < db
49c0: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29  ->nProgressOps )
49d0: 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c  ;.    nProgressL
49e0: 69 6d 69 74 20 3d 20 28 75 6e 73 69 67 6e 65 64  imit = (unsigned
49f0: 29 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c  )p->aCounter[SQL
4a00: 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56  ITE_STMTSTATUS_V
4a10: 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 69 66 28  M_STEP];.    if(
4a20: 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 3d   nProgressLimit=
4a30: 3d 30 20 29 7b 0a 20 20 20 20 20 20 6e 50 72 6f  =0 ){.      nPro
4a40: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d  gressLimit = db-
4a50: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20  >nProgressOps;. 
4a60: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
4a70: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 25  nProgressLimit %
4a80: 3d 20 28 75 6e 73 69 67 6e 65 64 29 64 62 2d 3e  = (unsigned)db->
4a90: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20 20  nProgressOps;.  
4aa0: 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23    }.  }.#endif.#
4ab0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4ac0: 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69  UG.  sqlite3Begi
4ad0: 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  nBenignMalloc();
4ae0: 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a  .  if( p->pc==0.
4af0: 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c     && (p->db->fl
4b00: 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56 64  ags & (SQLITE_Vd
4b10: 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54 45  beListing|SQLITE
4b20: 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45 5f  _VdbeEQP|SQLITE_
4b30: 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a 20  VdbeTrace))!=0. 
4b40: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
4b50: 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b     int once = 1;
4b60: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4b70: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4b80: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
4b90: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  s & SQLITE_VdbeL
4ba0: 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20 20  isting ){.      
4bb0: 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f  printf("VDBE Pro
4bc0: 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22  gram Listing:\n"
4bd0: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  );.      for(i=0
4be0: 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29  ; i<p->nOp; i++)
4bf0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
4c00: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
4c10: 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29  out, i, &aOp[i])
4c20: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
4c30: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
4c40: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
4c50: 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20 66  beEQP ){.      f
4c60: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70  or(i=0; i<p->nOp
4c70: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
4c80: 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64  if( aOp[i].opcod
4c90: 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b  e==OP_Explain ){
4ca0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f  .          if( o
4cb0: 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56 44  nce ) printf("VD
4cc0: 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e  BE Query Plan:\n
4cd0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72  ");.          pr
4ce0: 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70  intf("%s\n", aOp
4cf0: 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20  [i].p4.z);.     
4d00: 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20       once = 0;. 
4d10: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
4d20: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
4d30: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
4d40: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29  LITE_VdbeTrace )
4d50: 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 54    printf("VDBE T
4d60: 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20  race:\n");.  }. 
4d70: 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
4d80: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69  nMalloc();.#endi
4d90: 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63  f.  for(pc=p->pc
4da0: 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b  ; rc==SQLITE_OK;
4db0: 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65   pc++){.    asse
4dc0: 72 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63 3c  rt( pc>=0 && pc<
4dd0: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66  p->nOp );.    if
4de0: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
4df0: 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ed ) goto no_mem
4e00: 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ;.#ifdef VDBE_PR
4e10: 4f 46 49 4c 45 0a 20 20 20 20 6f 72 69 67 50 63  OFILE.    origPc
4e20: 20 3d 20 70 63 3b 0a 20 20 20 20 73 74 61 72 74   = pc;.    start
4e30: 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
4e40: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e  ();.#endif.    n
4e50: 56 6d 53 74 65 70 2b 2b 3b 0a 20 20 20 20 70 4f  VmStep++;.    pO
4e60: 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 0a 20  p = &aOp[pc];.. 
4e70: 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77     /* Only allow
4e80: 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49   tracing if SQLI
4e90: 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69  TE_DEBUG is defi
4ea0: 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64  ned..    */.#ifd
4eb0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
4ec0: 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67      if( db->flag
4ed0: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54  s & SQLITE_VdbeT
4ee0: 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71  race ){.      sq
4ef0: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
4f00: 28 73 74 64 6f 75 74 2c 20 70 63 2c 20 70 4f 70  (stdout, pc, pOp
4f10: 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
4f20: 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43        ..    /* C
4f30: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
4f40: 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61  e need to simula
4f50: 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e  te an interrupt.
4f60: 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70    This only happ
4f70: 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65  ens.    ** if we
4f80: 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c 20   have a special 
4f90: 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20  test build..    
4fa0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4fb0: 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73 71  _TEST.    if( sq
4fc0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
4fd0: 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20  count>0 ){.     
4fe0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
4ff0: 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20  pt_count--;.    
5000: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e    if( sqlite3_in
5010: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30  terrupt_count==0
5020: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
5030: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62  te3_interrupt(db
5040: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
5050: 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20  .#endif..    /* 
5060: 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20 77 69  On any opcode wi
5070: 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72 65  th the "out2-pre
5080: 72 65 6c 65 61 73 65 22 20 74 61 67 2c 20 66 72  release" tag, fr
5090: 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65 78  ee any.    ** ex
50a0: 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  ternal allocatio
50b0: 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70 32  ns out of mem[p2
50c0: 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70 32  ] and set mem[p2
50d0: 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20 61  ] to be.    ** a
50e0: 6e 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 74 65  n undefined inte
50f0: 67 65 72 2e 20 20 4f 70 63 6f 64 65 73 20 77 69  ger.  Opcodes wi
5100: 6c 6c 20 65 69 74 68 65 72 20 66 69 6c 6c 20 69  ll either fill i
5110: 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20  n the integer.  
5120: 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63 6f    ** value or co
5130: 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74 6f  nvert mem[p2] to
5140: 20 61 20 64 69 66 66 65 72 65 6e 74 20 74 79 70   a different typ
5150: 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  e..    */.    as
5160: 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61  sert( pOp->opfla
5170: 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64  gs==sqlite3Opcod
5180: 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f  eProperty[pOp->o
5190: 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66  pcode] );.    if
51a0: 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26  ( pOp->opflags &
51b0: 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52   OPFLG_OUT2_PRER
51c0: 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
51d0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
51e0: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
51f0: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
5200: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
5210: 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d   );.      pOut =
5220: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
5230: 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  .      memAboutT
5240: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
5250: 3b 0a 20 20 20 20 20 20 56 64 62 65 4d 65 6d 52  ;.      VdbeMemR
5260: 65 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20  elease(pOut);.  
5270: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
5280: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d  = MEM_Int;.    }
5290: 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20  ..    /* Sanity 
52a0: 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65  checking on othe
52b0: 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69  r operands */.#i
52c0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
52d0: 47 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  G.    if( (pOp->
52e0: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
52f0: 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN1)!=0 ){.     
5300: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
5310: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5320: 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d  rt( pOp->p1<=(p-
5330: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
5340: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
5350: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
5360: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b  Mem[pOp->p1]) );
5370: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
5380: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26  TRACE(pOp->p1, &
5390: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  aMem[pOp->p1]);.
53a0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
53b0: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
53c0: 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20  FLG_IN2)!=0 ){. 
53d0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
53e0: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
53f0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5400: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
5410: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61  rsor) );.      a
5420: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
5430: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  d(&aMem[pOp->p2]
5440: 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53  ) );.      REGIS
5450: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5460: 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  2, &aMem[pOp->p2
5470: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
5480: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
5490: 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20  & OPFLG_IN3)!=0 
54a0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
54b0: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
54c0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
54d0: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
54e0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
54f0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
5500: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
5510: 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 52  >p3]) );.      R
5520: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5530: 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p3, &aMem[pOp
5540: 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p3]);.    }.  
5550: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
5560: 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32  ags & OPFLG_OUT2
5570: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5580: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
5590: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
55a0: 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d   pOp->p2<=(p->nM
55b0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
55c0: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
55d0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
55e0: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
55f0: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
5600: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
5610: 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT3)!=0 ){.   
5620: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5630: 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p3>0 );.      as
5640: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
5650: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
5660: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  or) );.      mem
5670: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
5680: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
5690: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
56a0: 20 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f   .    switch( pO
56b0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a  p->opcode ){../*
56c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5700: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
5710: 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20  What follows is 
5720: 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68  a massive switch
5730: 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65   statement where
5740: 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65   each case imple
5750: 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72  ments a.** separ
5760: 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ate instruction 
5770: 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  in the virtual m
5780: 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66  achine.  If we f
5790: 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a  ollow the usual.
57a0: 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63  ** indentation c
57b0: 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68  onventions, each
57c0: 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20   case should be 
57d0: 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70  indented by 6 sp
57e0: 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68  aces.  But.** th
57f0: 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77  at is a lot of w
5800: 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74  asted space on t
5810: 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20  he left margin. 
5820: 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74   So the code wit
5830: 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63  hin.** the switc
5840: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  h statement will
5850: 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76   break with conv
5860: 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c  ention and be fl
5870: 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65  ush-left. Anothe
5880: 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74  r.** big comment
5890: 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69   (similar to thi
58a0: 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b  s one) will mark
58b0: 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68   the point in th
58c0: 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20  e code where.** 
58d0: 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61  we transition ba
58e0: 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64  ck to normal ind
58f0: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
5900: 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f  The formatting o
5910: 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69  f each case is i
5920: 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d  mportant.  The m
5930: 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69  akefile for SQLi
5940: 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20  te.** generates 
5950: 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63  two C files "opc
5960: 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63  odes.h" and "opc
5970: 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e  odes.c" by scann
5980: 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65  ing this.** file
5990: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e   looking for lin
59a0: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
59b0: 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20  th "case OP_".  
59c0: 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69  The opcodes.h fi
59d0: 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66  les.** will be f
59e0: 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69  illed with #defi
59f0: 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e  nes that give un
5a00: 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c  ique integer val
5a10: 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f  ues to each.** o
5a20: 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70  pcode and the op
5a30: 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20  codes.c file is 
5a40: 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61  filled with an a
5a50: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
5a60: 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74  where.** each st
5a70: 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62  ring is the symb
5a80: 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68  olic name for th
5a90: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
5aa0: 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a  opcode.  If the.
5ab0: 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e  ** case statemen
5ac0: 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t is followed by
5ad0: 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68   a comment of th
5ae0: 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20  e form "/# same 
5af0: 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68  as ... #/".** th
5b00: 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73  at comment is us
5b10: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
5b20: 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76  the particular v
5b30: 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f  alue of the opco
5b40: 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20  de..**.** Other 
5b50: 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20  keywords in the 
5b60: 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c  comment that fol
5b70: 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61  lows each case a
5b80: 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f  re used to.** co
5b90: 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c  nstruct the OPFL
5ba0: 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61  G_INITIALIZER va
5bb0: 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c  lue that initial
5bc0: 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65  izes opcodePrope
5bd0: 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72  rty[]..** Keywor
5be0: 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c  ds include: in1,
5bf0: 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f   in2, in3, out2_
5c00: 70 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32  prerelease, out2
5c10: 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20  , out3.  See.** 
5c20: 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77  the mkopcodeh.aw
5c30: 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64  k script for add
5c40: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
5c50: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d  ion..**.** Docum
5c60: 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56  entation about V
5c70: 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67  DBE opcodes is g
5c80: 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e  enerated by scan
5c90: 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a  ning this file.*
5ca0: 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74  * for lines of t
5cb0: 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63  hat contain "Opc
5cc0: 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e  ode:".  That lin
5cd0: 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71  e and all subseq
5ce0: 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20  uent.** comment 
5cf0: 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69  lines are used i
5d00: 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
5d10: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68   of the opcode.h
5d20: 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  tml documentatio
5d30: 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  n.** file..**.**
5d40: 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20   SUMMARY:.**.** 
5d50: 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69      Formatting i
5d60: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73  s important to s
5d70: 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e  cripts that scan
5d80: 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20   this file..**  
5d90: 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74     Do not deviat
5da0: 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61  e from the forma
5db0: 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72  tting style curr
5dc0: 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a  ently in use..**
5dd0: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
5de0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5df0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
5e20: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74  ./* Opcode:  Got
5e30: 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  o * P2 * * *.**.
5e40: 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f  ** An unconditio
5e50: 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  nal jump to addr
5e60: 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e  ess P2..** The n
5e70: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
5e80: 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65  executed will be
5e90: 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20   .** the one at 
5ea0: 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68  index P2 from th
5eb0: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a  e beginning of.*
5ec0: 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  * the program..*
5ed0: 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20  /.case OP_Goto: 
5ee0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
5ef0: 20 6a 75 6d 70 20 2a 2f 0a 20 20 70 63 20 3d 20   jump */.  pc = 
5f00: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 0a 20 20  pOp->p2 - 1;..  
5f10: 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68 61 74 20  /* Opcodes that 
5f20: 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20  are used as the 
5f30: 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70  bottom of a loop
5f40: 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72   (OP_Next, OP_Pr
5f50: 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78  ev,.  ** OP_VNex
5f60: 74 2c 20 4f 50 5f 52 6f 77 53 65 74 4e 65 78 74  t, OP_RowSetNext
5f70: 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65  , or OP_SorterNe
5f80: 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72  xt) all jump her
5f90: 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70  e upon.  ** comp
5fa0: 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74  letion.  Check t
5fb0: 6f 20 73 65 65 20 69 66 20 73 71 6c 69 74 65 33  o see if sqlite3
5fc0: 5f 69 6e 74 65 72 72 75 70 74 28 29 20 68 61 73  _interrupt() has
5fd0: 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a   been called.  *
5fe0: 2a 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67  * or if the prog
5ff0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65  ress callback ne
6000: 65 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65  eds to be invoke
6010: 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  d. .  **.  ** Th
6020: 69 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73  is code uses uns
6030: 74 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22  tructured "goto"
6040: 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20   statements and 
6050: 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c  does not look cl
6060: 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68  ean..  ** But th
6070: 61 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f  at is not due to
6080: 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68   sloppy coding h
6090: 61 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20  abits. The code 
60a0: 69 73 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a  is written this.
60b0: 20 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72    ** way for per
60c0: 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f  formance, to avo
60d0: 69 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e  id having to run
60e0: 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 61   the interrupt a
60f0: 6e 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a  nd progress.  **
6100: 20 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79   checks on every
6110: 20 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68   opcode.  This h
6120: 65 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65  elps sqlite3_ste
6130: 70 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74  p() to run about
6140: 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65   1.5%.  ** faste
6150: 72 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22  r according to "
6160: 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d  valgrind --tool=
6170: 63 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63  cachegrind" */.c
6180: 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
6190: 70 74 3a 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f  pt:.  CHECK_FOR_
61a0: 49 4e 54 45 52 52 55 50 54 3b 0a 23 69 66 6e 64  INTERRUPT;.#ifnd
61b0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
61c0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
61d0: 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70  .  /* Call the p
61e0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
61f0: 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67   if it is config
6200: 75 72 65 64 20 61 6e 64 20 74 68 65 20 72 65 71  ured and the req
6210: 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a  uired number.  *
6220: 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61  * of VDBE ops ha
6230: 76 65 20 62 65 65 6e 20 65 78 65 63 75 74 65 64  ve been executed
6240: 20 28 65 69 74 68 65 72 20 73 69 6e 63 65 20 74   (either since t
6250: 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  his invocation o
6260: 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  f.  ** sqlite3Vd
6270: 62 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63  beExec() or sinc
6280: 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20  e last time the 
6290: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
62a0: 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20  k was called).. 
62b0: 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72   ** If the progr
62c0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74  ess callback ret
62d0: 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65  urns non-zero, e
62e0: 78 69 74 20 74 68 65 20 76 69 72 74 75 61 6c 20  xit the virtual 
62f0: 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20 2a  machine with.  *
6300: 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20  * a return code 
6310: 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20  SQLITE_ABORT..  
6320: 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72  */.  if( db->xPr
6330: 6f 67 72 65 73 73 21 3d 30 20 26 26 20 6e 56 6d  ogress!=0 && nVm
6340: 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c  Step>=nProgressL
6350: 69 6d 69 74 20 29 7b 0a 20 20 20 20 61 73 73 65  imit ){.    asse
6360: 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  rt( db->nProgres
6370: 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e  sOps!=0 );.    n
6380: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20  ProgressLimit = 
6390: 6e 56 6d 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50  nVmStep + db->nP
63a0: 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 6e 56  rogressOps - (nV
63b0: 6d 53 74 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72  mStep%db->nProgr
63c0: 65 73 73 4f 70 73 29 3b 0a 20 20 20 20 69 66 28  essOps);.    if(
63d0: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64   db->xProgress(d
63e0: 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29  b->pProgressArg)
63f0: 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
6400: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b  QLITE_INTERRUPT;
6410: 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
6420: 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20  _error_halt;.   
6430: 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
6440: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6450: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
6460: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
6470: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
6480: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
6490: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
64a0: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
64b0: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
64c0: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
64d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
64e0: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
64f0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
6500: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p1<=(p->nMem-p
6510: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
6520: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
6530: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
6540: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
6550: 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20  MEM_Dyn)==0 );. 
6560: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
6570: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49  e(p, pIn1);.  pI
6580: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
6590: 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  Int;.  pIn1->u.i
65a0: 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45   = pc;.  REGISTE
65b0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
65c0: 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70   pIn1);.  pc = p
65d0: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72  Op->p2 - 1;.  br
65e0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
65f0: 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20  e:  Return P1 * 
6600: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  * * *.**.** Jump
6610: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
6620: 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74  truction after t
6630: 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65  he address in re
6640: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61  gister P1..*/.ca
6650: 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20  se OP_Return: { 
6660: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6670: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
6680: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
6690: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
66a0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
66b0: 20 20 70 63 20 3d 20 28 69 6e 74 29 70 49 6e 31    pc = (int)pIn1
66c0: 2d 3e 75 2e 69 3b 0a 20 20 62 72 65 61 6b 3b 0a  ->u.i;.  break;.
66d0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59  }../* Opcode:  Y
66e0: 69 65 6c 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  ield P1 * * * *.
66f0: 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70  **.** Swap the p
6700: 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77  rogram counter w
6710: 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ith the value in
6720: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f   register P1..*/
6730: 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20  .case OP_Yield: 
6740: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
6750: 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44  in1 */.  int pcD
6760: 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  est;.  pIn1 = &a
6770: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6780: 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66  assert( (pIn1->f
6790: 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d  lags & MEM_Dyn)=
67a0: 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  =0 );.  pIn1->fl
67b0: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
67c0: 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70   pcDest = (int)p
67d0: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31  In1->u.i;.  pIn1
67e0: 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45  ->u.i = pc;.  RE
67f0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
6800: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ->p1, pIn1);.  p
6810: 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62 72  c = pcDest;.  br
6820: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6830: 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20  e:  HaltIfNull  
6840: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
6850: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20  * Synopsis:  if 
6860: 72 5b 50 33 5d 20 6e 75 6c 6c 20 74 68 65 6e 20  r[P3] null then 
6870: 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b  halt.**.** Check
6880: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
6890: 67 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69  gister P3.  If i
68a0: 74 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48  t is NULL then H
68b0: 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72  alt using.** par
68c0: 61 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61  ameter P1, P2, a
68d0: 6e 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73  nd P4 as if this
68e0: 20 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73   were a Halt ins
68f0: 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68  truction.  If th
6900: 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65  e.** value in re
6910: 67 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74  gister P3 is not
6920: 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73   NULL, then this
6930: 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f   routine is a no
6940: 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70  -op..** The P5 p
6950: 61 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20  arameter should 
6960: 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  be 1..*/.case OP
6970: 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20  _HaltIfNull: {  
6980: 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20      /* in3 */.  
6990: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
69a0: 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p3];.  if( (pI
69b0: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
69c0: 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b  Null)==0 ) break
69d0: 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
69e0: 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74  ugh into OP_Halt
69f0: 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65   */.}../* Opcode
6a00: 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20  :  Halt P1 P2 * 
6a10: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74  P4 P5.**.** Exit
6a20: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41   immediately.  A
6a30: 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c  ll open cursors,
6a40: 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a   etc are closed.
6a50: 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
6a60: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ..**.** P1 is th
6a70: 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65  e result code re
6a80: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
6a90: 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65  3_exec(), sqlite
6aa0: 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72  3_reset(),.** or
6ab0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
6ac0: 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d  e().  For a norm
6ad0: 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68  al halt, this sh
6ae0: 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f  ould be SQLITE_O
6af0: 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72  K (0)..** For er
6b00: 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20  rors, it can be 
6b10: 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65  some other value
6b20: 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e  .  If P1!=0 then
6b30: 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69   P2 will determi
6b40: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72  ne.** whether or
6b50: 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b   not to rollback
6b60: 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
6b70: 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f  nsaction.  Do no
6b80: 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66  t rollback.** if
6b90: 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f   P2==OE_Fail. Do
6ba0: 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66   the rollback if
6bb0: 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b   P2==OE_Rollback
6bc0: 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f  .  If P2==OE_Abo
6bd0: 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b  rt,.** then back
6be0: 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73   out all changes
6bf0: 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72   that have occur
6c00: 72 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20  red during this 
6c10: 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65  execution of the
6c20: 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f  .** VDBE, but do
6c30: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68   not rollback th
6c40: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a  e transaction. .
6c50: 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
6c60: 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20  ot null then it 
6c70: 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  is an error mess
6c80: 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a  age string..**.*
6c90: 2a 20 50 35 20 69 73 20 61 20 76 61 6c 75 65 20  * P5 is a value 
6ca0: 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c  between 0 and 4,
6cb0: 20 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74   inclusive, that
6cc0: 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50 34   modifies the P4
6cd0: 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20   string..**.**  
6ce0: 20 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65    0:  (no change
6cf0: 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20  ).**    1:  NOT 
6d00: 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66  NULL contraint f
6d10: 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20  ailed: P4.**    
6d20: 32 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  2:  UNIQUE const
6d30: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34  raint failed: P4
6d40: 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b  .**    3:  CHECK
6d50: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
6d60: 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20  ed: P4.**    4: 
6d70: 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e   FOREIGN KEY con
6d80: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20  straint failed: 
6d90: 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  P4.**.** If P5 i
6da0: 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50  s not zero and P
6db0: 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20  4 is NULL, then 
6dc0: 65 76 65 72 79 74 68 69 6e 67 20 61 66 74 65 72  everything after
6dd0: 20 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f   the ":" is.** o
6de0: 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  mitted..**.** Th
6df0: 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65  ere is an implie
6e00: 64 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69  d "Halt 0 0 0" i
6e10: 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72  nstruction inser
6e20: 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20  ted at the very 
6e30: 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20  end of.** every 
6e40: 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a  program.  So a j
6e50: 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73  ump past the las
6e60: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66  t instruction of
6e70: 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20   the program.** 
6e80: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65  is the same as e
6e90: 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a  xecuting Halt..*
6ea0: 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20  /.case OP_Halt: 
6eb0: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
6ec0: 7a 54 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63  zType;.  const c
6ed0: 68 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 0a 20  har *zLogFmt;.. 
6ee0: 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51   if( pOp->p1==SQ
6ef0: 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46  LITE_OK && p->pF
6f00: 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48  rame ){.    /* H
6f10: 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f 67  alt the sub-prog
6f20: 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74  ram. Return cont
6f30: 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65 6e  rol to the paren
6f40: 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20  t frame. */.    
6f50: 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
6f60: 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  e = p->pFrame;. 
6f70: 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70     p->pFrame = p
6f80: 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a  Frame->pParent;.
6f90: 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b      p->nFrame--;
6fa0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
6fb0: 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
6fc0: 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20  ->nChange);.    
6fd0: 70 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  pc = sqlite3Vdbe
6fe0: 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72  FrameRestore(pFr
6ff0: 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f  ame);.    lastRo
7000: 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f  wid = db->lastRo
7010: 77 69 64 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  wid;.    if( pOp
7020: 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20  ->p2==OE_Ignore 
7030: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74  ){.      /* Inst
7040: 72 75 63 74 69 6f 6e 20 70 63 20 69 73 20 74 68  ruction pc is th
7050: 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61  e OP_Program tha
7060: 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75  t invoked the su
7070: 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20  b-program .     
7080: 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65   ** currently be
7090: 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74  ing halted. If t
70a0: 68 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f  he p2 instructio
70b0: 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c  n of this OP_Hal
70c0: 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72  t.      ** instr
70d0: 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f  uction is set to
70e0: 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e   OE_Ignore, then
70f0: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
7100: 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20   is throwing.   
7110: 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20     ** an IGNORE 
7120: 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68  exception. In th
7130: 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20  is case jump to 
7140: 74 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63  the address spec
7150: 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61  ified.      ** a
7160: 73 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20  s the p2 of the 
7170: 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
7180: 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63  am.  */.      pc
7190: 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32   = p->aOp[pc].p2
71a0: 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f  -1;.    }.    aO
71b0: 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20  p = p->aOp;.    
71c0: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
71d0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
71e0: 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31   p->rc = pOp->p1
71f0: 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69  ;.  p->errorActi
7200: 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32  on = (u8)pOp->p2
7210: 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a  ;.  p->pc = pc;.
7220: 20 20 69 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20    if( p->rc ){. 
7230: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29     if( pOp->p5 )
7240: 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63  {.      static c
7250: 6f 6e 73 74 20 63 68 61 72 20 2a 20 63 6f 6e 73  onst char * cons
7260: 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b 20 22  t azType[] = { "
7270: 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e 49 51  NOT NULL", "UNIQ
7280: 55 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a 20 20  UE", "CHECK",.  
7290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72b0: 20 20 20 20 20 20 20 20 20 20 20 22 46 4f 52 45             "FORE
72c0: 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20 20 20  IGN KEY" };.    
72d0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
72e0: 35 3e 3d 31 20 26 26 20 70 4f 70 2d 3e 70 35 3c  5>=1 && pOp->p5<
72f0: 3d 34 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =4 );.      test
7300: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31  case( pOp->p5==1
7310: 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
7320: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29  se( pOp->p5==2 )
7330: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
7340: 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a  ( pOp->p5==3 );.
7350: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
7360: 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20  pOp->p5==4 );.  
7370: 20 20 20 20 7a 54 79 70 65 20 3d 20 61 7a 54 79      zType = azTy
7380: 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 3b 0a 20  pe[pOp->p5-1];. 
7390: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
73a0: 7a 54 79 70 65 20 3d 20 30 3b 0a 20 20 20 20 7d  zType = 0;.    }
73b0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 54 79  .    assert( zTy
73c0: 70 65 21 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34  pe!=0 || pOp->p4
73d0: 2e 7a 21 3d 30 20 29 3b 0a 20 20 20 20 7a 4c 6f  .z!=0 );.    zLo
73e0: 67 46 6d 74 20 3d 20 22 61 62 6f 72 74 20 61 74  gFmt = "abort at
73f0: 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22   %d in [%s]: %s"
7400: 3b 0a 20 20 20 20 69 66 28 20 7a 54 79 70 65 20  ;.    if( zType 
7410: 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  && pOp->p4.z ){.
7420: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
7430: 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
7440: 73 67 2c 20 64 62 2c 20 22 25 73 20 63 6f 6e 73  sg, db, "%s cons
7450: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 25  traint failed: %
7460: 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  s", .           
7470: 20 20 20 20 20 20 20 20 20 20 20 20 7a 54 79 70              zTyp
7480: 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  e, pOp->p4.z);. 
7490: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70     }else if( pOp
74a0: 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20  ->p4.z ){.      
74b0: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
74c0: 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
74d0: 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e  , "%s", pOp->p4.
74e0: 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  z);.    }else{. 
74f0: 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
7500: 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
7510: 67 2c 20 64 62 2c 20 22 25 73 20 63 6f 6e 73 74  g, db, "%s const
7520: 72 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 7a  raint failed", z
7530: 54 79 70 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20  Type);.    }.   
7540: 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70   sqlite3_log(pOp
7550: 2d 3e 70 31 2c 20 7a 4c 6f 67 46 6d 74 2c 20 70  ->p1, zLogFmt, p
7560: 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a  c, p->zSql, p->z
7570: 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72  ErrMsg);.  }.  r
7580: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48  c = sqlite3VdbeH
7590: 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74  alt(p);.  assert
75a0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
75b0: 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  Y || rc==SQLITE_
75c0: 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  OK || rc==SQLITE
75d0: 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28 20  _ERROR );.  if( 
75e0: 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc==SQLITE_BUSY 
75f0: 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 72  ){.    p->rc = r
7600: 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
7610: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
7620: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
7630: 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78  _OK || (p->rc&0x
7640: 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53  ff)==SQLITE_CONS
7650: 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61 73  TRAINT );.    as
7660: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
7670: 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  _OK || db->nDefe
7680: 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62  rredCons>0 || db
7690: 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
76a0: 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  ns>0 );.    rc =
76b0: 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f   p->rc ? SQLITE_
76c0: 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44  ERROR : SQLITE_D
76d0: 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  ONE;.  }.  goto 
76e0: 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a  vdbe_return;.}..
76f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67  /* Opcode: Integ
7700: 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
7710: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
7720: 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33  ]=P1.**.** The 3
7730: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  2-bit integer va
7740: 6c 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65  lue P1 is writte
7750: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
7760: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
7770: 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20  nteger: {       
7780: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
7790: 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
77a0: 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  u.i = pOp->p1;. 
77b0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
77c0: 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32  code: Int64 * P2
77d0: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
77e0: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a  sis: r[P2]=P4.**
77f0: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
7800: 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20  ter to a 64-bit 
7810: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a  integer value..*
7820: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
7830: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
7840: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
7850: 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20  Int64: {        
7860: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
7870: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
7880: 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21  t( pOp->p4.pI64!
7890: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  =0 );.  pOut->u.
78a0: 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36  i = *pOp->p4.pI6
78b0: 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  4;.  break;.}..#
78c0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
78d0: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
78e0: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  T./* Opcode: Rea
78f0: 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  l * P2 * P4 *.**
7900: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
7910: 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  =P4.**.** P4 is 
7920: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36  a pointer to a 6
7930: 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70  4-bit floating p
7940: 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  oint value..** W
7950: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
7960: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
7970: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
7980: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
7990: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c  /* same as TK_FL
79a0: 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c  OAT, out2-prerel
79b0: 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
79c0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c  flags = MEM_Real
79d0: 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c  ;.  assert( !sql
79e0: 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e  ite3IsNaN(*pOp->
79f0: 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70  p4.pReal) );.  p
7a00: 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70  Out->r = *pOp->p
7a10: 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b  4.pReal;.  break
7a20: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
7a30: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a  pcode: String8 *
7a40: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
7a50: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50  nopsis: r[P2]='P
7a60: 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e  4'.**.** P4 poin
7a70: 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d  ts to a nul term
7a80: 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72  inated UTF-8 str
7a90: 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  ing. This opcode
7aa0: 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20   is transformed 
7ab0: 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53  .** into an OP_S
7ac0: 74 72 69 6e 67 20 62 65 66 6f 72 65 20 69 74 20  tring before it 
7ad0: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
7ae0: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 0a  the first time..
7af0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e  */.case OP_Strin
7b00: 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  g8: {         /*
7b10: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49   same as TK_STRI
7b20: 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65  NG, out2-prerele
7b30: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
7b40: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
7b50: 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
7b60: 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f   OP_String;.  pO
7b70: 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53  p->p1 = sqlite3S
7b80: 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e  trlen30(pOp->p4.
7b90: 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  z);..#ifndef SQL
7ba0: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
7bb0: 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53   if( encoding!=S
7bc0: 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20  QLITE_UTF8 ){.  
7bd0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
7be0: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
7bf0: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c  , pOp->p4.z, -1,
7c00: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
7c10: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
7c20: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
7c30: 5f 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74  _TOOBIG ) goto t
7c40: 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20  oo_big;.    if( 
7c50: 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74  SQLITE_OK!=sqlit
7c60: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
7c70: 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
7c80: 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  ing) ) goto no_m
7c90: 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
7ca0: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70  pOut->zMalloc==p
7cb0: 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73  Out->z );.    as
7cc0: 73 65 72 74 28 20 70 4f 75 74 2d 3e 66 6c 61 67  sert( pOut->flag
7cd0: 73 20 26 20 4d 45 4d 5f 44 79 6e 20 29 3b 0a 20  s & MEM_Dyn );. 
7ce0: 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63     pOut->zMalloc
7cf0: 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e   = 0;.    pOut->
7d00: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61  flags |= MEM_Sta
7d10: 74 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  tic;.    pOut->f
7d20: 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e  lags &= ~MEM_Dyn
7d30: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
7d40: 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49  4type==P4_DYNAMI
7d50: 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  C ){.      sqlit
7d60: 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70  e3DbFree(db, pOp
7d70: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20  ->p4.z);.    }. 
7d80: 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d     pOp->p4type =
7d90: 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20   P4_DYNAMIC;.   
7da0: 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75   pOp->p4.z = pOu
7db0: 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  t->z;.    pOp->p
7dc0: 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d  1 = pOut->n;.  }
7dd0: 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f  .#endif.  if( pO
7de0: 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74  p->p1>db->aLimit
7df0: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
7e00: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
7e10: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
7e20: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
7e30: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73   to the next cas
7e40: 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a  e, OP_String */.
7e50: 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  }.  ./* Opcode: 
7e60: 53 74 72 69 6e 67 20 50 31 20 50 32 20 2a 20 50  String P1 P2 * P
7e70: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
7e80: 20 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65 6e   r[P2]='P4' (len
7e90: 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  =P1).**.** The s
7ea0: 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f  tring value P4 o
7eb0: 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74  f length P1 (byt
7ec0: 65 73 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e  es) is stored in
7ed0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
7ee0: 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a  .case OP_String:
7ef0: 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
7f00: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7f10: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
7f20: 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f  >p4.z!=0 );.  pO
7f30: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
7f40: 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d  Str|MEM_Static|M
7f50: 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
7f60: 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  >z = pOp->p4.z;.
7f70: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d    pOut->n = pOp-
7f80: 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  >p1;.  pOut->enc
7f90: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
7fa0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
7fb0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
7fc0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7fd0: 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a   Null P1 P2 P3 *
7fe0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
7ff0: 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a   r[P2..P3]=NULL.
8000: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55  **.** Write a NU
8010: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
8020: 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72 65  s P2.  If P3 gre
8030: 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68  ater than P2, th
8040: 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a  en also write.**
8050: 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73   NULL into regis
8060: 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72 79  ter P3 and every
8070: 20 72 65 67 69 73 74 65 72 20 69 6e 20 62 65 74   register in bet
8080: 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20  ween P2 and P3. 
8090: 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73   If P3.** is les
80a0: 73 20 74 68 61 6e 20 50 32 20 28 74 79 70 69 63  s than P2 (typic
80b0: 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29  ally P3 is zero)
80c0: 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73   then only regis
80d0: 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74  ter P2 is.** set
80e0: 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   to NULL..**.** 
80f0: 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  If the P1 value 
8100: 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
8110: 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 4d  n also set the M
8120: 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67 20  EM_Cleared flag 
8130: 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20  so that.** NULL 
8140: 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20  values will not 
8150: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65 76  compare equal ev
8160: 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c  en if SQLITE_NUL
8170: 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a  LEQ is set on.**
8180: 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e   OP_Ne or OP_Eq.
8190: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
81a0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
81b0: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
81c0: 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20   */.  int cnt;. 
81d0: 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20   u16 nullFlag;. 
81e0: 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70   cnt = pOp->p3-p
81f0: 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
8200: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
8210: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
8220: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
8230: 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f   = nullFlag = pO
8240: 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c  p->p1 ? (MEM_Nul
8250: 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a  l|MEM_Cleared) :
8260: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69   MEM_Null;.  whi
8270: 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20  le( cnt>0 ){.   
8280: 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d   pOut++;.    mem
8290: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
82a0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 56 64 62 65   pOut);.    Vdbe
82b0: 4d 65 6d 52 65 6c 65 61 73 65 28 70 4f 75 74 29  MemRelease(pOut)
82c0: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
82d0: 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20  s = nullFlag;.  
82e0: 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62    cnt--;.  }.  b
82f0: 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
8300: 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20  ode: Blob P1 P2 
8310: 2a 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  * P4.** Synopsis
8320: 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d  : r[P2]=P4 (len=
8330: 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69  P1).**.** P4 poi
8340: 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66  nts to a blob of
8350: 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c   data P1 bytes l
8360: 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73  ong.  Store this
8370: 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69  .** blob in regi
8380: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
8390: 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20   OP_Blob: {     
83a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
83b0: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
83c0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
83d0: 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58  p1 <= SQLITE_MAX
83e0: 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c  _LENGTH );.  sql
83f0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
8400: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
8410: 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30  z, pOp->p1, 0, 0
8420: 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  );.  pOut->enc =
8430: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
8440: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
8450: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
8460: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  .}../* Opcode: V
8470: 61 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20  ariable P1 P2 * 
8480: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
8490: 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65  : r[P2]=paramete
84a0: 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54  r(P1,P4).**.** T
84b0: 72 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75  ransfer the valu
84c0: 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61  es of bound para
84d0: 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  meter P1 into re
84e0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20  gister P2.**.** 
84f0: 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  If the parameter
8500: 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20   is named, then 
8510: 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73  its name appears
8520: 20 69 6e 20 50 34 20 61 6e 64 20 50 33 3d 3d 31   in P4 and P3==1
8530: 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  ..** The P4 valu
8540: 65 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c  e is used by sql
8550: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
8560: 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63  ter_name()..*/.c
8570: 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a  ase OP_Variable:
8580: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
8590: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
85a0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b   */.  Mem *pVar;
85b0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
85c0: 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65  being transferre
85d0: 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  d */..  assert( 
85e0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
85f0: 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b  ->p1<=p->nVar );
8600: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8610: 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  p4.z==0 || pOp->
8620: 70 34 2e 7a 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70  p4.z==p->azVar[p
8630: 4f 70 2d 3e 70 31 2d 31 5d 20 29 3b 0a 20 20 70  Op->p1-1] );.  p
8640: 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70  Var = &p->aVar[p
8650: 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69  Op->p1 - 1];.  i
8660: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
8670: 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b  mTooBig(pVar) ){
8680: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
8690: 67 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  g;.  }.  sqlite3
86a0: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
86b0: 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d  py(pOut, pVar, M
86c0: 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50  EM_Static);.  UP
86d0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
86e0: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
86f0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8700: 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a 20  Move P1 P2 P3 * 
8710: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
8720: 72 5b 50 32 40 50 33 5d 3d 72 5b 50 31 40 50 33  r[P2@P3]=r[P1@P3
8730: 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65  ].**.** Move the
8740: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
8750: 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 20 6f 76  ter P1..P1+P3 ov
8760: 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  er into.** regis
8770: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 20  ters P2..P2+P3. 
8780: 20 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50   Registers P1..P
8790: 31 2b 50 33 20 61 72 65 0a 2a 2a 20 6c 65 66 74  1+P3 are.** left
87a0: 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e   holding a NULL.
87b0: 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72    It is an error
87c0: 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61   for register ra
87d0: 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50  nges.** P1..P1+P
87e0: 33 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 20  3 and P2..P2+P3 
87f0: 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63  to overlap..*/.c
8800: 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20  ase OP_Move: {. 
8810: 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20   char *zMalloc; 
8820: 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 76 61 72    /* Holding var
8830: 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c 6f 63 61  iable for alloca
8840: 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  ted memory */.  
8850: 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
8860: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
8870: 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20  gisters left to 
8880: 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31  copy */.  int p1
8890: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
88a0: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66  gister to copy f
88b0: 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  rom */.  int p2;
88c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
88d0: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f  ister to copy to
88e0: 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   */..  n = pOp->
88f0: 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  p3;.  p1 = pOp->
8900: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
8910: 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  p2;.  assert( n>
8920: 3d 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32  =0 && p1>0 && p2
8930: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
8940: 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e  p1+n<=p2 || p2+n
8950: 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20  <=p1 );..  pIn1 
8960: 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70  = &aMem[p1];.  p
8970: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b  Out = &aMem[p2];
8980: 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
8990: 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28  t( pOut<=&aMem[(
89a0: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
89b0: 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
89c0: 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b  rt( pIn1<=&aMem[
89d0: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
89e0: 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
89f0: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
8a00: 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d  pIn1) );.    mem
8a10: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
8a20: 20 70 4f 75 74 29 3b 0a 20 20 20 20 7a 4d 61 6c   pOut);.    zMal
8a30: 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c  loc = pOut->zMal
8a40: 6c 6f 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a  loc;.    pOut->z
8a50: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
8a60: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
8a70: 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a  ve(pOut, pIn1);.
8a80: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
8a90: 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f 75 74  BUG.    if( pOut
8aa0: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61  ->pScopyFrom>=&a
8ab0: 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d  Mem[p1] && pOut-
8ac0: 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 26 61 4d 65  >pScopyFrom<&aMe
8ad0: 6d 5b 70 31 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b  m[p1+pOp->p3] ){
8ae0: 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63  .      pOut->pSc
8af0: 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 31 20 2d 20  opyFrom += p1 - 
8b00: 70 4f 70 2d 3e 70 32 3b 0a 20 20 20 20 7d 0a 23  pOp->p2;.    }.#
8b10: 65 6e 64 69 66 0a 20 20 20 20 70 49 6e 31 2d 3e  endif.    pIn1->
8b20: 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f  zMalloc = zMallo
8b30: 63 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  c;.    REGISTER_
8b40: 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74  TRACE(p2++, pOut
8b50: 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  );.    pIn1++;. 
8b60: 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68     pOut++;.  }wh
8b70: 69 6c 65 28 20 6e 2d 2d 20 29 3b 0a 20 20 62 72  ile( n-- );.  br
8b80: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
8b90: 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50 33  e: Copy P1 P2 P3
8ba0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
8bb0: 3a 20 72 5b 50 32 40 50 33 5d 3d 72 5b 50 31 40  : r[P2@P3]=r[P1@
8bc0: 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61  P3].**.** Make a
8bd0: 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65   copy of registe
8be0: 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74  rs P1..P1+P3 int
8bf0: 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e  o registers P2..
8c00: 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  P2+P3..**.** Thi
8c10: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61  s instruction ma
8c20: 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79 20  kes a deep copy 
8c30: 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41  of the value.  A
8c40: 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73   duplicate.** is
8c50: 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72   made of any str
8c60: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73  ing or blob cons
8c70: 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20  tant.  See also 
8c80: 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73  OP_SCopy..*/.cas
8c90: 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69  e OP_Copy: {.  i
8ca0: 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70  nt n;..  n = pOp
8cb0: 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26  ->p3;.  pIn1 = &
8cc0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
8cd0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
8ce0: 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
8cf0: 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a  ( pOut!=pIn1 );.
8d00: 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20    while( 1 ){.  
8d10: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
8d20: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
8d30: 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65  , pIn1, MEM_Ephe
8d40: 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65  m);.    Deepheme
8d50: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69  ralize(pOut);.#i
8d60: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
8d70: 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f  G.    pOut->pSco
8d80: 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64  pyFrom = 0;.#end
8d90: 69 66 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  if.    REGISTER_
8da0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f  TRACE(pOp->p2+pO
8db0: 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a  p->p3-n, pOut);.
8dc0: 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30      if( (n--)==0
8dd0: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f   ) break;.    pO
8de0: 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  ut++;.    pIn1++
8df0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
8e00: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f  ../* Opcode: SCo
8e10: 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  py P1 P2 * * *.*
8e20: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
8e30: 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61  ]=r[P1].**.** Ma
8e40: 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  ke a shallow cop
8e50: 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  y of register P1
8e60: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
8e70: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
8e80: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
8e90: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
8ea0: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66  f the value.  If
8eb0: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   the value.** is
8ec0: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
8ed0: 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79  b, then the copy
8ee0: 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74   is only a point
8ef0: 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69  er to the.** ori
8f00: 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20  ginal and hence 
8f10: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
8f20: 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20  changes so will 
8f30: 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72  the copy..** Wor
8f40: 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69  se, if the origi
8f50: 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74  nal is deallocat
8f60: 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63  ed, the copy bec
8f70: 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a  omes invalid..**
8f80: 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61   Thus the progra
8f90: 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65  m must guarantee
8fa0: 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e   that the origin
8fb0: 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e  al will not chan
8fc0: 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65  ge.** during the
8fd0: 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65   lifetime of the
8fe0: 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43   copy.  Use OP_C
8ff0: 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f  opy to make a co
9000: 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a  mplete.** copy..
9010: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79  */.case OP_SCopy
9020: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
9030: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  * out2 */.  pIn1
9040: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
9050: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
9060: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
9070: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
9080: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
9090: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
90a0: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
90b0: 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53  Ephem);.#ifdef S
90c0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
90d0: 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  ( pOut->pScopyFr
90e0: 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53  om==0 ) pOut->pS
90f0: 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b  copyFrom = pIn1;
9100: 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b  .#endif.  break;
9110: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
9120: 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a  esultRow P1 P2 *
9130: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
9140: 3a 20 20 6f 75 74 70 75 74 3d 72 5b 50 31 40 50  :  output=r[P1@P
9150: 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67  2].**.** The reg
9160: 69 73 74 65 72 73 20 50 31 20 74 68 72 6f 75 67  isters P1 throug
9170: 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69  h P1+P2-1 contai
9180: 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  n a single row o
9190: 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68  f.** results. Th
91a0: 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73  is opcode causes
91b0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65   the sqlite3_ste
91c0: 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d  p() call to term
91d0: 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e  inate.** with an
91e0: 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75   SQLITE_ROW retu
91f0: 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73  rn code and it s
9200: 65 74 73 20 75 70 20 74 68 65 20 73 71 6c 69 74  ets up the sqlit
9210: 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63  e3_stmt.** struc
9220: 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20  ture to provide 
9230: 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 74 6f  access to the to
9240: 70 20 50 31 20 76 61 6c 75 65 73 20 61 73 20 74  p P1 values as t
9250: 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f 77  he result.** row
9260: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73  ..*/.case OP_Res
9270: 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20  ultRow: {.  Mem 
9280: 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a  *pMem;.  int i;.
9290: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65    assert( p->nRe
92a0: 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32  sColumn==pOp->p2
92b0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
92c0: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73  p->p1>0 );.  ass
92d0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70  ert( pOp->p1+pOp
92e0: 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p2<=(p->nMem-p
92f0: 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
9300: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
9310: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
9320: 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20  LLBACK.  /* Run 
9330: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 6f 75  the progress cou
9340: 6e 74 65 72 20 6a 75 73 74 20 62 65 66 6f 72 65  nter just before
9350: 20 72 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f   returning..  */
9360: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
9370: 72 65 73 73 21 3d 30 0a 20 20 20 26 26 20 6e 56  ress!=0.   && nV
9380: 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73  mStep>=nProgress
9390: 4c 69 6d 69 74 0a 20 20 20 26 26 20 64 62 2d 3e  Limit.   && db->
93a0: 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50  xProgress(db->pP
93b0: 72 6f 67 72 65 73 73 41 72 67 29 21 3d 30 0a 20  rogressArg)!=0. 
93c0: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
93d0: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  ITE_INTERRUPT;. 
93e0: 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72     goto vdbe_err
93f0: 6f 72 5f 68 61 6c 74 3b 0a 20 20 7d 0a 23 65 6e  or_halt;.  }.#en
9400: 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69  dif..  /* If thi
9410: 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  s statement has 
9420: 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61  violated immedia
9430: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
9440: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20  onstraints, do. 
9450: 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74   ** not return t
9460: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
9470: 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20  s modified. And 
9480: 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74  do not RELEASE t
9490: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a  he statement.  *
94a0: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  * transaction. I
94b0: 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  t needs to be ro
94c0: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20  lled back.  */. 
94d0: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
94e0: 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
94f0: 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20  eCheckFk(p, 0)) 
9500: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
9510: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
9520: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20  CountRows );.   
9530: 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73   assert( p->uses
9540: 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20  StmtJournal );. 
9550: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
9560: 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54   /* If the SQLIT
9570: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67  E_CountRows flag
9580: 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74   is set in sqlit
9590: 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  e3.flags mask, t
95a0: 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74  hen .  ** DML st
95b0: 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20  atements invoke 
95c0: 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72  this opcode to r
95d0: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
95e0: 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d   of rows .  ** m
95f0: 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20 75  odified to the u
9600: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68 65  ser. This is the
9610: 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61   only way that a
9620: 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70   VM that.  ** op
9630: 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ens a statement 
9640: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
9650: 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
9660: 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e  de..  **.  ** In
9670: 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73 75   case this is su
9680: 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20  ch a statement, 
9690: 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d  close any statem
96a0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
96b0: 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74    ** opened by t
96c0: 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65  his VM before re
96d0: 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20  turning control 
96e0: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
96f0: 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73  s is to.  ** ens
9700: 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d 65  ure that stateme
9710: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
9720: 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65  are always neste
9730: 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69  d, not overlappi
9740: 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  ng..  ** If the 
9750: 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74  open statement-t
9760: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
9770: 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74  t closed here, t
9780: 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a  hen the user.  *
9790: 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68  * may step anoth
97a0: 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73  er VM that opens
97b0: 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65   its own stateme
97c0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
97d0: 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65  This.  ** may le
97e0: 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e  ad to overlappin
97f0: 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  g statement tran
9800: 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  sactions..  **. 
9810: 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e   ** The statemen
9820: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t transaction is
9830: 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76   never a top-lev
9840: 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  el transaction. 
9850: 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20   Hence.  ** the 
9860: 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c  RELEASE call bel
9870: 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69  ow can never fai
9880: 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  l..  */.  assert
9890: 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
98a0: 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26  =0 || db->flags&
98b0: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
98c0: 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
98d0: 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65  e3VdbeCloseState
98e0: 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e  ment(p, SAVEPOIN
98f0: 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66  T_RELEASE);.  if
9900: 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
9910: 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72  TE_OK) ){.    br
9920: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  eak;.  }..  /* I
9930: 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70  nvalidate all ep
9940: 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72  hemeral cursor r
9950: 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70  ow caches */.  p
9960: 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d  ->cacheCtr = (p-
9970: 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31  >cacheCtr + 2)|1
9980: 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
9990: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
99a0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
99b0: 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e   are \000 termin
99c0: 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61  ated.  ** and ha
99d0: 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74  ve an assigned t
99e0: 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ype.  The result
99f0: 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72  s are de-ephemer
9a00: 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61  alized as.  ** a
9a10: 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20   side effect..  
9a20: 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70  */.  pMem = p->p
9a30: 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65  ResultSet = &aMe
9a40: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
9a50: 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32  r(i=0; i<pOp->p2
9a60: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  ; i++){.    asse
9a70: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
9a80: 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20  pMem[i]) );.    
9a90: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26  Deephemeralize(&
9aa0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73  pMem[i]);.    as
9ab0: 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66  sert( (pMem[i].f
9ac0: 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d  lags & MEM_Ephem
9ad0: 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20  )==0.           
9ae0: 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61   || (pMem[i].fla
9af0: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
9b00: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
9b10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
9b20: 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70  mNulTerminate(&p
9b30: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 71 6c  Mem[i]);.    sql
9b40: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65  ite3VdbeMemStore
9b50: 54 79 70 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  Type(&pMem[i]);.
9b60: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
9b70: 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70  CE(pOp->p1+i, &p
9b80: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69  Mem[i]);.  }.  i
9b90: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
9ba0: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
9bb0: 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20  m;..  /* Return 
9bc0: 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a  SQLITE_ROW.  */.
9bd0: 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31    p->pc = pc + 1
9be0: 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
9bf0: 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  ROW;.  goto vdbe
9c00: 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f  _return;.}../* O
9c10: 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31  pcode: Concat P1
9c20: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
9c30: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b  nopsis: r[P3]=r[
9c40: 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]+r[P1].**.** 
9c50: 41 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20  Add the text in 
9c60: 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f  register P1 onto
9c70: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
9c80: 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73  text in.** regis
9c90: 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65  ter P2 and store
9ca0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
9cb0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
9cc0: 66 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20  f either the P1 
9cd0: 6f 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e  or P2 text are N
9ce0: 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e  ULL then store N
9cf0: 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a  ULL in P3..**.**
9d00: 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31     P3 = P2 || P1
9d10: 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
9d20: 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20  egal for P1 and 
9d30: 50 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d  P3 to be the sam
9d40: 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65  e register. Some
9d50: 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20  times,.** if P3 
9d60: 69 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69  is the same regi
9d70: 73 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20  ster as P2, the 
9d80: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69  implementation i
9d90: 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f  s able.** to avo
9da0: 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a  id a memcpy()..*
9db0: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74  /.case OP_Concat
9dc0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
9dd0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43   same as TK_CONC
9de0: 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  AT, in1, in2, ou
9df0: 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74  t3 */.  i64 nByt
9e00: 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  e;..  pIn1 = &aM
9e10: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
9e20: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
9e30: 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p2];.  pOut = &
9e40: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
9e50: 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70   assert( pIn1!=p
9e60: 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49  Out );.  if( (pI
9e70: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
9e80: 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e  ->flags) & MEM_N
9e90: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
9ea0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
9eb0: 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  (pOut);.    brea
9ec0: 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70  k;.  }.  if( Exp
9ed0: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c  andBlob(pIn1) ||
9ee0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
9ef0: 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
9f00: 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e  .  Stringify(pIn
9f10: 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  1, encoding);.  
9f20: 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20  Stringify(pIn2, 
9f30: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79  encoding);.  nBy
9f40: 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70  te = pIn1->n + p
9f50: 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42  In2->n;.  if( nB
9f60: 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  yte>db->aLimit[S
9f70: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
9f80: 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
9f90: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 4d  too_big;.  }.  M
9fa0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
9fb0: 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20  ut, MEM_Str);.  
9fc0: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
9fd0: 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e  emGrow(pOut, (in
9fe0: 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d  t)nByte+2, pOut=
9ff0: 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f  =pIn2) ){.    go
a000: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
a010: 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20   if( pOut!=pIn2 
a020: 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f  ){.    memcpy(pO
a030: 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20  ut->z, pIn2->z, 
a040: 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20  pIn2->n);.  }.  
a050: 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b  memcpy(&pOut->z[
a060: 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e  pIn2->n], pIn1->
a070: 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70  z, pIn1->n);.  p
a080: 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b  Out->z[nByte]=0;
a090: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
a0a0: 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d  +1] = 0;.  pOut-
a0b0: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65  >flags |= MEM_Te
a0c0: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  rm;.  pOut->n = 
a0d0: 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f  (int)nByte;.  pO
a0e0: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
a0f0: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
a100: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
a110: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a120: 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50  Opcode: Add P1 P
a130: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
a140: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
a150: 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41  1]+r[P2].**.** A
a160: 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  dd the value in 
a170: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74  register P1 to t
a180: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
a190: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
a1a0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
a1b0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
a1c0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
a1d0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
a1e0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
a1f0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  */./* Opcode: Mu
a200: 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20  ltiply P1 P2 P3 
a210: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
a220: 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b    r[P3]=r[P1]*r[
a230: 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c  P2].**.**.** Mul
a240: 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20  tiply the value 
a250: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
a260: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
a270: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
a280: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
a290: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
a2a0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
a2b0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
a2c0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
a2d0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
a2e0: 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20   Subtract P1 P2 
a2f0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
a300: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  is:  r[P3]=r[P2]
a310: 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62  -r[P1].**.** Sub
a320: 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20  tract the value 
a330: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66  in register P1 f
a340: 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rom the value in
a350: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
a360: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
a370: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
a380: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
a390: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
a3a0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
a3b0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
a3c0: 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20  e: Divide P1 P2 
a3d0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
a3e0: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  is:  r[P3]=r[P2]
a3f0: 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76  /r[P1].**.** Div
a400: 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ide the value in
a410: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
a420: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
a430: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
a440: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
a450: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
a460: 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74  (P3=P2/P1). If t
a470: 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20  he value in .** 
a480: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
a490: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65  ero, then the re
a4a0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66  sult is NULL. If
a4b0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
a4c0: 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72   .** NULL, the r
a4d0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
a4e0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d  /./* Opcode: Rem
a4f0: 61 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20  ainder P1 P2 P3 
a500: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
a510: 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b    r[P3]=r[P2]%r[
a520: 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74  P1].**.** Comput
a530: 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  e the remainder 
a540: 61 66 74 65 72 20 69 6e 74 65 67 65 72 20 72 65  after integer re
a550: 67 69 73 74 65 72 20 50 32 20 69 73 20 64 69 76  gister P2 is div
a560: 69 64 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69  ided by .** regi
a570: 73 74 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72  ster P1 and stor
a580: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
a590: 72 65 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a  register P3. .**
a5a0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
a5b0: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
a5c0: 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20  zero the result 
a5d0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65  is NULL..** If e
a5e0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
a5f0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
a600: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  t is NULL..*/.ca
a610: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
a620: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a630: 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c  same as TK_PLUS,
a640: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
a650: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72  */.case OP_Subtr
a660: 61 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  act:            
a670: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
a680: 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  MINUS, in1, in2,
a690: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
a6a0: 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20  _Multiply:      
a6b0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
a6c0: 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c  as TK_STAR, in1,
a6d0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
a6e0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20  se OP_Divide:   
a6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a700: 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48  same as TK_SLASH
a710: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
a720: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61   */.case OP_Rema
a730: 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20  inder: {        
a740: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
a750: 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  _REM, in1, in2, 
a760: 6f 75 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62  out3 */.  char b
a770: 49 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61  Intint;   /* Sta
a780: 72 74 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20  rted out as two 
a790: 69 6e 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73  integer operands
a7a0: 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b   */.  int flags;
a7b0: 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65        /* Combine
a7c0: 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72  d MEM_* flags fr
a7d0: 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a  om both inputs *
a7e0: 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20 20  /.  i64 iA;     
a7f0: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
a800: 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  alue of left ope
a810: 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 42  rand */.  i64 iB
a820: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74  ;         /* Int
a830: 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72 69  eger value of ri
a840: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  ght operand */. 
a850: 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20 20   double rA;     
a860: 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f   /* Real value o
a870: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
a880: 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20 20  /.  double rB;  
a890: 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75      /* Real valu
a8a0: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
a8b0: 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  nd */..  pIn1 = 
a8c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
a8d0: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
a8e0: 66 69 6e 69 74 79 28 70 49 6e 31 29 3b 0a 20 20  finity(pIn1);.  
a8f0: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
a900: 2d 3e 70 32 5d 3b 0a 20 20 61 70 70 6c 79 4e 75  ->p2];.  applyNu
a910: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
a920: 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  n2);.  pOut = &a
a930: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
a940: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
a950: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
a960: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20  s;.  if( (flags 
a970: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
a980: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
a990: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
a9a0: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
a9b0: 61 67 73 20 26 20 70 49 6e 32 2d 3e 66 6c 61 67  ags & pIn2->flag
a9c0: 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 4d 45  s & MEM_Int)==ME
a9d0: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 69 41 20  M_Int ){.    iA 
a9e0: 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn1->u.i;.   
a9f0: 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b   iB = pIn2->u.i;
aa00: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31  .    bIntint = 1
aa10: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
aa20: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
aa30: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
aa40: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
aa50: 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41  3AddInt64(&iB,iA
aa60: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
aa70: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
aa80: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
aa90: 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 75  :  if( sqlite3Su
aaa0: 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  bInt64(&iB,iA) )
aab0: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
aac0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
aad0: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
aae0: 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  if( sqlite3MulIn
aaf0: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
ab00: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
ab10: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
ab20: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
ab30: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
ab40: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
ab50: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
ab60: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
ab70: 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45  -1 && iB==SMALLE
ab80: 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20  ST_INT64 ) goto 
ab90: 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20  fp_math;.       
aba0: 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20   iB /= iA;.     
abb0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
abc0: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
abd0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
abe0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
abf0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
ac00: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
ac10: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
ac20: 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25   1;.        iB %
ac30: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
ac40: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
ac50: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69   }.    pOut->u.i
ac60: 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = iB;.    MemSe
ac70: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
ac80: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
ac90: 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d  e{.    bIntint =
aca0: 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20   0;.fp_math:.   
acb0: 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rA = sqlite3Vdb
acc0: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
acd0: 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74  ;.    rB = sqlit
ace0: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
acf0: 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63  pIn2);.    switc
ad00: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
ad10: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
ad20: 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20  Add:         rB 
ad30: 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  += rA;       bre
ad40: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
ad50: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72  P_Subtract:    r
ad60: 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B -= rA;       b
ad70: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
ad80: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
ad90: 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20   rB *= rA;      
ada0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
adb0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
adc0: 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62          /* (doub
add0: 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20  le)0 In case of 
ade0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
adf0: 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f  TING_POINT... */
ae00: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d  .        if( rA=
ae10: 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74  =(double)0 ) got
ae20: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
ae30: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
ae40: 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20       rB /= rA;. 
ae50: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
ae60: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
ae70: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
ae80: 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20  A = (i64)rA;.   
ae90: 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29 72       iB = (i64)r
aea0: 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  B;.        if( i
aeb0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
aec0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
aed0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
aee0: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
aef0: 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d   1;.        rB =
af00: 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69   (double)(iB % i
af10: 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  A);.        brea
af20: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
af30: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
af40: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
af50: 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  NT.    pOut->u.i
af60: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
af70: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
af80: 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a  MEM_Int);.#else.
af90: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49      if( sqlite3I
afa0: 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20  sNaN(rB) ){.    
afb0: 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69    goto arithmeti
afc0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
afd0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
afe0: 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  ->r = rB;.    Me
aff0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
b000: 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  t, MEM_Real);.  
b010: 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d    if( (flags & M
b020: 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20 21  EM_Real)==0 && !
b030: 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20 20  bIntint ){.     
b040: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65   sqlite3VdbeInte
b050: 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74  gerAffinity(pOut
b060: 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
b070: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72    }.  break;..ar
b080: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
b090: 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74  is_null:.  sqlit
b0a0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
b0b0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
b0c0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
b0d0: 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50 34  ollSeq P1 * * P4
b0e0: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
b0f0: 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c  ointer to a Coll
b100: 53 65 71 20 73 74 72 75 63 74 2e 20 49 66 20 74  Seq struct. If t
b110: 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20  he next call to 
b120: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a  a user function.
b130: 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65 20  ** or aggregate 
b140: 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74  calls sqlite3Get
b150: 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74  FuncCollSeq(), t
b160: 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  his collation se
b170: 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62  quence will.** b
b180: 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73  e returned. This
b190: 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
b1a0: 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20  built-in min(), 
b1b0: 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66  max() and nullif
b1c0: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e  ().** functions.
b1d0: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  .**.** If P1 is 
b1e0: 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69  not zero, then i
b1f0: 74 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  t is a register 
b200: 74 68 61 74 20 61 20 73 75 62 73 65 71 75 65 6e  that a subsequen
b210: 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61  t min() or.** ma
b220: 78 28 29 20 61 67 67 72 65 67 61 74 65 20 77 69  x() aggregate wi
b230: 6c 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20 74  ll set to 1 if t
b240: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 69  he current row i
b250: 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75  s not the minimu
b260: 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e  m or.** maximum.
b270: 20 20 54 68 65 20 50 31 20 72 65 67 69 73 74 65    The P1 registe
b280: 72 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  r is initialized
b290: 20 74 6f 20 30 20 62 79 20 74 68 69 73 20 69 6e   to 0 by this in
b2a0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
b2b0: 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 75   The interface u
b2c0: 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65  sed by the imple
b2d0: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
b2e0: 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20   aforementioned 
b2f0: 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20  functions.** to 
b300: 72 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c  retrieve the col
b310: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
b320: 73 65 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f  set by this opco
b330: 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61  de is not availa
b340: 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2c  ble.** publicly,
b350: 20 6f 6e 6c 79 20 74 6f 20 75 73 65 72 20 66 75   only to user fu
b360: 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e 65 64 20  nctions defined 
b370: 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61  in func.c..*/.ca
b380: 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b  se OP_CollSeq: {
b390: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
b3a0: 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
b3b0: 45 51 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  EQ );.  if( pOp-
b3c0: 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >p1 ){.    sqlit
b3d0: 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
b3e0: 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  4(&aMem[pOp->p1]
b3f0: 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  , 0);.  }.  brea
b400: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
b410: 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20   Function P1 P2 
b420: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
b430: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63  psis: r[P3]=func
b440: 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a  (r[P2@P5]).**.**
b450: 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66   Invoke a user f
b460: 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61  unction (P4 is a
b470: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75   pointer to a Fu
b480: 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75 72 65  nction structure
b490: 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73   that.** defines
b4a0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20 77   the function) w
b4b0: 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73  ith P5 arguments
b4c0: 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
b4d0: 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73  ster P2 and.** s
b4e0: 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20  uccessors.  The 
b4f0: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75  result of the fu
b500: 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64  nction is stored
b510: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
b520: 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20  .** Register P3 
b530: 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20  must not be one 
b540: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
b550: 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31  inputs..**.** P1
b560: 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74   is a 32-bit bit
b570: 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20  mask indicating 
b580: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65  whether or not e
b590: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ach argument to 
b5a0: 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  the .** function
b5b0: 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20   was determined 
b5c0: 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61  to be constant a
b5d0: 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20  t compile time. 
b5e0: 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  If the first.** 
b5f0: 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e  argument was con
b600: 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30  stant then bit 0
b610: 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54   of P1 is set. T
b620: 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64  his is used to d
b630: 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74  etermine.** whet
b640: 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73  her meta data as
b650: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
b660: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72  user function ar
b670: 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65  gument using the
b680: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f  .** sqlite3_set_
b690: 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61  auxdata() API ma
b6a0: 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61  y be safely reta
b6b0: 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  ined until the n
b6c0: 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  ext.** invocatio
b6d0: 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  n of this opcode
b6e0: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
b6f0: 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20 41 67  : AggStep and Ag
b700: 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f  gFinal.*/.case O
b710: 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20  P_Function: {.  
b720: 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41  int i;.  Mem *pA
b730: 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  rg;.  sqlite3_co
b740: 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c  ntext ctx;.  sql
b750: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56  ite3_value **apV
b760: 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20  al;.  int n;..  
b770: 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61  n = pOp->p5;.  a
b780: 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pVal = p->apArg;
b790: 0a 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c  .  assert( apVal
b7a0: 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 61 73   || n==0 );.  as
b7b0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
b7c0: 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
b7d0: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
b7e0: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
b7f0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
b800: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
b810: 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 61 73 73  p, pOut);..  ass
b820: 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f  ert( n==0 || (pO
b830: 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
b840: 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  p2+n<=(p->nMem-p
b850: 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b  ->nCursor)+1) );
b860: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
b870: 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f  p3<pOp->p2 || pO
b880: 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e  p->p3>=pOp->p2+n
b890: 20 29 3b 0a 20 20 70 41 72 67 20 3d 20 26 61 4d   );.  pArg = &aM
b8a0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66  em[pOp->p2];.  f
b8b0: 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
b8c0: 2c 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61  , pArg++){.    a
b8d0: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
b8e0: 64 28 70 41 72 67 29 20 29 3b 0a 20 20 20 20 61  d(pArg) );.    a
b8f0: 70 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a  pVal[i] = pArg;.
b900: 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69      Deephemerali
b910: 7a 65 28 70 41 72 67 29 3b 0a 20 20 20 20 73 71  ze(pArg);.    sq
b920: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
b930: 65 54 79 70 65 28 70 41 72 67 29 3b 0a 20 20 20  eType(pArg);.   
b940: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
b950: 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 41 72 67 29  pOp->p2+i, pArg)
b960: 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28  ;.  }..  assert(
b970: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
b980: 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 63 74  _FUNCDEF );.  ct
b990: 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70  x.pFunc = pOp->p
b9a0: 34 2e 70 46 75 6e 63 3b 0a 20 20 63 74 78 2e 69  4.pFunc;.  ctx.i
b9b0: 4f 70 20 3d 20 70 63 3b 0a 20 20 63 74 78 2e 70  Op = pc;.  ctx.p
b9c0: 56 64 62 65 20 3d 20 70 3b 0a 0a 20 20 2f 2a 20  Vdbe = p;..  /* 
b9d0: 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20  The output cell 
b9e0: 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61 76 65  may already have
b9f0: 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61   a buffer alloca
ba00: 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74  ted. Move.  ** t
ba10: 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 63 74  he pointer to ct
ba20: 78 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74  x.s so in case t
ba30: 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e  he user-function
ba40: 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20 74 68   can use.  ** th
ba50: 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61  e already alloca
ba60: 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74 65  ted buffer inste
ba70: 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67  ad of allocating
ba80: 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f   a new one..  */
ba90: 0a 20 20 6d 65 6d 63 70 79 28 26 63 74 78 2e 73  .  memcpy(&ctx.s
baa0: 2c 20 70 4f 75 74 2c 20 73 69 7a 65 6f 66 28 4d  , pOut, sizeof(M
bab0: 65 6d 29 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  em));.  pOut->fl
bac0: 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
bad0: 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20 30    pOut->xDel = 0
bae0: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f  ;.  pOut->zMallo
baf0: 63 20 3d 20 30 3b 0a 20 20 4d 65 6d 53 65 74 54  c = 0;.  MemSetT
bb00: 79 70 65 46 6c 61 67 28 26 63 74 78 2e 73 2c 20  ypeFlag(&ctx.s, 
bb10: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74  MEM_Null);..  ct
bb20: 78 2e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20  x.fErrorOrAux = 
bb30: 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75  0;.  if( ctx.pFu
bb40: 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26 20  nc->funcFlags & 
bb50: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
bb60: 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65  COLL ){.    asse
bb70: 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20  rt( pOp>aOp );. 
bb80: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
bb90: 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  1].p4type==P4_CO
bba0: 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73  LLSEQ );.    ass
bbb0: 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
bbc0: 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20  ode==OP_CollSeq 
bbd0: 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c  );.    ctx.pColl
bbe0: 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43   = pOp[-1].p4.pC
bbf0: 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 6c  oll;.  }.  db->l
bc00: 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
bc10: 6f 77 69 64 3b 0a 20 20 28 2a 63 74 78 2e 70 46  owid;.  (*ctx.pF
bc20: 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78  unc->xFunc)(&ctx
bc30: 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20  , n, apVal); /* 
bc40: 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32  IMP: R-24505-232
bc50: 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69  30 */.  lastRowi
bc60: 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
bc70: 64 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61  d;..  if( db->ma
bc80: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20  llocFailed ){.  
bc90: 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67 68    /* Even though
bca0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20   a malloc() has 
bcb0: 66 61 69 6c 65 64 2c 20 74 68 65 20 69 6d 70 6c  failed, the impl
bcc0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
bcd0: 65 0a 20 20 20 20 2a 2a 20 75 73 65 72 20 66 75  e.    ** user fu
bce0: 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20  nction may have 
bcf0: 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74 65  called an sqlite
bd00: 33 5f 72 65 73 75 6c 74 5f 58 58 58 28 29 20 66  3_result_XXX() f
bd10: 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 74  unction.    ** t
bd20: 6f 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75 65  o return a value
bd30: 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  . The following 
bd40: 63 61 6c 6c 20 72 65 6c 65 61 73 65 73 20 61 6e  call releases an
bd50: 79 20 72 65 73 6f 75 72 63 65 73 0a 20 20 20 20  y resources.    
bd60: 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ** associated wi
bd70: 74 68 20 73 75 63 68 20 61 20 76 61 6c 75 65 2e  th such a value.
bd80: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
bd90: 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
bda0: 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20 67  e(&ctx.s);.    g
bdb0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
bdc0: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e  .  /* If the fun
bdd0: 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61  ction returned a
bde0: 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61  n error, throw a
bdf0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  n exception */. 
be00: 20 69 66 28 20 63 74 78 2e 66 45 72 72 6f 72 4f   if( ctx.fErrorO
be10: 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20  rAux ){.    if( 
be20: 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ctx.isError ){. 
be30: 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
be40: 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
be50: 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
be60: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
be70: 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 20 20  &ctx.s));.      
be80: 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72  rc = ctx.isError
be90: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
bea0: 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75 78  te3VdbeDeleteAux
beb0: 44 61 74 61 28 70 2c 20 70 63 2c 20 70 4f 70 2d  Data(p, pc, pOp-
bec0: 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  >p1);.  }..  /* 
bed0: 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20  Copy the result 
bee0: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
bef0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
bf00: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
bf10: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
bf20: 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e 67  &ctx.s, encoding
bf30: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  );.  assert( pOu
bf40: 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75  t->flags==MEM_Nu
bf50: 6c 6c 20 29 3b 0a 20 20 6d 65 6d 63 70 79 28 70  ll );.  memcpy(p
bf60: 4f 75 74 2c 20 26 63 74 78 2e 73 2c 20 73 69 7a  Out, &ctx.s, siz
bf70: 65 6f 66 28 4d 65 6d 29 29 3b 0a 20 20 69 66 28  eof(Mem));.  if(
bf80: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
bf90: 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b 0a 20  ooBig(pOut) ){. 
bfa0: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
bfb0: 0a 20 20 7d 0a 0a 23 69 66 20 30 0a 20 20 2f 2a  .  }..#if 0.  /*
bfc0: 20 54 68 65 20 61 70 70 2d 64 65 66 69 6e 65 64   The app-defined
bfd0: 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 64 6f   function has do
bfe0: 6e 65 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61  ne something tha
bff0: 74 20 61 73 20 63 61 75 73 65 64 20 74 68 69 73  t as caused this
c000: 0a 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  .  ** statement 
c010: 74 6f 20 65 78 70 69 72 65 2e 20 20 28 50 65 72  to expire.  (Per
c020: 68 61 70 73 20 74 68 65 20 66 75 6e 63 74 69 6f  haps the functio
c030: 6e 20 63 61 6c 6c 65 64 20 73 71 6c 69 74 65 33  n called sqlite3
c040: 5f 65 78 65 63 28 29 0a 20 20 2a 2a 20 77 69 74  _exec().  ** wit
c050: 68 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  h a CREATE TABLE
c060: 20 73 74 61 74 65 6d 65 6e 74 2e 29 0a 20 20 2a   statement.).  *
c070: 2f 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72  /.  if( p->expir
c080: 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45  ed ) rc = SQLITE
c090: 5f 41 42 4f 52 54 3b 0a 23 65 6e 64 69 66 0a 0a  _ABORT;.#endif..
c0a0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
c0b0: 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b  (pOp->p3, pOut);
c0c0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
c0d0: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
c0e0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c0f0: 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50  ode: BitAnd P1 P
c100: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
c110: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
c120: 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  1]&r[P2].**.** T
c130: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
c140: 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
c150: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
c160: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
c170: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
c180: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
c190: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
c1a0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
c1b0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
c1c0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .*/./* Opcode: B
c1d0: 69 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20  itOr P1 P2 P3 * 
c1e0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
c1f0: 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32  r[P3]=r[P1]|r[P2
c200: 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ].**.** Take the
c210: 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20   bit-wise OR of 
c220: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
c230: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
c240: 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
c250: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
c260: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
c270: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
c280: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
c290: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
c2a0: 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74  pcode: ShiftLeft
c2b0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
c2c0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
c2d0: 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a  ]=r[P2]<<r[P1].*
c2e0: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
c2f0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
c300: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
c310: 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a  he left by the.*
c320: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
c330: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
c340: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
c350: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  ister P1..** Sto
c360: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
c370: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
c380: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
c390: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
c3a0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
c3b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
c3c0: 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20  tRight P1 P2 P3 
c3d0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
c3e0: 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72    r[P3]=r[P2]>>r
c3f0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74  [P1].**.** Shift
c400: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
c410: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
c420: 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62  2 to the right b
c430: 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  y the.** number 
c440: 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65  of bits specifie
c450: 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72  d by the integer
c460: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
c470: 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65  .** Store the re
c480: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
c490: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
c4a0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
c4b0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
c4c0: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
c4d0: 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20  BitAnd:         
c4e0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
c4f0: 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e  as TK_BITAND, in
c500: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
c510: 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20  case OP_BitOr:  
c520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c530: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
c540: 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TOR, in1, in2, o
c550: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
c560: 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20  hiftLeft:       
c570: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
c580: 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31  s TK_LSHIFT, in1
c590: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
c5a0: 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68  ase OP_ShiftRigh
c5b0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
c5c0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48  * same as TK_RSH
c5d0: 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  IFT, in1, in2, o
c5e0: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b  ut3 */.  i64 iA;
c5f0: 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34  .  u64 uA;.  i64
c600: 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20   iB;.  u8 op;.. 
c610: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
c620: 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
c630: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
c640: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
c650: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
c660: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
c670: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
c680: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
c690: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
c6a0: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
c6b0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d  reak;.  }.  iA =
c6c0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
c6d0: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42  alue(pIn2);.  iB
c6e0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
c6f0: 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  tValue(pIn1);.  
c700: 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  op = pOp->opcode
c710: 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42  ;.  if( op==OP_B
c720: 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20  itAnd ){.    iA 
c730: 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69  &= iB;.  }else i
c740: 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20  f( op==OP_BitOr 
c750: 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b  ){.    iA |= iB;
c760: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21  .  }else if( iB!
c770: 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
c780: 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69  ( op==OP_ShiftRi
c790: 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68  ght || op==OP_Sh
c7a0: 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20  iftLeft );..    
c7b0: 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62  /* If shifting b
c7c0: 79 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f  y a negative amo
c7d0: 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68  unt, shift in th
c7e0: 65 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f  e other directio
c7f0: 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c  n */.    if( iB<
c800: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
c810: 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  t( OP_ShiftRight
c820: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31  ==OP_ShiftLeft+1
c830: 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32   );.      op = 2
c840: 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20  *OP_ShiftLeft + 
c850: 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42  1 - op;.      iB
c860: 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69   = iB>(-64) ? -i
c870: 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20  B : 64;.    }.. 
c880: 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b     if( iB>=64 ){
c890: 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e  .      iA = (iA>
c8a0: 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  =0 || op==OP_Shi
c8b0: 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31  ftLeft) ? 0 : -1
c8c0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
c8d0: 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26     memcpy(&uA, &
c8e0: 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b  iA, sizeof(uA));
c8f0: 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f  .      if( op==O
c900: 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20  P_ShiftLeft ){. 
c910: 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42         uA <<= iB
c920: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
c930: 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42         uA >>= iB
c940: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67  ;.        /* Sig
c950: 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69  n-extend on a ri
c960: 67 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e  ght shift of a n
c970: 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a  egative number *
c980: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  /.        if( iA
c990: 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75  <0 ) uA |= ((((u
c9a0: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c  64)0xffffffff)<<
c9b0: 33 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20  32)|0xffffffff) 
c9c0: 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20  << (64-iB);.    
c9d0: 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79    }.      memcpy
c9e0: 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f  (&iA, &uA, sizeo
c9f0: 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20  f(iA));.    }.  
ca00: 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
ca10: 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  iA;.  MemSetType
ca20: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
ca30: 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nt);.  break;.}.
ca40: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49  ./* Opcode: AddI
ca50: 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  mm  P1 P2 * * *.
ca60: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
ca70: 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20  P1]=r[P1]+P2.** 
ca80: 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73  .** Add the cons
ca90: 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76  tant P2 to the v
caa0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
cab0: 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75   P1..** The resu
cac0: 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20  lt is always an 
cad0: 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  integer..**.** T
cae0: 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69  o force any regi
caf0: 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e  ster to be an in
cb00: 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20  teger, just add 
cb10: 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64  0..*/.case OP_Ad
cb20: 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20  dImm: {         
cb30: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
cb40: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
cb50: 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p1];.  memAbout
cb60: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
cb70: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
cb80: 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
cb90: 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  n1);.  pIn1->u.i
cba0: 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62   += pOp->p2;.  b
cbb0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
cbc0: 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31  de: MustBeInt P1
cbd0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a   P2 * * *.** .**
cbe0: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
cbf0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
cc00: 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
cc10: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
cc20: 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20  ** in P1 is not 
cc30: 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63  an integer and c
cc40: 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
cc50: 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67  ed into an integ
cc60: 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61  er.** without da
cc70: 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75  ta loss, then ju
cc80: 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
cc90: 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d  o P2, or if P2==
cca0: 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51  0.** raise an SQ
ccb0: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78  LITE_MISMATCH ex
ccc0: 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ception..*/.case
ccd0: 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b   OP_MustBeInt: {
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
ccf0: 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
cd00: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
cd10: 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p1];.  if( (pIn1
cd20: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
cd30: 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70  t)==0 ){.    app
cd40: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
cd50: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
cd60: 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  RIC, encoding);.
cd70: 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
cd80: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
cd90: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  =0 ){.      if( 
cda0: 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
cdb0: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
cdc0: 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20  E_MISMATCH;.    
cdd0: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
cde0: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
cdf0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
ce00: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
ce10: 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   1;.        brea
ce20: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
ce30: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
ce40: 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f  eFlag(pIn1, MEM_
ce50: 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Int);.  break;.}
ce60: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
ce70: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
ce80: 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  OINT./* Opcode: 
ce90: 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20  RealAffinity P1 
cea0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  * * * *.**.** If
ceb0: 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c   register P1 hol
cec0: 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f  ds an integer co
ced0: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72 65  nvert it to a re
cee0: 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20  al value..**.** 
cef0: 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
cf00: 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63 74  sed when extract
cf10: 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
cf20: 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68  from a column th
cf30: 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61  at.** has REAL a
cf40: 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63  ffinity.  Such c
cf50: 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79  olumn values may
cf60: 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64   still be stored
cf70: 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c   as.** integers,
cf80: 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69 63   for space effic
cf90: 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72  iency, but after
cfa0: 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77   extraction we w
cfb0: 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68  ant them.** to h
cfc0: 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20  ave only a real 
cfd0: 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  value..*/.case O
cfe0: 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20  P_RealAffinity: 
cff0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
d000: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
d010: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
d020: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
d030: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
d040: 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  t ){.    sqlite3
d050: 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70  VdbeMemRealify(p
d060: 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
d070: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
d080: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
d090: 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  _CAST./* Opcode:
d0a0: 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20 2a   ToText P1 * * *
d0b0: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
d0c0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
d0d0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 65  ster P1 to be te
d0e0: 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  xt..** If the va
d0f0: 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20  lue is numeric, 
d100: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
d110: 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68 65  string using the
d120: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
d130: 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f  f printf().  Blo
d140: 62 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e 63  b values are unc
d150: 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72  hanged and.** ar
d160: 65 20 61 66 74 65 72 77 61 72 64 73 20 73 69 6d  e afterwards sim
d170: 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64 20  ply interpreted 
d180: 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41  as text..**.** A
d190: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
d1a0: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
d1b0: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
d1c0: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
d1d0: 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a  .case OP_ToText:
d1e0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
d1f0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
d200: 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20 2a  K_TO_TEXT, in1 *
d210: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
d220: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d  [pOp->p1];.  mem
d230: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
d240: 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 70 49   pIn1);.  if( pI
d250: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
d260: 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20  Null ) break;.  
d270: 61 73 73 65 72 74 28 20 4d 45 4d 5f 53 74 72 3d  assert( MEM_Str=
d280: 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29 20 29  =(MEM_Blob>>3) )
d290: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
d2a0: 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26  |= (pIn1->flags&
d2b0: 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20  MEM_Blob)>>3;.  
d2c0: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
d2d0: 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  n1, SQLITE_AFF_T
d2e0: 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  EXT, encoding);.
d2f0: 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f    rc = ExpandBlo
d300: 62 28 70 49 6e 31 29 3b 0a 20 20 61 73 73 65 72  b(pIn1);.  asser
d310: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  t( pIn1->flags &
d320: 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e   MEM_Str || db->
d330: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
d340: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d    pIn1->flags &=
d350: 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52   ~(MEM_Int|MEM_R
d360: 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d  eal|MEM_Blob|MEM
d370: 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44 41 54 45  _Zero);.  UPDATE
d380: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
d390: 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n1);.  break;.}.
d3a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 42 6c  ./* Opcode: ToBl
d3b0: 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ob P1 * * * *.**
d3c0: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
d3d0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
d3e0: 50 31 20 74 6f 20 62 65 20 61 20 42 4c 4f 42 2e  P1 to be a BLOB.
d3f0: 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
d400: 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e   is numeric, con
d410: 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74 72  vert it to a str
d420: 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20 53 74  ing first..** St
d430: 72 69 6e 67 73 20 61 72 65 20 73 69 6d 70 6c 79  rings are simply
d440: 20 72 65 69 6e 74 65 72 70 72 65 74 65 64 20 61   reinterpreted a
d450: 73 20 62 6c 6f 62 73 20 77 69 74 68 20 6e 6f 20  s blobs with no 
d460: 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74 68 65  change.** to the
d470: 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61   underlying data
d480: 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  ..**.** A NULL v
d490: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
d4a0: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
d4b0: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
d4c0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
d4d0: 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20 20 20  P_ToBlob: {     
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d4f0: 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 42 4c  same as TK_TO_BL
d500: 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  OB, in1 */.  pIn
d510: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
d520: 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
d530: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
d540: 20 29 20 62 72 65 61 6b 3b 0a 20 20 69 66 28 20   ) break;.  if( 
d550: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
d560: 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20  EM_Blob)==0 ){. 
d570: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
d580: 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn1, SQLITE_AF
d590: 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67  F_TEXT, encoding
d5a0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
d5b0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
d5c0: 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c  _Str || db->mall
d5d0: 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20  ocFailed );.    
d5e0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
d5f0: 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a  In1, MEM_Blob);.
d600: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e    }else{.    pIn
d610: 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45  1->flags &= ~(ME
d620: 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d 5f  M_TypeMask&~MEM_
d630: 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50 44  Blob);.  }.  UPD
d640: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
d650: 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b  (pIn1);.  break;
d660: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  .}../* Opcode: T
d670: 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a 20  oNumeric P1 * * 
d680: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
d690: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
d6a0: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 6e  ister P1 to be n
d6b0: 75 6d 65 72 69 63 20 28 65 69 74 68 65 72 20 61  umeric (either a
d6c0: 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72 20  n.** integer or 
d6d0: 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74  a floating-point
d6e0: 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66 20   number.).** If 
d6f0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
d700: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
d710: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
d720: 61 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  an using the.** 
d730: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74  equivalent of at
d740: 6f 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20 61  oi() or atof() a
d750: 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f  nd store 0 if no
d760: 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e   such conversion
d770: 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c 65   .** is possible
d780: 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  ..**.** A NULL v
d790: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
d7a0: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
d7b0: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
d7c0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
d7d0: 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20 20  P_ToNumeric: {  
d7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7f0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
d800: 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a 2f  _NUMERIC, in1 */
d810: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d820: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c 69  pOp->p1];.  sqli
d830: 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69  te3VdbeMemNumeri
d840: 66 79 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61  fy(pIn1);.  brea
d850: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
d860: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20  QLITE_OMIT_CAST 
d870: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  */../* Opcode: T
d880: 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  oInt P1 * * * *.
d890: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
d8a0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
d8b0: 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e  r P1 to be an in
d8c0: 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54 68  teger.  If.** Th
d8d0: 65 20 76 61 6c 75 65 20 69 73 20 63 75 72 72 65  e value is curre
d8e0: 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d 62  ntly a real numb
d8f0: 65 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72 61  er, drop its fra
d900: 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a  ctional part..**
d910: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
d920: 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74   text or blob, t
d930: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74  ry to convert it
d940: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75   to an integer u
d950: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69  sing the.** equi
d960: 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29  valent of atoi()
d970: 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20   and store 0 if 
d980: 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69  no such conversi
d990: 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a  on is possible..
d9a0: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
d9b0: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
d9c0: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
d9d0: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
d9e0: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
d9f0: 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  ToInt: {        
da00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
da10: 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20  e as TK_TO_INT, 
da20: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
da30: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
da40: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
da50: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
da60: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
da70: 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
da80: 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  y(pIn1);.  }.  b
da90: 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 20 21 64 65  reak;.}..#if !de
daa0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
dab0: 54 5f 43 41 53 54 29 20 26 26 20 21 64 65 66 69  T_CAST) && !defi
dac0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
dad0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 0a  FLOATING_POINT).
dae0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52 65 61  /* Opcode: ToRea
daf0: 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  l P1 * * * *.**.
db00: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
db10: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
db20: 31 20 74 6f 20 62 65 20 61 20 66 6c 6f 61 74 69  1 to be a floati
db30: 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e  ng point number.
db40: 0a 2a 2a 20 49 66 20 54 68 65 20 76 61 6c 75 65  .** If The value
db50: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6e   is currently an
db60: 20 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76 65 72   integer, conver
db70: 74 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20  t it..** If the 
db80: 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72  value is text or
db90: 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f   blob, try to co
dba0: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 69  nvert it to an i
dbb0: 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74 68 65  nteger using the
dbc0: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
dbd0: 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74 6f  f atoi() and sto
dbe0: 72 65 20 30 2e 30 20 69 66 20 6e 6f 20 73 75 63  re 0.0 if no suc
dbf0: 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20  h conversion is 
dc00: 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  possible..**.** 
dc10: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
dc20: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
dc30: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
dc40: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
dc50: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65 61 6c  /.case OP_ToReal
dc60: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
dc70: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
dc80: 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e 31 20  TK_TO_REAL, in1 
dc90: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
dca0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65  m[pOp->p1];.  me
dcb0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
dcc0: 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 28  , pIn1);.  if( (
dcd0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
dce0: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
dcf0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
dd00: 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20  Realify(pIn1);. 
dd10: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
dd20: 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
dd30: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53  (SQLITE_OMIT_CAS
dd40: 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
dd50: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
dd60: 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f 0a 0a 2f  ING_POINT) */../
dd70: 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20  * Opcode: Lt P1 
dd80: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
dd90: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
dda0: 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  ]<r[P3] goto P2.
ddb0: 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68  **.** Compare th
ddc0: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
ddd0: 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20  ster P1 and P3. 
dde0: 20 49 66 20 72 65 67 28 50 33 29 3c 72 65 67 28   If reg(P3)<reg(
ddf0: 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70  P1) then.** jump
de00: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20   to address P2. 
de10: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53   .**.** If the S
de20: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
de30: 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65   bit of P5 is se
de40: 74 20 61 6e 64 20 65 69 74 68 65 72 20 72 65 67  t and either reg
de50: 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50  (P1) or.** reg(P
de60: 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  3) is NULL then 
de70: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20  take the jump.  
de80: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
de90: 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74  MPIFNULL .** bit
dea0: 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66   is clear then f
deb0: 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65  all through if e
dec0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
ded0: 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   NULL..**.** The
dee0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
def0: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d   portion of P5 m
df00: 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69  ust be an affini
df10: 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a  ty character -.*
df20: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  * SQLITE_AFF_TEX
df30: 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  T, SQLITE_AFF_IN
df40: 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f  TEGER, and so fo
df50: 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  rth. An attempt 
df60: 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63  is made .** to c
df70: 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74  oerce both input
df80: 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  s according to t
df90: 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66  his affinity bef
dfa0: 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  ore the.** compa
dfb0: 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49  rison is made. I
dfc0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
dfd0: 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74  _MASK is 0x00, t
dfe0: 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61  hen numeric.** a
dff0: 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e  ffinity is used.
e000: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61   Note that the a
e010: 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69  ffinity conversi
e020: 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a  ons are stored.*
e030: 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20  * back into the 
e040: 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
e050: 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74  P1 and P3.  So t
e060: 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63  his opcode can c
e070: 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65  ause.** persiste
e080: 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65  nt changes to re
e090: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
e0a0: 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e  3..**.** Once an
e0b0: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61  y conversions ha
e0c0: 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20  ve taken place, 
e0d0: 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75  and neither valu
e0e0: 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74  e is NULL, .** t
e0f0: 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  he values are co
e100: 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20  mpared. If both 
e110: 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73  values are blobs
e120: 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69   then memcmp() i
e130: 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74  s.** used to det
e140: 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c  ermine the resul
e150: 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  ts of the compar
e160: 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76  ison.  If both v
e170: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78  alues.** are tex
e180: 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72  t, then the appr
e190: 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e  opriate collatin
e1a0: 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69  g function speci
e1b0: 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73  fied in.** P4 is
e1c0: 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65    used to do the
e1d0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
e1e0: 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69   P4 is not speci
e1f0: 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d  fied then.** mem
e200: 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f  cmp() is used to
e210: 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74   compare text st
e220: 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76  ring.  If both v
e230: 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d  alues are.** num
e240: 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d  eric, then a num
e250: 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20  eric comparison 
e260: 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20  is used. If the 
e270: 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  two values.** ar
e280: 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74  e of different t
e290: 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65  ypes, then numbe
e2a0: 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  rs are considere
e2b0: 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73  d less than.** s
e2c0: 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e  trings and strin
e2d0: 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  gs are considere
e2e0: 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  d less than blob
e2f0: 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
e300: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62  SQLITE_STOREP2 b
e310: 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  it of P5 is set,
e320: 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d   then do not jum
e330: 70 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20  p.  Instead,.** 
e340: 73 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20  store a boolean 
e350: 72 65 73 75 6c 74 20 28 65 69 74 68 65 72 20 30  result (either 0
e360: 2c 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29  , or 1, or NULL)
e370: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
e380: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  .**.** If the SQ
e390: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 62 69 74 20  LITE_NULLEQ bit 
e3a0: 69 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74 68  is set in P5, th
e3b0: 65 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  en NULL values a
e3c0: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a  re considered.**
e3d0: 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e   equal to one an
e3e0: 6f 74 68 65 72 2c 20 70 72 6f 76 69 64 65 64 20  other, provided 
e3f0: 74 68 61 74 20 74 68 65 79 20 64 6f 20 6e 6f 74  that they do not
e400: 20 68 61 76 65 20 74 68 65 69 72 20 4d 45 4d 5f   have their MEM_
e410: 43 6c 65 61 72 65 64 0a 2a 2a 20 62 69 74 20 73  Cleared.** bit s
e420: 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  et..*/./* Opcode
e430: 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20 50 34  : Ne P1 P2 P3 P4
e440: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
e450: 20 69 66 20 72 5b 50 31 5d 21 3d 72 5b 50 33 5d   if r[P1]!=r[P3]
e460: 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
e470: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
e480: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
e490: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
e4a0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
e4b0: 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e  if.** the operan
e4c0: 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  ds in registers 
e4d0: 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f  P1 and P3 are no
e4e0: 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68  t equal.  See th
e4f0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a  e Lt opcode for.
e500: 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  ** additional in
e510: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
e520: 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
e530: 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74  Q is set in P5 t
e540: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
e550: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
e560: 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a  always either.**
e570: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61   true or false a
e580: 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c  nd is never NULL
e590: 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61  .  If both opera
e5a0: 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  nds are NULL the
e5b0: 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  n the result.** 
e5c0: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
e5d0: 20 66 61 6c 73 65 2e 20 20 49 66 20 65 69 74 68   false.  If eith
e5e0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
e5f0: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
e600: 6c 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20 49  lt is true..** I
e610: 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  f neither operan
e620: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65  d is NULL the re
e630: 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65  sult is the same
e640: 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20   as it would be 
e650: 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  if.** the SQLITE
e660: 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72  _NULLEQ flag wer
e670: 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50  e omitted from P
e680: 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  5..*/./* Opcode:
e690: 20 45 71 20 50 31 20 50 32 20 50 33 20 50 34 20   Eq P1 P2 P3 P4 
e6a0: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
e6b0: 69 66 20 72 5b 50 31 5d 3d 3d 72 5b 50 33 5d 20  if r[P1]==r[P3] 
e6c0: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
e6d0: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
e6e0: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
e6f0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
e700: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
e710: 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64  f.** the operand
e720: 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
e730: 31 20 61 6e 64 20 50 33 20 61 72 65 20 65 71 75  1 and P3 are equ
e740: 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c  al..** See the L
e750: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
e760: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
e770: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51  ion..**.** If SQ
e780: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
e790: 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68  et in P5 then th
e7a0: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
e7b0: 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73  arison is always
e7c0: 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20   either.** true 
e7d0: 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20  or false and is 
e7e0: 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20  never NULL.  If 
e7f0: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
e800: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  e NULL then the 
e810: 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d  result.** of com
e820: 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e  parison is true.
e830: 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72    If either oper
e840: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  and is NULL then
e850: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66   the result is f
e860: 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74  alse..** If neit
e870: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e880: 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69  ULL the result i
e890: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  s the same as it
e8a0: 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20   would be if.** 
e8b0: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
e8c0: 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74  Q flag were omit
e8d0: 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a  ted from P5..*/.
e8e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31  /* Opcode: Le P1
e8f0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
e900: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
e910: 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50  1]<=r[P3] goto P
e920: 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  2.**.** This wor
e930: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
e940: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
e950: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
e960: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
e970: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
e980: 67 69 73 74 65 72 20 50 33 20 69 73 20 6c 65 73  gister P3 is les
e990: 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
e9a0: 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  to the content o
e9b0: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
e9c0: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
e9d0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
e9e0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
e9f0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47  .*/./* Opcode: G
ea00: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
ea10: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
ea20: 20 72 5b 50 31 5d 3e 72 5b 50 33 5d 20 67 6f 74   r[P1]>r[P3] got
ea30: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
ea40: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
ea50: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
ea60: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
ea70: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
ea80: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
ea90: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
eaa0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
eab0: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
eac0: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
ead0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
eae0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
eaf0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
eb00: 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50   Opcode: Ge P1 P
eb10: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
eb20: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
eb30: 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  >=r[P3] goto P2.
eb40: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
eb50: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
eb60: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
eb70: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
eb80: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
eb90: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
eba0: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
ebb0: 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
ebc0: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
ebd0: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
ebe0: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
ebf0: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
ec00: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
ec10: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a  ..*/.case OP_Eq:
ec20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ec30: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c  * same as TK_EQ,
ec40: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
ec50: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20  */.case OP_Ne:  
ec60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ec70: 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a  same as TK_NE, j
ec80: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
ec90: 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20  .case OP_Lt:    
eca0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ecb0: 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d  me as TK_LT, jum
ecc0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
ecd0: 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20  ase OP_Le:      
ece0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ecf0: 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c   as TK_LE, jump,
ed00: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
ed10: 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20  e OP_Gt:        
ed20: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ed30: 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69  s TK_GT, jump, i
ed40: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
ed50: 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20  OP_Ge: {        
ed60: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ed70: 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_GE, jump, in1
ed80: 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72  , in3 */.  int r
ed90: 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  es;            /
eda0: 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20  * Result of the 
edb0: 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49  comparison of pI
edc0: 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20  n1 against pIn3 
edd0: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
ede0: 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69  ty;      /* Affi
edf0: 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20  nity to use for 
ee00: 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20  comparison */.  
ee10: 75 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20  u16 flags1;     
ee20: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69      /* Copy of i
ee30: 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20  nitial value of 
ee40: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20  pIn1->flags */. 
ee50: 20 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20   u16 flags3;    
ee60: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
ee70: 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
ee80: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a   pIn3->flags */.
ee90: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
eea0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
eeb0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
eec0: 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49  ];.  flags1 = pI
eed0: 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61  n1->flags;.  fla
eee0: 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67  gs3 = pIn3->flag
eef0: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31  s;.  if( (flags1
ef00: 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e   | flags3)&MEM_N
ef10: 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  ull ){.    /* On
ef20: 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e  e or both operan
ef30: 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20  ds are NULL */. 
ef40: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
ef50: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29   SQLITE_NULLEQ )
ef60: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51  {.      /* If SQ
ef70: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
ef80: 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f  et (which will o
ef90: 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74 68  nly happen if th
efa0: 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20  e operator is.  
efb0: 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20      ** OP_Eq or 
efc0: 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65  OP_Ne) then take
efd0: 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74   the jump or not
efe0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
eff0: 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f  ether.      ** o
f000: 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61  r not both opera
f010: 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20  nds are null..  
f020: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
f030: 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
f040: 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e  ==OP_Eq || pOp->
f050: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b  opcode==OP_Ne );
f060: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
f070: 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65  flags1 & MEM_Cle
f080: 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20  ared)==0 );.    
f090: 20 20 69 66 28 20 28 66 6c 61 67 73 31 26 4d 45    if( (flags1&ME
f0a0: 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20  M_Null)!=0.     
f0b0: 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d    && (flags3&MEM
f0c0: 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20  _Null)!=0.      
f0d0: 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f   && (flags3&MEM_
f0e0: 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20 20  Cleared)==0.    
f0f0: 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73    ){.        res
f100: 20 3d 20 30 3b 20 20 2f 2a 20 52 65 73 75 6c 74   = 0;  /* Result
f110: 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20  s are equal */. 
f120: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
f130: 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a      res = 1;  /*
f140: 20 52 65 73 75 6c 74 73 20 61 72 65 20 6e 6f 74   Results are not
f150: 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20   equal */.      
f160: 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
f170: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c     /* SQLITE_NUL
f180: 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64  LEQ is clear and
f190: 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70   at least one op
f1a0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20  erand is NULL,. 
f1b0: 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65       ** then the
f1c0: 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79   result is alway
f1d0: 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a  s NULL..      **
f1e0: 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   The jump is tak
f1f0: 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54 45  en if the SQLITE
f200: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20  _JUMPIFNULL bit 
f210: 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f  is set..      */
f220: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
f230: 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50  p5 & SQLITE_JUMP
f240: 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20  IFNULL ){.      
f250: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
f260: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
f270: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
f280: 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20  TE_STOREP2 ){.  
f290: 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d        pOut = &aM
f2a0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
f2b0: 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46       MemSetTypeF
f2c0: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75  lag(pOut, MEM_Nu
f2d0: 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47  ll);.        REG
f2e0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
f2f0: 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  >p2, pOut);.    
f300: 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b    }.      break;
f310: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
f320: 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f      /* Neither o
f330: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20  perand is NULL. 
f340: 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e   Do a comparison
f350: 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74  . */.    affinit
f360: 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  y = pOp->p5 & SQ
f370: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20  LITE_AFF_MASK;. 
f380: 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 20     if( affinity 
f390: 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66  ){.      applyAf
f3a0: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61 66 66  finity(pIn1, aff
f3b0: 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29  inity, encoding)
f3c0: 3b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66  ;.      applyAff
f3d0: 69 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66 69  inity(pIn3, affi
f3e0: 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  nity, encoding);
f3f0: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6d  .      if( db->m
f400: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f  allocFailed ) go
f410: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d  to no_mem;.    }
f420: 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ..    assert( pO
f430: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
f440: 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34  LLSEQ || pOp->p4
f450: 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20  .pColl==0 );.   
f460: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
f470: 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  );.    ExpandBlo
f480: 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 72 65 73  b(pIn3);.    res
f490: 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
f4a0: 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c  pare(pIn3, pIn1,
f4b0: 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b   pOp->p4.pColl);
f4c0: 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70  .  }.  switch( p
f4d0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
f4e0: 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20    case OP_Eq:   
f4f0: 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20   res = res==0;  
f500: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
f510: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73  se OP_Ne:    res
f520: 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62   = res!=0;     b
f530: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
f540: 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Lt:    res = r
f550: 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es<0;      break
f560: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65  ;.    case OP_Le
f570: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d  :    res = res<=
f580: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
f590: 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20    case OP_Gt:   
f5a0: 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20   res = res>0;   
f5b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
f5c0: 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73  fault:       res
f5d0: 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62   = res>=0;     b
f5e0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  reak;.  }..  if(
f5f0: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
f600: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
f610: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
f620: 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41  p->p2];.    memA
f630: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
f640: 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65  pOut);.    MemSe
f650: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
f660: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f  MEM_Int);.    pO
f670: 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20  ut->u.i = res;. 
f680: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
f690: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
f6a0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72 65  ;.  }else if( re
f6b0: 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
f6c0: 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 0a 20 20  p->p2-1;.  }..  
f6d0: 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e  /* Undo any chan
f6e0: 67 65 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c  ges made by appl
f6f0: 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74  yAffinity() to t
f700: 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
f710: 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31 2d 3e 66  rs. */.  pIn1->f
f720: 6c 61 67 73 20 3d 20 28 70 49 6e 31 2d 3e 66 6c  lags = (pIn1->fl
f730: 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61 73  ags&~MEM_TypeMas
f740: 6b 29 20 7c 20 28 66 6c 61 67 73 31 26 4d 45 4d  k) | (flags1&MEM
f750: 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 70 49  _TypeMask);.  pI
f760: 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e  n3->flags = (pIn
f770: 33 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79  3->flags&~MEM_Ty
f780: 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
f790: 33 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b  3&MEM_TypeMask);
f7a0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
f7b0: 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74  Opcode: Permutat
f7c0: 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  ion * * * P4 *.*
f7d0: 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72  *.** Set the per
f7e0: 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79  mutation used by
f7f0: 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20   the OP_Compare 
f800: 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74  operator to be t
f810: 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69  he array.** of i
f820: 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a  ntegers in P4..*
f830: 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61  *.** The permuta
f840: 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c  tion is only val
f850: 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  id until the nex
f860: 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61  t OP_Compare tha
f870: 74 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46  t has.** the OPF
f880: 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
f890: 73 65 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63  set in P5. Typic
f8a0: 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d  ally the OP_Perm
f8b0: 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a  utation should .
f8c0: 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61  ** occur immedia
f8d0: 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68  tely prior to th
f8e0: 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f  e OP_Compare..*/
f8f0: 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61  .case OP_Permuta
f900: 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74  tion: {.  assert
f910: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
f920: 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20  4_INTARRAY );.  
f930: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
f940: 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65  ai );.  aPermute
f950: 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
f960: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
f970: 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31  code: Compare P1
f980: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
f990: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76  ** Compare two v
f9a0: 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74  ectors of regist
f9b0: 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e  ers in reg(P1)..
f9c0: 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61  reg(P1+P3-1) (ca
f9d0: 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f  ll this.** vecto
f9e0: 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65  r "A") and in re
f9f0: 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33  g(P2)..reg(P2+P3
fa00: 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65  -1) ("B").  Save
fa10: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
fa20: 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * the comparison
fa30: 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the 
fa40: 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73  next OP_Jump ins
fa50: 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  truct..**.** If 
fa60: 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
fa70: 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65  G_PERMUTE bit se
fa80: 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65  t, then the orde
fa90: 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  r of comparison 
faa0: 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64  is.** determined
fab0: 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63   by the most rec
fac0: 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ent OP_Permutati
fad0: 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20 49 66  on operator.  If
fae0: 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50   the.** OPFLAG_P
faf0: 45 52 4d 55 54 45 20 62 69 74 20 69 73 20 63 6c  ERMUTE bit is cl
fb00: 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69 73 74  ear, then regist
fb10: 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20  er are compared 
fb20: 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a  in sequential.**
fb30: 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   order..**.** P4
fb40: 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   is a KeyInfo st
fb50: 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66  ructure that def
fb60: 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ines collating s
fb70: 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72  equences and sor
fb80: 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20  t.** orders for 
fb90: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
fba0: 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
fbb0: 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69   applies to regi
fbc0: 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  sters.** only.  
fbd0: 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d  The KeyInfo elem
fbe0: 65 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65  ents are used se
fbf0: 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a  quentially..**.*
fc00: 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * The comparison
fc10: 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61   is a sort compa
fc20: 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20  rison, so NULLs 
fc30: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a  compare equal,.*
fc40: 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73  * NULLs are less
fc50: 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e   than numbers, n
fc60: 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20  umbers are less 
fc70: 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a  than strings,.**
fc80: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
fc90: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
fca0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d  ..*/.case OP_Com
fcb0: 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  pare: {.  int n;
fcc0: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20  .  int i;.  int 
fcd0: 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20  p1;.  int p2;.  
fce0: 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70  const KeyInfo *p
fcf0: 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69  KeyInfo;.  int i
fd00: 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70  dx;.  CollSeq *p
fd10: 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c  Coll;    /* Coll
fd20: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74  ating sequence t
fd30: 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65  o use on this te
fd40: 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76  rm */.  int bRev
fd50: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
fd60: 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e  ue for DESCENDIN
fd70: 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a  G sort order */.
fd80: 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20  .  if( (pOp->p5 
fd90: 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  & OPFLAG_PERMUTE
fda0: 29 3d 3d 30 20 29 20 61 50 65 72 6d 75 74 65 20  )==0 ) aPermute 
fdb0: 3d 20 30 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  = 0;.  n = pOp->
fdc0: 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d  p3;.  pKeyInfo =
fdd0: 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
fde0: 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  o;.  assert( n>0
fdf0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b   );.  assert( pK
fe00: 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70  eyInfo!=0 );.  p
fe10: 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  1 = pOp->p1;.  p
fe20: 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66  2 = pOp->p2;.#if
fe30: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
fe40: 69 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a  if( aPermute ){.
fe50: 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20      int k, mx = 
fe60: 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20  0;.    for(k=0; 
fe70: 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50  k<n; k++) if( aP
fe80: 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d  ermute[k]>mx ) m
fe90: 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b  x = aPermute[k];
fea0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
feb0: 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e  0 && p1+mx<=(p->
fec0: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
fed0: 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  +1 );.    assert
fee0: 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c  ( p2>0 && p2+mx<
fef0: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
ff00: 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c  rsor)+1 );.  }el
ff10: 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
ff20: 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70  p1>0 && p1+n<=(p
ff30: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
ff40: 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  r)+1 );.    asse
ff50: 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e  rt( p2>0 && p2+n
ff60: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
ff70: 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a  ursor)+1 );.  }.
ff80: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
ff90: 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28  _DEBUG */.  for(
ffa0: 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a  i=0; i<n; i++){.
ffb0: 20 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75      idx = aPermu
ffc0: 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d  te ? aPermute[i]
ffd0: 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74   : i;.    assert
ffe0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
fff0: 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p1+idx]) );. 
10000 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
10010 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69  Valid(&aMem[p2+i
10020 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49  dx]) );.    REGI
10030 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64  STER_TRACE(p1+id
10040 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  x, &aMem[p1+idx]
10050 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
10060 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61  TRACE(p2+idx, &a
10070 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p2+idx]);.  
10080 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79    assert( i<pKey
10090 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  Info->nField );.
100a0 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79      pColl = pKey
100b0 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a  Info->aColl[i];.
100c0 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49      bRev = pKeyI
100d0 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b  nfo->aSortOrder[
100e0 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65  i];.    iCompare
100f0 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
10100 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64  pare(&aMem[p1+id
10110 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  x], &aMem[p2+idx
10120 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
10130 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
10140 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
10150 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
10160 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
10170 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  k;.    }.  }.  a
10180 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62  Permute = 0;.  b
10190 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
101a0 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
101b0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
101c0 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
101d0 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
101e0 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
101f0 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
10200 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
10210 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
10220 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
10230 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
10240 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
10250 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
10260 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
10270 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
10280 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
10290 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
102a0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
102b0 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
102c0 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
102d0 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65  >p1 - 1;.  }else
102e0 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30   if( iCompare==0
102f0 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
10300 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
10310 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  e{.    pc = pOp-
10320 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p3 - 1;.  }.  b
10330 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
10340 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33  de: And P1 P2 P3
10350 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
10360 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26  : r[P3]=(r[P1] &
10370 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54  & r[P2]).**.** T
10380 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
10390 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
103a0 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
103b0 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
103c0 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c 74  write the result
103d0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
103e0 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
103f0 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 30  er P1 or P2 is 0
10400 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68   (false) then th
10410 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65 76  e result is 0 ev
10420 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68  en if.** the oth
10430 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
10440 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72  .  A NULL and tr
10450 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20  ue or two NULLs 
10460 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f  give.** a NULL o
10470 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  utput..*/./* Opc
10480 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33  ode: Or P1 P2 P3
10490 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
104a0 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c  : r[P3]=(r[P1] |
104b0 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54  | r[P2]).**.** T
104c0 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
104d0 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
104e0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
104f0 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
10500 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69  ore the answer i
10510 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
10520 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
10530 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65  1 or P2 is nonze
10540 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74  ro (true) then t
10550 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28  he result is 1 (
10560 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66  true).** even if
10570 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
10580 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
10590 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74  L and false or t
105a0 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65  wo NULLs.** give
105b0 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
105c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20  */.case OP_And: 
105d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
105e0 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20  same as TK_AND, 
105f0 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
10600 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20  /.case OP_Or: { 
10610 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
10620 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e  ame as TK_OR, in
10630 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
10640 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20    int v1;    /* 
10650 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30  Left operand:  0
10660 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
10670 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
10680 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32  NULL */.  int v2
10690 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70  ;    /* Right op
106a0 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c  erand: 0==FALSE,
106b0 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
106c0 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
106d0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
106e0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
106f0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10700 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31  M_Null ){.    v1
10710 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
10720 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56     v1 = sqlite3V
10730 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
10740 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32  )!=0;.  }.  pIn2
10750 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
10760 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66  ];.  if( pIn2->f
10770 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
10780 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20  ){.    v2 = 2;. 
10790 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d   }else{.    v2 =
107a0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
107b0 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20  alue(pIn2)!=0;. 
107c0 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70   }.  if( pOp->op
107d0 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a  code==OP_And ){.
107e0 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
107f0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61   unsigned char a
10800 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30  nd_logic[] = { 0
10810 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c  , 0, 0, 0, 1, 2,
10820 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20   0, 2, 2 };.    
10830 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76  v1 = and_logic[v
10840 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65  1*3+v2];.  }else
10850 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
10860 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
10870 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20   or_logic[] = { 
10880 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31  0, 1, 2, 1, 1, 1
10890 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20  , 2, 1, 2 };.   
108a0 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76   v1 = or_logic[v
108b0 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70  1*3+v2];.  }.  p
108c0 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
108d0 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d  >p3];.  if( v1==
108e0 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54  2 ){.    MemSetT
108f0 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
10900 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65  M_Null);.  }else
10910 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  {.    pOut->u.i 
10920 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74  = v1;.    MemSet
10930 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
10940 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62  EM_Int);.  }.  b
10950 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
10960 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20  de: Not P1 P2 * 
10970 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
10980 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a   r[P2]= !r[P1].*
10990 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
109a0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
109b0 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f  ster P1 as a boo
109c0 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f  lean value.  Sto
109d0 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61  re the.** boolea
109e0 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20  n complement in 
109f0 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
10a00 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
10a10 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a  gister P1 is .**
10a20 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55   NULL, then a NU
10a30 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  LL is stored in 
10a40 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  P2..*/.case OP_N
10a50 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
10a60 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
10a70 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74  TK_NOT, in1, out
10a80 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
10a90 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
10aa0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
10ab0 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p2];.  if( pIn
10ac0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
10ad0 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
10ae0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
10af0 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  (pOut);.  }else{
10b00 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
10b10 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74  MemSetInt64(pOut
10b20 2c 20 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e  , !sqlite3VdbeIn
10b30 74 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20  tValue(pIn1));. 
10b40 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
10b50 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74  * Opcode: BitNot
10b60 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
10b70 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d  Synopsis: r[P1]=
10b80 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e   ~r[P1].**.** In
10b90 74 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74  terpret the cont
10ba0 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
10bb0 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  P1 as an integer
10bc0 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20  .  Store the.** 
10bd0 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  ones-complement 
10be0 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  of the P1 value 
10bf0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
10c00 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a  .  If P1 holds.*
10c10 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74  * a NULL then st
10c20 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32  ore a NULL in P2
10c30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  ..*/.case OP_Bit
10c40 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
10c50 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
10c60 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75  _BITNOT, in1, ou
10c70 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
10c80 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
10c90 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
10ca0 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49  p->p2];.  if( pI
10cb0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
10cc0 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
10cd0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
10ce0 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  l(pOut);.  }else
10cf0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
10d00 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75  eMemSetInt64(pOu
10d10 74 2c 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49  t, ~sqlite3VdbeI
10d20 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a  ntValue(pIn1));.
10d30 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
10d40 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20  /* Opcode: Once 
10d50 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
10d60 2a 20 43 68 65 63 6b 20 69 66 20 4f 50 5f 4f 6e  * Check if OP_On
10d70 63 65 20 66 6c 61 67 20 50 31 20 69 73 20 73 65  ce flag P1 is se
10d80 74 2e 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74  t. If so, jump t
10d90 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
10da0 2e 20 4f 74 68 65 72 77 69 73 65 2c 0a 2a 2a 20  . Otherwise,.** 
10db0 73 65 74 20 74 68 65 20 66 6c 61 67 20 61 6e 64  set the flag and
10dc0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
10dd0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
10de0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
10df0 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  P_Once: {       
10e00 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
10e10 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
10e20 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20  p1<p->nOnceFlag 
10e30 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f 6e 63  );.  if( p->aOnc
10e40 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 29  eFlag[pOp->p1] )
10e50 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
10e60 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  p2-1;.  }else{. 
10e70 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b     p->aOnceFlag[
10e80 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a 20 20  pOp->p1] = 1;.  
10e90 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
10ea0 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50   Opcode: If P1 P
10eb0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
10ec0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
10ed0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
10ee0 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20 20  er P1 is true.  
10ef0 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  The value.** is 
10f00 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20  considered true 
10f10 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63  if it is numeric
10f20 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20   and non-zero.  
10f30 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
10f40 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
10f50 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
10f60 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65   if P3 is non-ze
10f70 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ro..*/./* Opcode
10f80 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33  : IfNot P1 P2 P3
10f90 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
10fa0 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
10fb0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
10fc0 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65  1 is False.  The
10fd0 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
10fe0 73 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66  sidered false if
10ff0 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69   it has a numeri
11000 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e  c value of zero.
11010 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
11020 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
11030 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
11040 6d 70 20 69 66 20 50 33 20 69 73 20 7a 65 72 6f  mp if P3 is zero
11050 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a  ..*/.case OP_If:
11060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11070 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
11080 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20  .case OP_IfNot: 
11090 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
110a0 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
110b0 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26  nt c;.  pIn1 = &
110c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
110d0 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
110e0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
110f0 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a     c = pOp->p3;.
11100 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20    }else{.#ifdef 
11110 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
11120 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63  TING_POINT.    c
11130 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
11140 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
11150 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73  .#else.    c = s
11160 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
11170 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a  lue(pIn1)!=0.0;.
11180 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
11190 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
111a0 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20  fNot ) c = !c;. 
111b0 20 7d 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20   }.  if( c ){.  
111c0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
111d0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
111e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e  ../* Opcode: IsN
111f0 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
11200 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66  ** Synopsis:  if
11210 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74   r[P1]==NULL got
11220 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
11230 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
11240 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
11250 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  1 is NULL..*/.ca
11260 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20  se OP_IsNull: { 
11270 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
11280 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c  me as TK_ISNULL,
11290 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
112a0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
112b0 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
112c0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
112d0 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
112e0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
112f0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
11300 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
11310 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
11320 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
11330 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74   r[P1]!=NULL got
11340 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
11350 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
11360 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
11370 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20  1 is not NULL.  
11380 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e  .*/.case OP_NotN
11390 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
113a0 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
113b0 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69  NOTNULL, jump, i
113c0 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
113d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
113e0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
113f0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
11400 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
11410 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
11420 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
11430 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50  ode: Column P1 P
11440 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
11450 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 50  nopsis:  r[P3]=P
11460 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  X.**.** Interpre
11470 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20  t the data that 
11480 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
11490 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74 75   to as a structu
114a0 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a  re built using.*
114b0 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  * the MakeRecord
114c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28   instruction.  (
114d0 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  See the MakeReco
114e0 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  rd opcode for ad
114f0 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f  ditional.** info
11500 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
11510 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  e format of the 
11520 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74 20  data.)  Extract 
11530 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e  the P2-th column
11540 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65  .** from this re
11550 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65 20  cord.  If there 
11560 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28 50  are less that (P
11570 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20  2+1) .** values 
11580 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65  in the record, e
11590 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a  xtract a NULL..*
115a0 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65  *.** The value e
115b0 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f 72  xtracted is stor
115c0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
115d0 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  3..**.** If the 
115e0 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20  column contains 
115f0 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66 69  fewer than P2 fi
11600 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61  elds, then extra
11610 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a  ct a NULL.  Or,.
11620 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72 67  ** if the P4 arg
11630 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45  ument is a P4_ME
11640 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  M use the value 
11650 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  of the P4 argume
11660 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73  nt as.** the res
11670 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ult..**.** If th
11680 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41  e OPFLAG_CLEARCA
11690 43 48 45 20 62 69 74 20 69 73 20 73 65 74 20 6f  CHE bit is set o
116a0 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73 20 61  n P5 and P1 is a
116b0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75   pseudo-table cu
116c0 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68  rsor,.** then th
116d0 65 20 63 61 63 68 65 20 6f 66 20 74 68 65 20 63  e cache of the c
116e0 75 72 73 6f 72 20 69 73 20 72 65 73 65 74 20 70  ursor is reset p
116f0 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69  rior to extracti
11700 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  ng the column..*
11710 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43  * The first OP_C
11720 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20  olumn against a 
11730 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74  pseudo-table aft
11740 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  er the value of 
11750 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72  the content.** r
11760 65 67 69 73 74 65 72 20 68 61 73 20 63 68 61 6e  egister has chan
11770 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20  ged should have 
11780 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a  this bit set..**
11790 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
117a0 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
117b0 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
117c0 20 62 69 74 73 20 61 72 65 20 73 65 74 20 6f 6e   bits are set on
117d0 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20   P5 when.** the 
117e0 72 65 73 75 6c 74 20 69 73 20 67 75 61 72 61 6e  result is guaran
117f0 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20  teed to only be 
11800 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
11810 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74 68  ment of a length
11820 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28  ().** or typeof(
11830 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70  ) function, resp
11840 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 20 6c  ectively.  The l
11850 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67 65 20  oading of large 
11860 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20  blobs can be.** 
11870 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65 6e 67  skipped for leng
11880 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e  th() and all con
11890 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e  tent loading can
118a0 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f 72 20   be skipped for 
118b0 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73  typeof()..*/.cas
118c0 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20  e OP_Column: {. 
118d0 20 69 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65   i64 payloadSize
118e0 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66  64; /* Number of
118f0 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
11900 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 32  cord */.  int p2
11910 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11920 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f  column number to
11930 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56   retrieve */.  V
11940 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
11950 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
11960 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72 73  rsor */.  BtCurs
11970 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20  or *pCrsr;   /* 
11980 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f 72  The BTree cursor
11990 20 2a 2f 0a 20 20 75 33 32 20 2a 61 54 79 70 65   */.  u32 *aType
119a0 3b 20 20 20 20 20 20 20 20 2f 2a 20 61 54 79 70  ;        /* aTyp
119b0 65 5b 69 5d 20 68 6f 6c 64 73 20 74 68 65 20 6e  e[i] holds the n
119c0 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 74  umeric type of t
119d0 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a  he i-th column *
119e0 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74  /.  u32 *aOffset
119f0 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73 65  ;      /* aOffse
11a00 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20 74  t[i] is offset t
11a10 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74 61 20  o start of data 
11a20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20  for i-th column 
11a30 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20  */.  int len;   
11a40 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
11a50 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65 72  ength of the ser
11a60 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72  ialized data for
11a70 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20   the column */. 
11a80 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
11a90 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
11aa0 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  ter */.  Mem *pD
11ab0 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57  est;        /* W
11ac0 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74 68  here to write th
11ad0 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c 75  e extracted valu
11ae0 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b  e */.  Mem sMem;
11af0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
11b00 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63   storing the rec
11b10 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
11b20 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20  d */.  const u8 
11b30 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20 50 61 72  *zData;   /* Par
11b40 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  t of the record 
11b50 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f  being decoded */
11b60 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 48 64  .  const u8 *zHd
11b70 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 75 6e  r;    /* Next un
11b80 70 61 72 73 65 64 20 62 79 74 65 20 6f 66 20 74  parsed byte of t
11b90 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 63  he header */.  c
11ba0 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64 48 64 72  onst u8 *zEndHdr
11bb0 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20  ; /* Pointer to 
11bc0 66 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72  first byte after
11bd0 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20   the header */. 
11be0 20 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20   u32 offset;    
11bf0 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e      /* Offset in
11c00 74 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20  to the data */. 
11c10 20 75 33 32 20 73 7a 46 69 65 6c 64 3b 20 20 20   u32 szField;   
11c20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11c30 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f   bytes in the co
11c40 6e 74 65 6e 74 20 6f 66 20 61 20 66 69 65 6c 64  ntent of a field
11c50 20 2a 2f 0a 20 20 75 33 32 20 61 76 61 69 6c 3b   */.  u32 avail;
11c60 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11c70 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61  er of bytes of a
11c80 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f  vailable data */
11c90 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20 20 20  .  u32 t;       
11ca0 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20        /* A type 
11cb0 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65  code from the re
11cc0 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20  cord header */. 
11cd0 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20   Mem *pReg;     
11ce0 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62      /* PseudoTab
11cf0 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  le input registe
11d00 72 20 2a 2f 0a 0a 20 20 70 32 20 3d 20 70 4f 70  r */..  p2 = pOp
11d10 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
11d20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
11d30 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
11d40 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
11d50 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f  pDest = &aMem[pO
11d60 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
11d70 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44  utToChange(p, pD
11d80 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20  est);.  assert( 
11d90 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
11da0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
11db0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
11dc0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
11dd0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
11de0 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43  .  assert( p2<pC
11df0 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 61 54  ->nField );.  aT
11e00 79 70 65 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b  ype = pC->aType;
11e10 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 61 54 79  .  aOffset = aTy
11e20 70 65 20 2b 20 70 43 2d 3e 6e 46 69 65 6c 64 3b  pe + pC->nField;
11e30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
11e40 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
11e50 45 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  E.  assert( pC->
11e60 70 56 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29  pVtabCursor==0 )
11e70 3b 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6e  ; /* OP_Column n
11e80 65 76 65 72 20 63 61 6c 6c 65 64 20 6f 6e 20 76  ever called on v
11e90 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
11ea0 23 65 6e 64 69 66 0a 20 20 70 43 72 73 72 20 3d  #endif.  pCrsr =
11eb0 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
11ec0 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
11ed0 20 7c 7c 20 70 43 2d 3e 70 73 65 75 64 6f 54 61   || pC->pseudoTa
11ee0 62 6c 65 52 65 67 3e 30 20 29 3b 20 2f 2a 20 70  bleReg>0 ); /* p
11ef0 43 72 73 72 20 4e 55 4c 4c 20 6f 6e 20 50 73 65  Crsr NULL on Pse
11f00 75 64 6f 54 61 62 6c 65 73 20 2a 2f 0a 20 20 61  udoTables */.  a
11f10 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
11f20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  || pC->nullRow )
11f30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 43  ;          /* pC
11f40 2d 3e 6e 75 6c 6c 52 6f 77 20 6f 6e 20 50 73 65  ->nullRow on Pse
11f50 75 64 6f 54 61 62 6c 65 73 20 2a 2f 0a 0a 20 20  udoTables */..  
11f60 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  /* If the cursor
11f70 20 63 61 63 68 65 20 69 73 20 73 74 61 6c 65 2c   cache is stale,
11f80 20 62 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d   bring it up-to-
11f90 64 61 74 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73  date */.  rc = s
11fa0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
11fb0 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66  Moveto(pC);.  if
11fc0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
11fd0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
11fe0 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53    if( pC->cacheS
11ff0 74 61 74 75 73 21 3d 70 2d 3e 63 61 63 68 65 43  tatus!=p->cacheC
12000 74 72 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 26 4f  tr || (pOp->p5&O
12010 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45  PFLAG_CLEARCACHE
12020 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )!=0 ){.    if( 
12030 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
12040 20 20 20 20 20 69 66 28 20 70 43 72 73 72 3d 3d       if( pCrsr==
12050 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
12060 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
12070 61 62 6c 65 52 65 67 3e 30 20 29 3b 0a 20 20 20  ableReg>0 );.   
12080 20 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65       pReg = &aMe
12090 6d 5b 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  m[pC->pseudoTabl
120a0 65 52 65 67 5d 3b 0a 20 20 20 20 20 20 20 20 69  eReg];.        i
120b0 66 28 20 70 43 2d 3e 6d 75 6c 74 69 50 73 65 75  f( pC->multiPseu
120c0 64 6f 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  do ){.          
120d0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
120e0 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c  allowCopy(pDest,
120f0 20 70 52 65 67 2b 70 32 2c 20 4d 45 4d 5f 45 70   pReg+p2, MEM_Ep
12100 68 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  hem);.          
12110 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
12120 44 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 20  Dest);.         
12130 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
12140 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  out;.        }. 
12150 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
12160 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Reg->flags & MEM
12170 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 20  _Blob );.       
12180 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
12190 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20  lid(pReg) );.   
121a0 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64       pC->payload
121b0 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52 6f 77  Size = pC->szRow
121c0 20 3d 20 61 76 61 69 6c 20 3d 20 70 52 65 67 2d   = avail = pReg-
121d0 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  >n;.        pC->
121e0 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67  aRow = (u8*)pReg
121f0 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ->z;.      }else
12200 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74  {.        MemSet
12210 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20  TypeFlag(pDest, 
12220 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20  MEM_Null);.     
12230 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
12240 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20  n_out;.      }. 
12250 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
12260 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
12270 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69  .      if( pC->i
12280 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20  sTable==0 ){.   
12290 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
122a0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
122b0 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
122c0 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c  .        VVA_ONL
122d0 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42  Y(rc =) sqlite3B
122e0 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73  treeKeySize(pCrs
122f0 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36  r, &payloadSize6
12300 34 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  4);.        asse
12310 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
12320 4b 20 29 3b 20 2f 2a 20 54 72 75 65 20 62 65 63  K ); /* True bec
12330 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f  ause of CursorMo
12340 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76  veto() call abov
12350 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 2f 2a 20  e */.        /* 
12360 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 72 73  sqlite3BtreePars
12370 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20  eCellPtr() uses 
12380 67 65 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f  getVarint32() to
12390 20 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 20   extract the.   
123a0 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20       ** payload 
123b0 73 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69  size, so it is i
123c0 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61  mpossible for pa
123d0 79 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62  yloadSize64 to b
123e0 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 61 72  e.        ** lar
123f0 67 65 72 20 74 68 61 6e 20 33 32 20 62 69 74 73  ger than 32 bits
12400 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  . */.        ass
12410 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a  ert( (payloadSiz
12420 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58  e64 & SQLITE_MAX
12430 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c  _U32)==(u64)payl
12440 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20  oadSize64 );.   
12450 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
12460 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46  sqlite3BtreeKeyF
12470 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61  etch(pCrsr, &ava
12480 69 6c 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  il);.        pC-
12490 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28  >payloadSize = (
124a0 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65 36  u32)payloadSize6
124b0 34 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  4;.      }else{.
124c0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
124d0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
124e0 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
124f0 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f   );.        VVA_
12500 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74  ONLY(rc =) sqlit
12510 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28  e3BtreeDataSize(
12520 70 43 72 73 72 2c 20 26 70 43 2d 3e 70 61 79 6c  pCrsr, &pC->payl
12530 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20  oadSize);.      
12540 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
12550 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20  LITE_OK );   /* 
12560 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f  DataSize() canno
12570 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 20 20  t fail */.      
12580 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c    pC->aRow = sql
12590 69 74 65 33 42 74 72 65 65 44 61 74 61 46 65 74  ite3BtreeDataFet
125a0 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c  ch(pCrsr, &avail
125b0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
125c0 20 61 73 73 65 72 74 28 20 61 76 61 69 6c 3c 3d   assert( avail<=
125d0 36 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78  65536 );  /* Max
125e0 69 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69  imum page size i
125f0 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20  s 64KiB */.     
12600 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64   if( pC->payload
12610 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61  Size <= (u32)ava
12620 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43  il ){.        pC
12630 2d 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70 61  ->szRow = pC->pa
12640 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20  yloadSize;.     
12650 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
12660 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69  pC->szRow = avai
12670 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  l;.      }.     
12680 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64   if( pC->payload
12690 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e  Size > (u32)db->
126a0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
126b0 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
126c0 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f         goto too_
126d0 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  big;.      }.   
126e0 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65   }.    pC->cache
126f0 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68  Status = p->cach
12700 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48  eCtr;.    pC->iH
12710 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74 56 61  drOffset = getVa
12720 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c  rint32(pC->aRow,
12730 20 6f 66 66 73 65 74 29 3b 0a 20 20 20 20 70 43   offset);.    pC
12740 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30  ->nHdrParsed = 0
12750 3b 0a 20 20 20 20 61 4f 66 66 73 65 74 5b 30 5d  ;.    aOffset[0]
12760 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 69   = offset;.    i
12770 66 28 20 61 76 61 69 6c 3c 6f 66 66 73 65 74 20  f( avail<offset 
12780 29 7b 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e  ){.      /* pC->
12790 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61  aRow does not ha
127a0 76 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65  ve to hold the e
127b0 6e 74 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69  ntire row, but i
127c0 74 20 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a  t does at least.
127d0 20 20 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f        ** need to
127e0 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65   cover the heade
127f0 72 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e  r of the record.
12800 20 20 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f    If pC->aRow do
12810 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20  es not contain. 
12820 20 20 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70       ** the comp
12830 6c 65 74 65 20 68 65 61 64 65 72 2c 20 74 68 65  lete header, the
12840 6e 20 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f  n set it to zero
12850 2c 20 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65  , forcing the he
12860 61 64 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20  ader to be.     
12870 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   ** dynamically 
12880 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20  allocated. */.  
12890 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30      pC->aRow = 0
128a0 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f  ;.      pC->szRo
128b0 77 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20  w = 0;.    }..  
128c0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
128d0 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
128e0 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20  e has not given 
128f0 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68  us an oversize h
12900 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f  eader..    ** Do
12910 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f   this now to avo
12920 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d  id an oversize m
12930 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
12940 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
12950 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e  Type entries can
12960 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
12970 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20  d 5 bytes each. 
12980 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74   But 4 and 5 byt
12990 65 0a 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75  e.    ** types u
129a0 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20  se so much data 
129b0 73 70 61 63 65 20 74 68 61 74 20 74 68 65 72 65  space that there
129c0 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39   can only be 409
129d0 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20  6 and 32 of.    
129e0 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74  ** them, respect
129f0 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d  ively.  So the m
12a00 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65  aximum header le
12a10 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f  ngth results fro
12a20 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74  m a.    ** 3-byt
12a30 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20  e type for each 
12a40 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  of the maximum o
12a50 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20  f 32768 columns 
12a60 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 2a  plus three.    *
12a70 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66 6f  * extra bytes fo
12a80 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e  r the header len
12a90 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37  gth itself.  327
12aa0 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37  68*3 + 3 = 98307
12ab0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
12ac0 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37 20   offset > 98307 
12ad0 7c 7c 20 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e  || offset > pC->
12ae0 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20  payloadSize ){. 
12af0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
12b00 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
12b10 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
12b20 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  umn_error;.    }
12b30 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  .  }..  /* Make 
12b40 73 75 72 65 20 61 74 20 6c 65 61 73 74 20 74 68  sure at least th
12b50 65 20 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74  e first p2+1 ent
12b60 72 69 65 73 20 6f 66 20 74 68 65 20 68 65 61 64  ries of the head
12b70 65 72 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a  er have been.  *
12b80 2a 20 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c  * parsed and val
12b90 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  id information i
12ba0 73 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61  s in aOffset[] a
12bb0 6e 64 20 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f  nd aType[]..  */
12bc0 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50  .  if( pC->nHdrP
12bd0 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20  arsed<=p2 ){.   
12be0 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
12bf0 6d 6f 72 65 20 68 65 61 64 65 72 20 61 76 61 69  more header avai
12c00 6c 61 62 6c 65 20 66 6f 72 20 70 61 72 73 69 6e  lable for parsin
12c10 67 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c  g in the record,
12c20 20 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65   try.    ** to e
12c30 78 74 72 61 63 74 20 61 64 64 69 74 69 6f 6e 61  xtract additiona
12c40 6c 20 66 69 65 6c 64 73 20 75 70 20 74 68 72 6f  l fields up thro
12c50 75 67 68 20 74 68 65 20 70 32 2b 31 2d 74 68 20  ugh the p2+1-th 
12c60 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20  field .    */.  
12c70 20 20 69 66 28 20 70 43 2d 3e 69 48 64 72 4f 66    if( pC->iHdrOf
12c80 66 73 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20  fset<aOffset[0] 
12c90 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65  ){.      /* Make
12ca0 20 73 75 72 65 20 7a 44 61 74 61 20 70 6f 69 6e   sure zData poin
12cb0 74 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20  ts to enough of 
12cc0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 63 6f  the record to co
12cd0 76 65 72 20 74 68 65 20 68 65 61 64 65 72 2e 20  ver the header. 
12ce0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  */.      if( pC-
12cf0 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20  >aRow==0 ){.    
12d00 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d      memset(&sMem
12d10 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d  , 0, sizeof(sMem
12d20 29 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  ));.        rc =
12d30 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
12d40 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20  romBtree(pCrsr, 
12d50 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20 0a  0, aOffset[0], .
12d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d80 20 20 20 20 20 21 70 43 2d 3e 69 73 54 61 62 6c       !pC->isTabl
12d90 65 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20  e, &sMem);.     
12da0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
12db0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
12dc0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
12dd0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
12de0 7d 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  }.        zData 
12df0 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20  = (u8*)sMem.z;. 
12e00 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
12e10 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
12e20 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20  aRow;.      }.  
12e30 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69  .      /* Fill i
12e40 6e 20 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61  n aType[i] and a
12e50 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73  Offset[i] values
12e60 20 74 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d   through the p2-
12e70 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20  th field. */.   
12e80 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50     i = pC->nHdrP
12e90 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66  arsed;.      off
12ea0 73 65 74 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d  set = aOffset[i]
12eb0 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a  ;.      zHdr = z
12ec0 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f  Data + pC->iHdrO
12ed0 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e  ffset;.      zEn
12ee0 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61  dHdr = zData + a
12ef0 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20  Offset[0];.     
12f00 20 61 73 73 65 72 74 28 20 69 3c 3d 70 32 20 26   assert( i<=p2 &
12f10 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29  & zHdr<zEndHdr )
12f20 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20  ;.      do{.    
12f30 20 20 20 20 69 66 28 20 7a 48 64 72 5b 30 5d 3c      if( zHdr[0]<
12f40 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20  0x80 ){.        
12f50 20 20 74 20 3d 20 7a 48 64 72 5b 30 5d 3b 0a 20    t = zHdr[0];. 
12f60 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b           zHdr++;
12f70 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
12f80 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20 2b            zHdr +
12f90 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  = sqlite3GetVari
12fa0 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a  nt32(zHdr, &t);.
12fb0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
12fc0 20 20 61 54 79 70 65 5b 69 5d 20 3d 20 74 3b 0a    aType[i] = t;.
12fd0 20 20 20 20 20 20 20 20 73 7a 46 69 65 6c 64 20          szField 
12fe0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
12ff0 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20  ialTypeLen(t);. 
13000 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d         offset +=
13010 20 73 7a 46 69 65 6c 64 3b 0a 20 20 20 20 20 20   szField;.      
13020 20 20 69 66 28 20 6f 66 66 73 65 74 3c 73 7a 46    if( offset<szF
13030 69 65 6c 64 20 29 7b 20 20 2f 2a 20 54 72 75 65  ield ){  /* True
13040 20 69 66 20 6f 66 66 73 65 74 20 6f 76 65 72 66   if offset overf
13050 6c 6f 77 73 20 2a 2f 0a 20 20 20 20 20 20 20 20  lows */.        
13060 20 20 7a 48 64 72 20 3d 20 26 7a 45 6e 64 48 64    zHdr = &zEndHd
13070 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f 72 63 65 73  r[1];  /* Forces
13080 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20   SQLITE_CORRUPT 
13090 72 65 74 75 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a  return below */.
130a0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
130b0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
130c0 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20     i++;.        
130d0 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66  aOffset[i] = off
130e0 73 65 74 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c  set;.      }whil
130f0 65 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72  e( i<=p2 && zHdr
13100 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20  <zEndHdr );.    
13110 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64    pC->nHdrParsed
13120 20 3d 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e   = i;.      pC->
13130 69 48 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33  iHdrOffset = (u3
13140 32 29 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29  2)(zHdr - zData)
13150 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  ;.      if( pC->
13160 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20  aRow==0 ){.     
13170 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
13180 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
13190 0a 20 20 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c  .        sMem.fl
131a0 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
131b0 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
131c0 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65 20 72   /* If we have r
131d0 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20  ead more header 
131e0 64 61 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f  data than was co
131f0 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68  ntained in the h
13200 65 61 64 65 72 2c 0a 20 20 20 20 20 20 2a 2a 20  eader,.      ** 
13210 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66  or if the end of
13220 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20   the last field 
13230 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 70 61  appears to be pa
13240 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  st the end of th
13250 65 0a 20 20 20 20 20 20 2a 2a 20 72 65 63 6f 72  e.      ** recor
13260 64 2c 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64  d, or if the end
13270 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69 65   of the last fie
13280 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  ld appears to be
13290 20 62 65 66 6f 72 65 20 74 68 65 20 65 6e 64 0a   before the end.
132a0 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20        ** of the 
132b0 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c  record (when all
132c0 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e 74 29   fields present)
132d0 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74 20 62  , then we must b
132e0 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20 20 20  e dealing .     
132f0 20 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75   ** with a corru
13300 70 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20  pt database..   
13310 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
13320 28 7a 48 64 72 20 3e 20 7a 45 6e 64 48 64 72 29  (zHdr > zEndHdr)
13330 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f 66 66 73  .       || (offs
13340 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64  et > pC->payload
13350 53 69 7a 65 29 0a 20 20 20 20 20 20 20 7c 7c 20  Size).       || 
13360 28 7a 48 64 72 3d 3d 7a 45 6e 64 48 64 72 20 26  (zHdr==zEndHdr &
13370 26 20 6f 66 66 73 65 74 21 3d 70 43 2d 3e 70 61  & offset!=pC->pa
13380 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20  yloadSize).     
13390 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
133a0 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
133b0 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f  BKPT;.        go
133c0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72  to op_column_err
133d0 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
133e0 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74  }..    /* If aft
133f0 65 72 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74  er trying to ext
13400 72 61 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66  ra new entries f
13410 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20  rom the header, 
13420 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a 20 20  nHdrParsed is.  
13430 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75    ** still not u
13440 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65  p to p2, that me
13450 61 6e 73 20 74 68 61 74 20 74 68 65 20 72 65 63  ans that the rec
13460 6f 72 64 20 68 61 73 20 66 65 77 65 72 20 74 68  ord has fewer th
13470 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c  an p2.    ** col
13480 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65  umns.  So the re
13490 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74  sult will be eit
134a0 68 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20  her the default 
134b0 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e  value or a NULL.
134c0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
134d0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d  pC->nHdrParsed<=
134e0 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  p2 ){.      if( 
134f0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
13500 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  MEM ){.        s
13510 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
13520 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20  llowCopy(pDest, 
13530 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45  pOp->p4.pMem, ME
13540 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20  M_Static);.     
13550 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
13560 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
13570 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  Dest, MEM_Null);
13580 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67  .      }.      g
13590 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
135a0 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  t;.    }.  }..  
135b0 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 63  /* Extract the c
135c0 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20 70  ontent for the p
135d0 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20  2+1-th column.  
135e0 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79  Control can only
135f0 0a 20 20 2a 2a 20 72 65 61 63 68 20 74 68 69 73  .  ** reach this
13600 20 70 6f 69 6e 74 20 69 66 20 61 4f 66 66 73 65   point if aOffse
13610 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70  t[p2], aOffset[p
13620 32 2b 31 5d 2c 20 61 6e 64 20 61 54 79 70 65 5b  2+1], and aType[
13630 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c  p2] are.  ** all
13640 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61   valid..  */.  a
13650 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48  ssert( p2<pC->nH
13660 64 72 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73  drParsed );.  as
13670 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
13680 5f 4f 4b 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  _OK );.  if( pC-
13690 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b  >szRow>=aOffset[
136a0 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20  p2+1] ){.    /* 
136b0 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d  This is the comm
136c0 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20 74 68  on case where th
136d0 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65 6e  e desired conten
136e0 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f 72  t fits on the or
136f0 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61  iginal.    ** pa
13700 67 65 20 2d 20 77 68 65 72 65 20 74 68 65 20 63  ge - where the c
13710 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e  ontent is not on
13720 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67   an overflow pag
13730 65 20 2a 2f 0a 20 20 20 20 56 64 62 65 4d 65 6d  e */.    VdbeMem
13740 52 65 6c 65 61 73 65 28 70 44 65 73 74 29 3b 0a  Release(pDest);.
13750 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
13760 65 72 69 61 6c 47 65 74 28 70 43 2d 3e 61 52 6f  erialGet(pC->aRo
13770 77 2b 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61  w+aOffset[p2], a
13780 54 79 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29  Type[p2], pDest)
13790 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
137a0 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20 68 61  * This branch ha
137b0 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20  ppens only when 
137c0 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76  content is on ov
137d0 65 72 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 09  erflow pages */.
137e0 0a 20 20 20 20 74 20 3d 20 61 54 79 70 65 5b 70  .    t = aType[p
137f0 32 5d 3b 0a 20 20 20 20 69 66 28 20 28 28 70 4f  2];.    if( ((pO
13800 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f  p->p5 & (OPFLAG_
13810 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41 47  LENGTHARG|OPFLAG
13820 5f 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30 0a  _TYPEOFARG))!=0.
13830 20 20 20 20 20 20 20 20 20 20 26 26 20 28 28 74            && ((t
13840 3e 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30  >=12 && (t&1)==0
13850 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20  ) || (pOp->p5 & 
13860 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
13870 29 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20 28  )!=0)).     || (
13880 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62  len = sqlite3Vdb
13890 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74  eSerialTypeLen(t
138a0 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20  ))==0.    ){.   
138b0 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73     /* Content is
138c0 20 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 20   irrelevant for 
138d0 74 68 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e  the typeof() fun
138e0 63 74 69 6f 6e 20 61 6e 64 20 66 6f 72 0a 20 20  ction and for.  
138f0 20 20 20 20 2a 2a 20 74 68 65 20 6c 65 6e 67 74      ** the lengt
13900 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 66  h(X) function if
13910 20 58 20 69 73 20 61 20 62 6c 6f 62 2e 20 20 53   X is a blob.  S
13920 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65  o we might as we
13930 6c 6c 20 75 73 65 0a 20 20 20 20 20 20 2a 2a 20  ll use.      ** 
13940 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61  bogus content ra
13950 74 68 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e  ther than readin
13960 67 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64  g content from d
13970 69 73 6b 2e 20 20 4e 55 4c 4c 20 77 6f 72 6b 73  isk.  NULL works
13980 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 74 65  .      ** for te
13990 78 74 20 61 6e 64 20 62 6c 6f 62 20 61 6e 64 20  xt and blob and 
139a0 77 68 61 74 65 76 65 72 20 69 73 20 69 6e 20 74  whatever is in t
139b0 68 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  he payloadSize64
139c0 20 76 61 72 69 61 62 6c 65 0a 20 20 20 20 20 20   variable.      
139d0 2a 2a 20 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72  ** will work for
139e0 20 65 76 65 72 79 74 68 69 6e 67 20 65 6c 73 65   everything else
139f0 2e 20 20 43 6f 6e 74 65 6e 74 20 69 73 20 61 6c  .  Content is al
13a00 73 6f 20 69 72 72 65 6c 65 76 61 6e 74 20 69 66  so irrelevant if
13a10 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 6f  .      ** the co
13a20 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20  ntent length is 
13a30 30 2e 20 2a 2f 0a 20 20 20 20 20 20 7a 44 61 74  0. */.      zDat
13a40 61 20 3d 20 74 3c 3d 31 33 20 3f 20 28 75 38 2a  a = t<=13 ? (u8*
13a50 29 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20  )&payloadSize64 
13a60 3a 20 30 3b 0a 20 20 20 20 20 20 73 4d 65 6d 2e  : 0;.      sMem.
13a70 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20  zMalloc = 0;.   
13a80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65   }else{.      me
13a90 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73  mset(&sMem, 0, s
13aa0 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20  izeof(sMem));.  
13ab0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
13ac0 65 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44  emMove(&sMem, pD
13ad0 65 73 74 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  est);.      rc =
13ae0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
13af0 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20  romBtree(pCrsr, 
13b00 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e  aOffset[p2], len
13b10 2c 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 0a  , !pC->isTable,.
13b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b40 20 20 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20     &sMem);.     
13b50 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
13b60 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
13b70 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72  to op_column_err
13b80 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
13b90 20 20 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73    zData = (u8*)s
13ba0 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20 20  Mem.z;.    }.   
13bb0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
13bc0 61 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c 20  alGet(zData, t, 
13bd0 70 44 65 73 74 29 3b 0a 20 20 20 20 2f 2a 20 49  pDest);.    /* I
13be0 66 20 77 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79  f we dynamically
13bf0 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65   allocated space
13c00 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74   to hold the dat
13c10 61 20 28 69 6e 20 74 68 65 0a 20 20 20 20 2a 2a  a (in the.    **
13c20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
13c30 72 6f 6d 42 74 72 65 65 28 29 20 63 61 6c 6c 20  romBtree() call 
13c40 61 62 6f 76 65 29 20 74 68 65 6e 20 74 72 61 6e  above) then tran
13c50 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20  sfer control of 
13c60 74 68 61 74 0a 20 20 20 20 2a 2a 20 64 79 6e 61  that.    ** dyna
13c70 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
13c80 64 20 73 70 61 63 65 20 6f 76 65 72 20 74 6f 20  d space over to 
13c90 74 68 65 20 70 44 65 73 74 20 73 74 72 75 63 74  the pDest struct
13ca0 75 72 65 2e 0a 20 20 20 20 2a 2a 20 54 68 69 73  ure..    ** This
13cb0 20 70 72 65 76 65 6e 74 73 20 61 20 6d 65 6d 6f   prevents a memo
13cc0 72 79 20 63 6f 70 79 2e 20 2a 2f 0a 20 20 20 20  ry copy. */.    
13cd0 69 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63  if( sMem.zMalloc
13ce0 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
13cf0 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a  ( sMem.z==sMem.z
13d00 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20 20 20  Malloc );.      
13d10 61 73 73 65 72 74 28 20 21 28 70 44 65 73 74 2d  assert( !(pDest-
13d20 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
13d30 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
13d40 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67  t( !(pDest->flag
13d50 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
13d60 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65 73 74  M_Str)) || pDest
13d70 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20  ->z==sMem.z );. 
13d80 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67       pDest->flag
13d90 73 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d  s &= ~(MEM_Ephem
13da0 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20  |MEM_Static);.  
13db0 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
13dc0 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20   |= MEM_Term;.  
13dd0 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73      pDest->z = s
13de0 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 70 44 65  Mem.z;.      pDe
13df0 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d  st->zMalloc = sM
13e00 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20  em.zMalloc;.    
13e10 7d 0a 20 20 7d 0a 20 20 70 44 65 73 74 2d 3e 65  }.  }.  pDest->e
13e20 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 0a  nc = encoding;..
13e30 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20  op_column_out:. 
13e40 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
13e50 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
13e60 65 28 70 44 65 73 74 29 3b 0a 6f 70 5f 63 6f 6c  e(pDest);.op_col
13e70 75 6d 6e 5f 65 72 72 6f 72 3a 0a 20 20 55 50 44  umn_error:.  UPD
13e80 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
13e90 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53  (pDest);.  REGIS
13ea0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
13eb0 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65  3, pDest);.  bre
13ec0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
13ed0 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32  : Affinity P1 P2
13ee0 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
13ef0 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b  sis: affinity(r[
13f00 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70  P1@P2]).**.** Ap
13f10 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74  ply affinities t
13f20 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20  o a range of P2 
13f30 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
13f40 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a  ng with P1..**.*
13f50 2a 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67  * P4 is a string
13f60 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
13f70 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65  acters long. The
13f80 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
13f90 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
13fa0 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
13fb0 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
13fc0 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
13fd0 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
13fe0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
13ff0 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61  the range..*/.ca
14000 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20  se OP_Affinity: 
14010 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
14020 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20  zAffinity;   /* 
14030 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20  The affinity to 
14040 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20  be applied */.  
14050 63 68 61 72 20 63 41 66 66 3b 20 20 20 20 20 20  char cAff;      
14060 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69           /* A si
14070 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f  ngle character o
14080 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20  f affinity */.. 
14090 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70   zAffinity = pOp
140a0 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74  ->p4.z;.  assert
140b0 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29  ( zAffinity!=0 )
140c0 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
140d0 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d  inity[pOp->p2]==
140e0 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  0 );.  pIn1 = &a
140f0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
14100 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a  while( (cAff = *
14110 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d  (zAffinity++))!=
14120 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
14130 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65   pIn1 <= &p->aMe
14140 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  m[(p->nMem-p->nC
14150 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
14160 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
14170 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 45  d(pIn1) );.    E
14180 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
14190 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
141a0 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65  ty(pIn1, cAff, e
141b0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49  ncoding);.    pI
141c0 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
141d0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
141e0 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50   MakeRecord P1 P
141f0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
14200 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72  opsis: r[P3]=mkr
14210 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ec(r[P1@P2]).**.
14220 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
14230 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
14240 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74  g with P1 into t
14250 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61  he [record forma
14260 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64  t].** use as a d
14270 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20  ata record in a 
14280 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
14290 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e  r as a key.** in
142a0 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20   an index.  The 
142b0 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
142c0 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20   can decode the 
142d0 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a  record later..**
142e0 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
142f0 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
14300 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
14310 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72  g.  The nth char
14320 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
14330 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
14340 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
14350 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
14360 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
14370 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66   nth.** field of
14380 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
14390 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
143a0 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
143b0 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
143c0 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
143d0 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
143e0 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
143f0 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
14400 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
14410 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
14420 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
14430 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a  finity NONE..*/.
14440 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
14450 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
14460 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
14470 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
14480 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
14490 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
144a0 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
144b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
144c0 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
144d0 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
144e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
144f0 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
14500 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
14510 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
14520 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14530 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
14540 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
14550 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
14560 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
14570 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
14580 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
14590 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20   int nZero;     
145a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
145b0 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
145c0 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
145d0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
145e0 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
145f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14600 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
14610 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
14620 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
14630 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
14640 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
14650 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
14660 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
14670 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
14680 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
14690 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
146a0 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
146b0 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
146c0 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
146d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
146e0 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
146f0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
14700 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
14710 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
14720 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
14730 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
14740 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
14750 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
14760 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
14770 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
14780 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
14790 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
147a0 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
147b0 52 65 63 6f 72 64 5b 5d 20 2a 2f 0a 20 20 69 6e  Record[] */.  in
147c0 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  t len;          
147d0 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
147e0 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20  f a field */..  
147f0 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20  /* Assuming the 
14800 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20  record contains 
14810 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65  N fields, the re
14820 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b  cord format look
14830 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73  s.  ** like this
14840 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d  :.  **.  ** ----
14850 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14860 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14870 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14880 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14890 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d  ----.  ** | hdr-
148a0 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20  size | type 0 | 
148b0 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74  type 1 | ... | t
148c0 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20  ype N-1 | data0 
148d0 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31  | ... | data N-1
148e0 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d   | .  ** -------
148f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14900 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14910 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14920 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14930 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61  -.  **.  ** Data
14940 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f  (0) is taken fro
14950 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  m register P1.  
14960 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72  Data(1) comes fr
14970 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b 31  om register P1+1
14980 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72 6f  .  ** and so fro
14990 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61  th..  **.  ** Ea
149a0 63 68 20 74 79 70 65 20 66 69 65 6c 64 20 69 73  ch type field is
149b0 20 61 20 76 61 72 69 6e 74 20 72 65 70 72 65 73   a varint repres
149c0 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69 61  enting the seria
149d0 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20  l type of the . 
149e0 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e   ** correspondin
149f0 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28  g data element (
14a00 73 65 65 20 73 71 6c 69 74 65 33 56 64 62 65 53  see sqlite3VdbeS
14a10 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68  erialType()). Th
14a20 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20  e.  ** hdr-size 
14a30 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20  field is also a 
14a40 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20  varint which is 
14a50 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20  the offset from 
14a60 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20  the beginning.  
14a70 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
14a80 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a   to data0..  */.
14a90 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20    nData = 0;    
14aa0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14ab0 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
14ac0 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20  space */.  nHdr 
14ad0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
14ae0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
14af0 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65   of header space
14b00 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b   */.  nZero = 0;
14b10 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14b20 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73  er of zero bytes
14b30 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
14b40 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e  he record */.  n
14b50 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b  Field = pOp->p1;
14b60 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70  .  zAffinity = p
14b70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65  Op->p4.z;.  asse
14b80 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20  rt( nField>0 && 
14b90 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
14ba0 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d  ->p2+nField<=(p-
14bb0 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
14bc0 29 2b 31 20 29 3b 0a 20 20 70 44 61 74 61 30 20  )+1 );.  pData0 
14bd0 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b  = &aMem[nField];
14be0 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d  .  nField = pOp-
14bf0 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26  >p2;.  pLast = &
14c00 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d  pData0[nField-1]
14c10 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ;.  file_format 
14c20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c  = p->minWriteFil
14c30 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49  eFormat;..  /* I
14c40 64 65 6e 74 69 66 79 20 74 68 65 20 6f 75 74 70  dentify the outp
14c50 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 20  ut register */. 
14c60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
14c70 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d  <pOp->p1 || pOp-
14c80 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70  >p3>=pOp->p1+pOp
14c90 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d  ->p2 );.  pOut =
14ca0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
14cb0 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
14cc0 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20  nge(p, pOut);.. 
14cd0 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68   /* Loop through
14ce0 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68   the elements th
14cf0 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20  at will make up 
14d00 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69  the record to fi
14d10 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f  gure.  ** out ho
14d20 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20  w much space is 
14d30 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65  required for the
14d40 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a   new record..  *
14d50 2f 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61  /.  for(pRec=pDa
14d60 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74  ta0; pRec<=pLast
14d70 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61  ; pRec++){.    a
14d80 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
14d90 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20 69  d(pRec) );.    i
14da0 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a  f( zAffinity ){.
14db0 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e        applyAffin
14dc0 69 74 79 28 70 52 65 63 2c 20 7a 41 66 66 69 6e  ity(pRec, zAffin
14dd0 69 74 79 5b 70 52 65 63 2d 70 44 61 74 61 30 5d  ity[pRec-pData0]
14de0 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
14df0 20 7d 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d   }.    if( pRec-
14e00 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 20  >flags&MEM_Zero 
14e10 26 26 20 70 52 65 63 2d 3e 6e 3e 30 20 29 7b 0a  && pRec->n>0 ){.
14e20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
14e30 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70  eMemExpandBlob(p
14e40 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Rec);.    }.    
14e50 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71  serial_type = sq
14e60 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
14e70 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66  ype(pRec, file_f
14e80 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65 6e 20  ormat);.    len 
14e90 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
14ea0 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72 69 61  ialTypeLen(seria
14eb0 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 6e 44 61  l_type);.    nDa
14ec0 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 6e  ta += len;.    n
14ed0 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 56 61  Hdr += sqlite3Va
14ee0 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74  rintLen(serial_t
14ef0 79 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70 52  ype);.    if( pR
14f00 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
14f10 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 2f 2a  Zero ){.      /*
14f20 20 4f 6e 6c 79 20 70 75 72 65 20 7a 65 72 6f 2d   Only pure zero-
14f30 66 69 6c 6c 65 64 20 42 4c 4f 42 73 20 63 61 6e  filled BLOBs can
14f40 20 62 65 20 69 6e 70 75 74 20 74 6f 20 74 68 69   be input to thi
14f50 73 20 4f 70 63 6f 64 65 2e 0a 20 20 20 20 20 20  s Opcode..      
14f60 2a 2a 20 57 65 20 64 6f 20 6e 6f 74 20 61 6c 6c  ** We do not all
14f70 6f 77 20 62 6c 6f 62 73 20 77 69 74 68 20 61 20  ow blobs with a 
14f80 70 72 65 66 69 78 20 61 6e 64 20 61 20 7a 65 72  prefix and a zer
14f90 6f 2d 66 69 6c 6c 65 64 20 74 61 69 6c 2e 20 2a  o-filled tail. *
14fa0 2f 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d  /.      nZero +=
14fb0 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a   pRec->u.nZero;.
14fc0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6c 65      }else if( le
14fd0 6e 20 29 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f  n ){.      nZero
14fe0 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 0;.    }.  }.
14ff0 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20 69 6e  .  /* Add the in
15000 69 74 69 61 6c 20 68 65 61 64 65 72 20 76 61 72  itial header var
15010 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20 74 68  int and total th
15020 65 20 73 69 7a 65 20 2a 2f 0a 20 20 6e 48 64 72  e size */.  nHdr
15030 20 2b 3d 20 6e 56 61 72 69 6e 74 20 3d 20 73 71   += nVarint = sq
15040 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e  lite3VarintLen(n
15050 48 64 72 29 3b 0a 20 20 69 66 28 20 6e 56 61 72  Hdr);.  if( nVar
15060 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e  int<sqlite3Varin
15070 74 4c 65 6e 28 6e 48 64 72 29 20 29 7b 0a 20 20  tLen(nHdr) ){.  
15080 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20    nHdr++;.  }.  
15090 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61  nByte = nHdr+nDa
150a0 74 61 2d 6e 5a 65 72 6f 3b 0a 20 20 69 66 28 20  ta-nZero;.  if( 
150b0 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  nByte>db->aLimit
150c0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
150d0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
150e0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a  o too_big;.  }..
150f0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
15100 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
15110 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20  er has a buffer 
15120 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
15130 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20  store .  ** the 
15140 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20  new record. The 
15150 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
15160 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74  (pOp->p3) is not
15170 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a   allowed to.  **
15180 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69   be one of the i
15190 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28  nput registers (
151a0 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c  because the foll
151b0 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20  owing call to.  
151c0 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
151d0 6d 47 72 6f 77 28 29 20 63 6f 75 6c 64 20 63 6c  mGrow() could cl
151e0 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65 20  obber the value 
151f0 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73 65  before it is use
15200 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73  d)..  */.  if( s
15210 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
15220 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79  w(pOut, (int)nBy
15230 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f  te, 0) ){.    go
15240 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
15250 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75   zNewRecord = (u
15260 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20  8 *)pOut->z;..  
15270 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63  /* Write the rec
15280 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74  ord */.  i = put
15290 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63  Varint32(zNewRec
152a0 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f  ord, nHdr);.  fo
152b0 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70  r(pRec=pData0; p
152c0 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63  Rec<=pLast; pRec
152d0 2b 2b 29 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f  ++){.    serial_
152e0 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
152f0 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
15300 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b  c, file_format);
15310 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72  .    i += putVar
15320 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72  int32(&zNewRecor
15330 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70  d[i], serial_typ
15340 65 29 3b 20 20 20 20 20 20 2f 2a 20 73 65 72 69  e);      /* seri
15350 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20  al type */.  }. 
15360 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30   for(pRec=pData0
15370 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70  ; pRec<=pLast; p
15380 52 65 63 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69  Rec++){  /* seri
15390 61 6c 20 64 61 74 61 20 2a 2f 0a 20 20 20 20 69  al data */.    i
153a0 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53   += sqlite3VdbeS
153b0 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65  erialPut(&zNewRe
153c0 63 6f 72 64 5b 69 5d 2c 20 28 69 6e 74 29 28 6e  cord[i], (int)(n
153d0 42 79 74 65 2d 69 29 2c 20 70 52 65 63 2c 66 69  Byte-i), pRec,fi
153e0 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a  le_format);.  }.
153f0 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 42 79    assert( i==nBy
15400 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28  te );..  assert(
15410 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
15420 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
15430 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
15440 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
15450 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66  nByte;.  pOut->f
15460 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20  lags = MEM_Blob 
15470 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75  | MEM_Dyn;.  pOu
15480 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69  t->xDel = 0;.  i
15490 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20  f( nZero ){.    
154a0 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20  pOut->u.nZero = 
154b0 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d  nZero;.    pOut-
154c0 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65  >flags |= MEM_Ze
154d0 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  ro;.  }.  pOut->
154e0 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
154f0 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
15500 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
15510 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78  converted to tex
15520 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f  t */.  REGISTER_
15530 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
15540 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
15550 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
15560 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
15570 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20  * Opcode: Count 
15580 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
15590 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63  ynopsis: r[P2]=c
155a0 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f  ount().**.** Sto
155b0 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  re the number of
155c0 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74   entries (an int
155d0 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74  eger value) in t
155e0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
155f0 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20  x .** opened by 
15600 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67  cursor P1 in reg
15610 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e  ister P2.*/.#ifn
15620 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
15630 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20  BTREECOUNT.case 
15640 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20  OP_Count: {     
15650 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
15660 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20  elease */.  i64 
15670 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73  nEntry;.  BtCurs
15680 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 70 43  or *pCrsr;..  pC
15690 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  rsr = p->apCsr[p
156a0 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75 72 73 6f 72  Op->p1]->pCursor
156b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
156c0 72 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  r );.  rc = sqli
156d0 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43  te3BtreeCount(pC
156e0 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20  rsr, &nEntry);. 
156f0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e   pOut->u.i = nEn
15700 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  try;.  break;.}.
15710 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
15720 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20  e: Savepoint P1 
15730 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f  * * P4 *.**.** O
15740 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20  pen, release or 
15750 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76  rollback the sav
15760 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20  epoint named by 
15770 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65  parameter P4, de
15780 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68  pending.** on th
15790 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54  e value of P1. T
157a0 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76  o open a new sav
157b0 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54  epoint, P1==0. T
157c0 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
157d0 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e  t) an.** existin
157e0 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d  g savepoint, P1=
157f0 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61  =1, or to rollba
15800 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73  ck an existing s
15810 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a  avepoint P1==2..
15820 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70  */.case OP_Savep
15830 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31  oint: {.  int p1
15840 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15850 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
15860 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64  ue of P1 operand
15870 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d   */.  char *zNam
15880 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
15890 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
158a0 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20   savepoint */.  
158b0 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76  int nName;.  Sav
158c0 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20  epoint *pNew;.  
158d0 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
158e0 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69  point;.  Savepoi
158f0 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20  nt *pTmp;.  int 
15900 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e  iSavepoint;.  in
15910 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f  t ii;..  p1 = pO
15920 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d  p->p1;.  zName =
15930 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f   pOp->p4.z;..  /
15940 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
15950 65 20 70 31 20 70 61 72 61 6d 65 74 65 72 20 69  e p1 parameter i
15960 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68  s valid. Also th
15970 61 74 20 69 66 20 74 68 65 72 65 20 69 73 20 6e  at if there is n
15980 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e  o open.  ** tran
15990 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  saction, then th
159a0 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e  ere cannot be an
159b0 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20  y savepoints. . 
159c0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62   */.  assert( db
159d0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ->pSavepoint==0 
159e0 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  || db->autoCommi
159f0 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
15a00 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
15a10 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50  BEGIN||p1==SAVEP
15a20 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31  OINT_RELEASE||p1
15a30 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
15a40 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74  BACK );.  assert
15a50 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
15a60 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61   || db->isTransa
15a70 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d  ctionSavepoint==
15a80 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63  0 );.  assert( c
15a90 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75  heckSavepointCou
15aa0 6e 74 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65  nt(db) );.  asse
15ab0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
15ac0 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53   );..  if( p1==S
15ad0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29  AVEPOINT_BEGIN )
15ae0 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56  {.    if( db->nV
15af0 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20  dbeWrite>0 ){.  
15b00 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76      /* A new sav
15b10 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65  epoint cannot be
15b20 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72   created if ther
15b30 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
15b40 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61  te .      ** sta
15b50 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70  tements (i.e. op
15b60 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e  en read/write in
15b70 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68  cremental blob h
15b80 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a  andles)..      *
15b90 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  /.      sqlite3S
15ba0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
15bb0 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f  rMsg, db, "canno
15bc0 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74  t open savepoint
15bd0 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
15be0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
15bf0 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
15c00 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
15c10 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  SY;.    }else{. 
15c20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c       nName = sql
15c30 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61  ite3Strlen30(zNa
15c40 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  me);..#ifndef SQ
15c50 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
15c60 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20  LTABLE.      /* 
15c70 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20  This call is Ok 
15c80 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76  even if this sav
15c90 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c  epoint is actual
15ca0 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ly a transaction
15cb0 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
15cc0 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f  int (and therefo
15cd0 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72  re should not pr
15ce0 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28  ompt xSavepoint(
15cf0 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20  )) callbacks..  
15d00 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69      ** If this i
15d10 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
15d20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
15d30 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75  opened, it is gu
15d40 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a  aranteed.      *
15d50 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61  * that the db->a
15d60 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69  VTrans[] array i
15d70 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20  s empty.  */.   
15d80 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
15d90 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
15da0 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29  db->nVTrans==0 )
15db0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
15dc0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
15dd0 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f  t(db, SAVEPOINT_
15de0 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20  BEGIN,.         
15df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e00 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
15e10 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70  ement+db->nSavep
15e20 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28  oint);.      if(
15e30 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
15e40 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
15e50 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
15e60 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74  ..      /* Creat
15e70 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  e a new savepoin
15e80 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a  t structure. */.
15e90 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c        pNew = sql
15ea0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
15eb0 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70  db, sizeof(Savep
15ec0 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a  oint)+nName+1);.
15ed0 20 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29        if( pNew )
15ee0 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  {.        pNew->
15ef0 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29  zName = (char *)
15f00 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20  &pNew[1];.      
15f10 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a    memcpy(pNew->z
15f20 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61  Name, zName, nNa
15f30 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20  me+1);.    .    
15f40 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
15f50 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73  is no open trans
15f60 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72  action, then mar
15f70 6b 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63  k this as a spec
15f80 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22  ial.        ** "
15f90 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
15fa0 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20  point". */.     
15fb0 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
15fc0 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20  ommit ){.       
15fd0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
15fe0 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
15ff0 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
16000 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b  onSavepoint = 1;
16010 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
16020 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
16030 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
16040 20 20 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 20      }.    .     
16050 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e     /* Link the n
16060 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74  ew savepoint int
16070 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
16080 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f  andle's list. */
16090 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70  .        pNew->p
160a0 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  Next = db->pSave
160b0 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
160c0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
160d0 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e  pNew;.        pN
160e0 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  ew->nDeferredCon
160f0 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
16100 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70  dCons;.        p
16110 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d  New->nDeferredIm
16120 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  mCons = db->nDef
16130 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
16140 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
16150 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f  lse{.    iSavepo
16160 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a  int = 0;..    /*
16170 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20   Find the named 
16180 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68  savepoint. If th
16190 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73  ere is no such s
161a0 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61  avepoint, then a
161b0 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f  n.    ** an erro
161c0 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f  r is returned to
161d0 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20   the user.  */. 
161e0 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53     for(.      pS
161f0 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70  avepoint = db->p
16200 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20  Savepoint; .    
16210 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20    pSavepoint && 
16220 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70  sqlite3StrICmp(p
16230 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65  Savepoint->zName
16240 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  , zName);.      
16250 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61  pSavepoint = pSa
16260 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20  vepoint->pNext. 
16270 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76     ){.      iSav
16280 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a  epoint++;.    }.
16290 20 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f      if( !pSavepo
162a0 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  int ){.      sql
162b0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
162c0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
162d0 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e  no such savepoin
162e0 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a  t: %s", zName);.
162f0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
16300 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c  E_ERROR;.    }el
16310 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65  se if( db->nVdbe
16320 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53  Write>0 && p1==S
16330 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
16340 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20   ){.      /* It 
16350 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20  is not possible 
16360 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d  to release (comm
16370 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20  it) a savepoint 
16380 69 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20  if there are .  
16390 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72      ** active wr
163a0 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ite statements..
163b0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
163c0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
163d0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
163e0 20 0a 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f   .        "canno
163f0 74 20 72 65 6c 65 61 73 65 20 73 61 76 65 70 6f  t release savepo
16400 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d  int - SQL statem
16410 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
16420 22 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ".      );.     
16430 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
16440 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20  Y;.    }else{.. 
16450 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e       /* Determin
16460 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
16470 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73   this is a trans
16480 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
16490 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a  . If so,.      *
164a0 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20  * and this is a 
164b0 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c  RELEASE command,
164c0 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e   then the curren
164d0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20  t transaction . 
164e0 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69       ** is commi
164f0 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a  tted. .      */.
16500 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e        int isTran
16510 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70  saction = pSavep
16520 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26  oint->pNext==0 &
16530 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  & db->isTransact
16540 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ionSavepoint;.  
16550 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73 61      if( isTransa
16560 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56  ction && p1==SAV
16570 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
16580 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 72  {.        if( (r
16590 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
165a0 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53  heckFk(p, 1))!=S
165b0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
165c0 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
165d0 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
165e0 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  }.        db->au
165f0 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
16600 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
16610 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51  3VdbeHalt(p)==SQ
16620 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
16630 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70         p->pc = p
16640 63 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  c;.          db-
16650 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b  >autoCommit = 0;
16660 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63  .          p->rc
16670 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
16680 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67  USY;.          g
16690 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
166a0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
166b0 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
166c0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
166d0 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  0;.        rc = 
166e0 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c  p->rc;.      }el
166f0 73 65 7b 0a 20 20 20 20 20 20 20 20 69 53 61 76  se{.        iSav
16700 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  epoint = db->nSa
16710 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70  vepoint - iSavep
16720 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20  oint - 1;.      
16730 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
16740 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a  INT_ROLLBACK ){.
16750 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 69            for(ii
16760 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =0; ii<db->nDb; 
16770 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
16780 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 54     sqlite3BtreeT
16790 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62  ripAllCursors(db
167a0 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 53  ->aDb[ii].pBt, S
167b0 51 4c 49 54 45 5f 41 42 4f 52 54 29 3b 0a 20 20  QLITE_ABORT);.  
167c0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
167d0 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28    }.        for(
167e0 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=0; ii<db->nDb
167f0 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
16800 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
16810 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62  treeSavepoint(db
16820 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70  ->aDb[ii].pBt, p
16830 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a  1, iSavepoint);.
16840 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
16850 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
16860 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20             goto 
16870 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
16880 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  or;.          }.
16890 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
168a0 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
168b0 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20  INT_ROLLBACK && 
168c0 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54  (db->flags&SQLIT
168d0 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29  E_InternChanges)
168e0 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
168f0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
16900 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
16910 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  (db);.          
16920 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
16930 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
16940 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20  on(db);.        
16950 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64    db->flags = (d
16960 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54  b->flags | SQLIT
16970 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29  E_InternChanges)
16980 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
16990 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
169a0 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  Regardless of wh
169b0 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20  ether this is a 
169c0 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42  RELEASE or ROLLB
169d0 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c  ACK, destroy all
169e0 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70   .      ** savep
169f0 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73  oints nested ins
16a00 69 64 65 20 6f 66 20 74 68 65 20 73 61 76 65 70  ide of the savep
16a10 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61  oint being opera
16a20 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20  ted on. */.     
16a30 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76   while( db->pSav
16a40 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69  epoint!=pSavepoi
16a50 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54  nt ){.        pT
16a60 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f  mp = db->pSavepo
16a70 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  int;.        db-
16a80 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54  >pSavepoint = pT
16a90 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20  mp->pNext;.     
16aa0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
16ab0 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20  (db, pTmp);.    
16ac0 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
16ad0 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  nt--;.      }.. 
16ae0 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73       /* If it is
16af0 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e   a RELEASE, then
16b00 20 64 65 73 74 72 6f 79 20 74 68 65 20 73 61 76   destroy the sav
16b10 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
16b20 72 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20  rated on .      
16b30 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73  ** too. If it is
16b40 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20   a ROLLBACK TO, 
16b50 74 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d  then set the num
16b60 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
16b70 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72  .      ** constr
16b80 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20  aint violations 
16b90 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
16ba0 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 76  atabase to the v
16bb0 61 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20  alue stored.    
16bc0 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61    ** when the sa
16bd0 76 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61  vepoint was crea
16be0 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69  ted.  */.      i
16bf0 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
16c00 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
16c10 20 20 20 20 61 73 73 65 72 74 28 20 70 53 61 76      assert( pSav
16c20 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76  epoint==db->pSav
16c30 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20  epoint );.      
16c40 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
16c50 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
16c60 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71  Next;.        sq
16c70 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
16c80 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  pSavepoint);.   
16c90 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e       if( !isTran
16ca0 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20  saction ){.     
16cb0 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
16cc0 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d  int--;.        }
16cd0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
16ce0 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72        db->nDefer
16cf0 72 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70  redCons = pSavep
16d00 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43  oint->nDeferredC
16d10 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  ons;.        db-
16d20 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
16d30 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  s = pSavepoint->
16d40 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
16d50 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
16d60 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74   if( !isTransact
16d70 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ion ){.        r
16d80 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
16d90 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c  avepoint(db, p1,
16da0 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   iSavepoint);.  
16db0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
16dc0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
16dd0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
16de0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  r;.      }.    }
16df0 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  .  }..  break;.}
16e00 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74  ../* Opcode: Aut
16e10 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20  oCommit P1 P2 * 
16e20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  * *.**.** Set th
16e30 65 20 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d  e database auto-
16e40 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50  commit flag to P
16e50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50  1 (1 or 0). If P
16e60 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a  2 is true, roll.
16e70 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72  ** back any curr
16e80 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74 72  ently active btr
16e90 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  ee transactions.
16ea0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e   If there are an
16eb0 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20  y active.** VMs 
16ec0 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73  (apart from this
16ed0 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f   one), then a RO
16ee0 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41  LLBACK fails.  A
16ef0 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66   COMMIT fails if
16f00 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61 63  .** there are ac
16f10 74 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73  tive writing VMs
16f20 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20 74   or active VMs t
16f30 68 61 74 20 75 73 65 20 73 68 61 72 65 64 20 63  hat use shared c
16f40 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ache..**.** This
16f50 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75   instruction cau
16f60 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61  ses the VM to ha
16f70 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  lt..*/.case OP_A
16f80 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69  utoCommit: {.  i
16f90 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  nt desiredAutoCo
16fa0 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c  mmit;.  int iRol
16fb0 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72  lback;.  int tur
16fc0 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65  nOnAC;..  desire
16fd0 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f  dAutoCommit = pO
16fe0 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61  p->p1;.  iRollba
16ff0 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ck = pOp->p2;.  
17000 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72  turnOnAC = desir
17010 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20  edAutoCommit && 
17020 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b  !db->autoCommit;
17030 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
17040 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
17050 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  || desiredAutoCo
17060 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  mmit==0 );.  ass
17070 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
17080 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f  Commit==1 || iRo
17090 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61  llback==0 );.  a
170a0 73 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65  ssert( db->nVdbe
170b0 41 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20  Active>0 );  /* 
170c0 41 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e  At least this on
170d0 65 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a  e VM is active *
170e0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  /.  assert( p->b
170f0 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 23 69 66  IsReader );..#if
17100 20 30 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41   0.  if( turnOnA
17110 43 20 26 26 20 69 52 6f 6c 6c 62 61 63 6b 20 26  C && iRollback &
17120 26 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76  & db->nVdbeActiv
17130 65 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  e>1 ){.    /* If
17140 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
17150 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52  n implements a R
17160 4f 4c 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68 65  OLLBACK and othe
17170 72 20 56 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a  r VMs are.    **
17180 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20   still running, 
17190 61 6e 64 20 61 20 74 72 61 6e 73 61 63 74 69 6f  and a transactio
171a0 6e 20 69 73 20 61 63 74 69 76 65 2c 20 72 65 74  n is active, ret
171b0 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64  urn an error ind
171c0 69 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74  icating.    ** t
171d0 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d  hat the other VM
171e0 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20  s must complete 
171f0 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20  first. .    */. 
17200 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
17210 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
17220 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c   db, "cannot rol
17230 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f  lback transactio
17240 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53  n - ".        "S
17250 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
17260 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
17270 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
17280 59 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69  Y;.  }else.#endi
17290 66 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43  f.  if( turnOnAC
172a0 20 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26   && !iRollback &
172b0 26 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65  & db->nVdbeWrite
172c0 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  >0 ){.    /* If 
172d0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
172e0 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f   implements a CO
172f0 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56  MMIT and other V
17300 4d 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20  Ms are writing. 
17310 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20     ** return an 
17320 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67  error indicating
17330 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20   that the other 
17340 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74  VMs must complet
17350 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f  e first. .    */
17360 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
17370 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
17380 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63  g, db, "cannot c
17390 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f  ommit transactio
173a0 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53  n - ".        "S
173b0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
173c0 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
173d0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
173e0 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64  Y;.  }else if( d
173f0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
17400 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  !=db->autoCommit
17410 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c   ){.    if( iRol
17420 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61  lback ){.      a
17430 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
17440 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20  toCommit==1 );. 
17450 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c       sqlite3Roll
17460 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49  backAll(db, SQLI
17470 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43  TE_ABORT_ROLLBAC
17480 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  K);.      db->au
17490 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
174a0 20 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20    }else if( (rc 
174b0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
174c0 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c  ckFk(p, 1))!=SQL
174d0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
174e0 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
174f0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
17500 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
17510 74 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41  t = (u8)desiredA
17520 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20  utoCommit;.     
17530 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
17540 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
17550 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
17560 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
17570 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
17580 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69  it = (u8)(1-desi
17590 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a  redAutoCommit);.
175a0 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
175b0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
175c0 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76  ;.        goto v
175d0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
175e0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73    }.    }.    as
175f0 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65  sert( db->nState
17600 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73  ment==0 );.    s
17610 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
17620 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69  oints(db);.    i
17630 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  f( p->rc==SQLITE
17640 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20  _OK ){.      rc 
17650 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  = SQLITE_DONE;. 
17660 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
17670 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
17680 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74  R;.    }.    got
17690 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
176a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
176b0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
176c0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20  >zErrMsg, db,.  
176d0 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41        (!desiredA
176e0 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e  utoCommit)?"cann
176f0 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73  ot start a trans
17700 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20  action within a 
17710 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20  transaction":(. 
17720 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63         (iRollbac
17730 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62  k)?"cannot rollb
17740 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  ack - no transac
17750 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a  tion is active":
17760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17770 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d      "cannot comm
17780 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  it - no transact
17790 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29  ion is active"))
177a0 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20  ;.         .    
177b0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
177c0 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  R;.  }.  break;.
177d0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72  }../* Opcode: Tr
177e0 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20  ansaction P1 P2 
177f0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69  * * *.**.** Begi
17800 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  n a transaction.
17810 20 20 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f    The transactio
17820 6e 20 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f  n ends when a Co
17830 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b  mmit or Rollback
17840 0a 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e  .** opcode is en
17850 63 6f 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65  countered.  Depe
17860 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20  nding on the ON 
17870 43 4f 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67  CONFLICT setting
17880 2c 20 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63  , the.** transac
17890 74 69 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20  tion might also 
178a0 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69  be rolled back i
178b0 66 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e  f an error is en
178c0 63 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a  countered..**.**
178d0 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
178e0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
178f0 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74   file on which t
17900 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
17910 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49  s.** started.  I
17920 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61  ndex 0 is the ma
17930 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
17940 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20   and index 1 is 
17950 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64  the.** file used
17960 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74   for temporary t
17970 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20  ables.  Indices 
17980 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65  of 2 or more are
17990 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74   used for.** att
179a0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
179b0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  .**.** If P2 is 
179c0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61  non-zero, then a
179d0 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
179e0 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20 20  on is started.  
179f0 41 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20  A RESERVED lock 
17a00 69 73 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f  is.** obtained o
17a10 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
17a20 69 6c 65 20 77 68 65 6e 20 61 20 77 72 69 74 65  ile when a write
17a30 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
17a40 73 74 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20  started.  No.** 
17a50 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 63 61  other process ca
17a60 6e 20 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20  n start another 
17a70 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
17a80 6e 20 77 68 69 6c 65 20 74 68 69 73 20 74 72 61  n while this tra
17a90 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75  nsaction is.** u
17aa0 6e 64 65 72 77 61 79 2e 20 20 53 74 61 72 74 69  nderway.  Starti
17ab0 6e 67 20 61 20 77 72 69 74 65 20 74 72 61 6e 73  ng a write trans
17ac0 61 63 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61  action also crea
17ad0 74 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a  tes a rollback j
17ae0 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69  ournal. A.** wri
17af0 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  te transaction m
17b00 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62  ust be started b
17b10 65 66 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65  efore any change
17b20 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f  s can be made to
17b30 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
17b40 2e 20 20 49 66 20 50 32 20 69 73 20 67 72 65 61  .  If P2 is grea
17b50 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
17b60 6c 20 74 6f 20 32 20 74 68 65 6e 20 61 6e 20 45  l to 2 then an E
17b70 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69 73  XCLUSIVE lock is
17b80 0a 2a 2a 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65  .** also obtaine
17b90 64 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a  d on the file..*
17ba0 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d  *.** If a write-
17bb0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
17bc0 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20 56  tarted and the V
17bd0 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72  dbe.usesStmtJour
17be0 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74  nal flag is.** t
17bf0 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20 69  rue (this flag i
17c00 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64 62  s set if the Vdb
17c10 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72  e may modify mor
17c20 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61  e than one row a
17c30 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20  nd may.** throw 
17c40 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
17c50 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  on), a statement
17c60 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
17c70 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e   also be opened.
17c80 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69  .** More specifi
17c90 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65  cally, a stateme
17ca0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt transaction i
17cb0 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65  s opened iff the
17cc0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
17cd0 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65  nection is curre
17ce0 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f  ntly not in auto
17cf0 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20  commit mode, or 
17d00 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74 68  if there are oth
17d10 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61  er.** active sta
17d20 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65  tements. A state
17d30 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
17d40 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e   allows the chan
17d50 67 65 73 20 6d 61 64 65 20 62 79 20 74 68 69 73  ges made by this
17d60 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72  .** VDBE to be r
17d70 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72  olled back after
17d80 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75   an error withou
17d90 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c  t having to roll
17da0 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74   back the.** ent
17db0 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ire transaction.
17dc0 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20   If no error is 
17dd0 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65  encountered, the
17de0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
17df0 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61  action.** will a
17e00 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d  utomatically com
17e10 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44 42  mit when the VDB
17e20 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49  E halts..**.** I
17e30 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68  f P2 is zero, th
17e40 65 6e 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 69  en a read-lock i
17e50 73 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68  s obtained on th
17e60 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
17e70 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e  .*/.case OP_Tran
17e80 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72  saction: {.  Btr
17e90 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65  ee *pBt;..  asse
17ea0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
17eb0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
17ec0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20  >readOnly==0 || 
17ed0 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20  pOp->p2==0 );.  
17ee0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
17ef0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
17f00 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
17f10 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
17f20 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
17f30 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29  <<pOp->p1))!=0 )
17f40 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20  ;.  if( pOp->p2 
17f50 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  && (db->flags & 
17f60 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
17f70 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  )!=0 ){.    rc =
17f80 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59   SQLITE_READONLY
17f90 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
17fa0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
17fb0 20 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61   }.  pBt = db->a
17fc0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
17fd0 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20  ..  if( pBt ){. 
17fe0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
17ff0 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
18000 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  Bt, pOp->p2);.  
18010 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
18020 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70  _BUSY ){.      p
18030 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
18040 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
18050 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
18060 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
18070 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  n;.    }.    if(
18080 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
18090 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
180a0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
180b0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
180c0 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73  pOp->p2 && p->us
180d0 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20  esStmtJournal . 
180e0 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f      && (db->auto
180f0 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
18100 3e 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20  >nVdbeRead>1) . 
18110 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65     ){.      asse
18120 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
18130 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29  IsInTrans(pBt) )
18140 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69  ;.      if( p->i
18150 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a  Statement==0 ){.
18160 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
18170 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d  db->nStatement>=
18180 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f  0 && db->nSavepo
18190 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20  int>=0 );.      
181a0 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74    db->nStatement
181b0 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e  ++; .        p->
181c0 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d  iStatement = db-
181d0 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
181e0 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20  ->nStatement;.  
181f0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20      }..      rc 
18200 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
18210 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50  epoint(db, SAVEP
18220 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69  OINT_BEGIN, p->i
18230 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20  Statement-1);.  
18240 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
18250 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
18260 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
18270 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c  eeBeginStmt(pBt,
18280 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b   p->iStatement);
18290 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
182a0 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72  /* Store the cur
182b0 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68  rent value of th
182c0 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
182d0 65 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  es deferred cons
182e0 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20  traint.      ** 
182f0 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20  counter. If the 
18300 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
18310 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62  ction needs to b
18320 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20  e rolled back,. 
18330 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75       ** the valu
18340 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65  e of this counte
18350 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65  r needs to be re
18360 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a  stored too.  */.
18370 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65        p->nStmtDe
18380 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  fCons = db->nDef
18390 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
183a0 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43   p->nStmtDefImmC
183b0 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
183c0 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20  redImmCons;.    
183d0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
183e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  ../* Opcode: Rea
183f0 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  dCookie P1 P2 P3
18400 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
18410 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33  cookie number P3
18420 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50   from database P
18430 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69  1 and write it i
18440 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
18450 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65  .** P3==1 is the
18460 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
18470 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64    P3==2 is the d
18480 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
18490 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20  ** P3==3 is the 
184a0 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
184b0 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e  r cache size, an
184c0 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
184d0 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69  =0 is.** the mai
184e0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
184f0 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
18500 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
18510 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  sed to store.** 
18520 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
18530 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75  ..**.** There mu
18540 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63  st be a read-loc
18550 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
18560 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61 6e  e (either a tran
18570 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20  saction.** must 
18580 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74 68  be started or th
18590 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f  ere must be an o
185a0 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f  pen cursor) befo
185b0 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20  re.** executing 
185c0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
185d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
185e0 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20  dCookie: {      
185f0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
18600 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
18610 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e   int iMeta;.  in
18620 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f  t iDb;.  int iCo
18630 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28  okie;..  assert(
18640 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
18650 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
18660 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f  ;.  iCookie = pO
18670 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
18680 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f   pOp->p3<SQLITE_
18690 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
186a0 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
186b0 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
186c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
186d0 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30  >aDb[iDb].pBt!=0
186e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
186f0 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
18700 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62  (yDbMask)1)<<iDb
18710 29 29 21 3d 30 20 29 3b 0a 0a 20 20 73 71 6c 69  ))!=0 );..  sqli
18720 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28  te3BtreeGetMeta(
18730 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
18740 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20  , iCookie, (u32 
18750 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75  *)&iMeta);.  pOu
18760 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a  t->u.i = iMeta;.
18770 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
18780 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65  pcode: SetCookie
18790 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
187a0 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f  .** Write the co
187b0 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
187c0 72 20 50 33 20 28 69 6e 74 65 72 70 72 65 74 65  r P3 (interprete
187d0 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29  d as an integer)
187e0 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20  .** into cookie 
187f0 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74  number P2 of dat
18800 61 62 61 73 65 20 50 31 2e 20 20 50 32 3d 3d 31  abase P1.  P2==1
18810 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76   is the schema v
18820 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d  ersion.  .** P2=
18830 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =2 is the databa
18840 73 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d 3d 33  se format. P2==3
18850 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e   is the recommen
18860 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20  ded pager cache 
18870 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  .** size, and so
18880 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
18890 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
188a0 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d  ase file and P1=
188b0 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61  =1 is the .** da
188c0 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
188d0 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72   to store tempor
188e0 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ary tables..**.*
188f0 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  * A transaction 
18900 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20  must be started 
18910 62 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67  before executing
18920 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f   this opcode..*/
18930 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b  .case OP_SetCook
18940 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69  ie: {       /* i
18950 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b  n3 */.  Db *pDb;
18960 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
18970 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45  p2<SQLITE_N_BTRE
18980 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65  E_META );.  asse
18990 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
189a0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
189b0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
189c0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
189d0 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f  ((yDbMask)1)<<pO
189e0 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
189f0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
18a00 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
18a10 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
18a20 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
18a30 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
18a40 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
18a50 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
18a60 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29  b, pOp->p1, 0) )
18a70 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
18a80 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c  [pOp->p3];.  sql
18a90 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
18aa0 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f  erify(pIn3);.  /
18ab0 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74  * See note about
18ac0 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20   index shifting 
18ad0 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  on OP_ReadCookie
18ae0 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
18af0 65 33 42 74 72 65 65 55 70 64 61 74 65 4d 65 74  e3BtreeUpdateMet
18b00 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d  a(pDb->pBt, pOp-
18b10 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e  >p2, (int)pIn3->
18b20 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  u.i);.  if( pOp-
18b30 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d  >p2==BTREE_SCHEM
18b40 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20  A_VERSION ){.   
18b50 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68   /* When the sch
18b60 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  ema cookie chang
18b70 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e  es, record the n
18b80 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e  ew cookie intern
18b90 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d  ally */.    pDb-
18ba0 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  >pSchema->schema
18bb0 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70  _cookie = (int)p
18bc0 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62  In3->u.i;.    db
18bd0 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54  ->flags |= SQLIT
18be0 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b  E_InternChanges;
18bf0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
18c00 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45  ->p2==BTREE_FILE
18c10 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f  _FORMAT ){.    /
18c20 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73  * Record changes
18c30 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72   in the file for
18c40 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e  mat */.    pDb->
18c50 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
18c60 72 6d 61 74 20 3d 20 28 75 38 29 70 49 6e 33 2d  rmat = (u8)pIn3-
18c70 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20  >u.i;.  }.  if( 
18c80 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20  pOp->p1==1 ){.  
18c90 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
18ca0 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74 61  all prepared sta
18cb0 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72  tements whenever
18cc0 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
18cd0 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61  se.    ** schema
18ce0 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69   is changed.  Ti
18cf0 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20  cket #1644 */.  
18d00 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
18d10 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
18d20 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78  s(db);.    p->ex
18d30 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  pired = 0;.  }. 
18d40 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
18d50 63 6f 64 65 3a 20 56 65 72 69 66 79 43 6f 6f 6b  code: VerifyCook
18d60 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
18d70 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20  **.** Check the 
18d80 76 61 6c 75 65 20 6f 66 20 67 6c 6f 62 61 6c 20  value of global 
18d90 64 61 74 61 62 61 73 65 20 70 61 72 61 6d 65 74  database paramet
18da0 65 72 20 6e 75 6d 62 65 72 20 30 20 28 74 68 65  er number 0 (the
18db0 0a 2a 2a 20 73 63 68 65 6d 61 20 76 65 72 73 69  .** schema versi
18dc0 6f 6e 29 20 61 6e 64 20 6d 61 6b 65 20 73 75 72  on) and make sur
18dd0 65 20 69 74 20 69 73 20 65 71 75 61 6c 20 74 6f  e it is equal to
18de0 20 50 32 20 61 6e 64 20 74 68 61 74 20 74 68 65   P2 and that the
18df0 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63  .** generation c
18e00 6f 75 6e 74 65 72 20 6f 6e 20 74 68 65 20 6c 6f  ounter on the lo
18e10 63 61 6c 20 73 63 68 65 6d 61 20 70 61 72 73 65  cal schema parse
18e20 20 65 71 75 61 6c 73 20 50 33 2e 0a 2a 2a 0a 2a   equals P3..**.*
18e30 2a 20 50 31 20 69 73 20 74 68 65 20 64 61 74 61  * P1 is the data
18e40 62 61 73 65 20 6e 75 6d 62 65 72 20 77 68 69 63  base number whic
18e50 68 20 69 73 20 30 20 66 6f 72 20 74 68 65 20 6d  h is 0 for the m
18e60 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
18e70 65 0a 2a 2a 20 61 6e 64 20 31 20 66 6f 72 20 74  e.** and 1 for t
18e80 68 65 20 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20  he file holding 
18e90 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
18ea0 20 61 6e 64 20 73 6f 6d 65 20 68 69 67 68 65 72   and some higher
18eb0 20 6e 75 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61   number.** for a
18ec0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
18ed0 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  es..**.** The co
18ee0 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74 73  okie changes its
18ef0 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20   value whenever 
18f00 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
18f10 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20  ema changes..** 
18f20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69  This operation i
18f30 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74  s used to detect
18f40 20 77 68 65 6e 20 74 68 61 74 20 74 68 65 20 63   when that the c
18f50 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65  ookie has change
18f60 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68  d.** and that th
18f70 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
18f80 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61  s needs to rerea
18f90 64 20 74 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a  d the schema..**
18fa0 0a 2a 2a 20 45 69 74 68 65 72 20 61 20 74 72 61  .** Either a tra
18fb0 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74  nsaction needs t
18fc0 6f 20 68 61 76 65 20 62 65 65 6e 20 73 74 61 72  o have been star
18fd0 74 65 64 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65  ted or an OP_Ope
18fe0 6e 20 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65  n needs.** to be
18ff0 20 65 78 65 63 75 74 65 64 20 28 74 6f 20 65 73   executed (to es
19000 74 61 62 6c 69 73 68 20 61 20 72 65 61 64 20 6c  tablish a read l
19010 6f 63 6b 29 20 62 65 66 6f 72 65 20 74 68 69 73  ock) before this
19020 20 6f 70 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e   opcode is.** in
19030 76 6f 6b 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  voked..*/.case O
19040 50 5f 56 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20  P_VerifyCookie: 
19050 7b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20  {.  int iMeta;. 
19060 20 69 6e 74 20 69 47 65 6e 3b 0a 20 20 42 74 72   int iGen;.  Btr
19070 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65  ee *pBt;..  asse
19080 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
19090 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
190a0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
190b0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
190c0 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f  ((yDbMask)1)<<pO
190d0 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
190e0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
190f0 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
19100 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29  b, pOp->p1, 0) )
19110 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ;.  assert( p->b
19120 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 70 42  IsReader );.  pB
19130 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
19140 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 69 66 28 20  >p1].pBt;.  if( 
19150 70 42 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  pBt ){.    sqlit
19160 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 70  e3BtreeGetMeta(p
19170 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41  Bt, BTREE_SCHEMA
19180 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a  _VERSION, (u32 *
19190 29 26 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47  )&iMeta);.    iG
191a0 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  en = db->aDb[pOp
191b0 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69  ->p1].pSchema->i
191c0 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65  Generation;.  }e
191d0 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20  lse{.    iGen = 
191e0 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20  iMeta = 0;.  }. 
191f0 20 69 66 28 20 69 4d 65 74 61 21 3d 70 4f 70 2d   if( iMeta!=pOp-
19200 3e 70 32 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70  >p2 || iGen!=pOp
19210 2d 3e 70 33 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p3 ){.    sqli
19220 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
19230 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70  >zErrMsg);.    p
19240 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  ->zErrMsg = sqli
19250 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20  te3DbStrDup(db, 
19260 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  "database schema
19270 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a   has changed");.
19280 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63      /* If the sc
19290 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d  hema-cookie from
192a0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
192b0 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 63  le matches the c
192c0 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74  ookie .    ** st
192d0 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69 6e  ored with the in
192e0 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e  -memory represen
192f0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  tation of the sc
19300 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20  hema, do.    ** 
19310 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73  not reload the s
19320 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64  chema from the d
19330 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
19340 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76    **.    ** If v
19350 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72  irtual-tables ar
19360 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69  e in use, this i
19370 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70  s not just an op
19380 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20  timization..    
19390 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c  ** Often, v-tabl
193a0 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20 64  es store their d
193b0 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c  ata in other SQL
193c0 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63  ite tables, whic
193d0 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65  h.    ** are que
193e0 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  ried from within
193f0 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68   xNext() and oth
19400 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f  er v-table metho
19410 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20  ds using.    ** 
19420 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65 73  prepared queries
19430 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65 72  . If such a quer
19440 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65  y is out-of-date
19450 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74  , we do not want
19460 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61   to.    ** disca
19470 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  rd the database 
19480 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75  schema, as the u
19490 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65  ser code impleme
194a0 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a  nting the.    **
194b0 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68   v-table would h
194c0 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79 20  ave to be ready 
194d0 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f  for the sqlite3_
194e0 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20 69  vtab structure i
194f0 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20  tself.    ** to 
19500 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77  be invalidated w
19510 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f  henever sqlite3_
19520 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64  step() is called
19530 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20   from within .  
19540 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d    ** a v-table m
19550 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  ethod..    */.  
19560 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f    if( db->aDb[pO
19570 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
19580 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69  schema_cookie!=i
19590 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71  Meta ){.      sq
195a0 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68  lite3ResetOneSch
195b0 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29  ema(db, pOp->p1)
195c0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 2d 3e  ;.    }..    p->
195d0 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20  expired = 1;.   
195e0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48   rc = SQLITE_SCH
195f0 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  EMA;.  }.  break
19600 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
19610 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20 50  OpenRead P1 P2 P
19620 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
19630 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
19640 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P3.**.** Open a
19650 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f   read-only curso
19660 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61  r for the databa
19670 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72  se table whose r
19680 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50  oot page is.** P
19690 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  2 in a database 
196a0 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62  file.  The datab
196b0 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74 65  ase file is dete
196c0 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a  rmined by P3. .*
196d0 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68  * P3==0 means th
196e0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
196f0 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65   P3==1 means the
19700 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66   database used f
19710 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79  or .** temporary
19720 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e   tables, and P3>
19730 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65  1 means used the
19740 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61   corresponding a
19750 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62  ttached.** datab
19760 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e  ase.  Give the n
19770 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65  ew cursor an ide
19780 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20  ntifier of P1.  
19790 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73  The P1.** values
197a0 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e   need not be con
197b0 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20  tiguous but all 
197c0 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64  P1 values should
197d0 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65   be small intege
197e0 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20  rs..** It is an 
197f0 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20  error for P1 to 
19800 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a  be negative..**.
19810 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e  ** If P5!=0 then
19820 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74   use the content
19830 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20   of register P2 
19840 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  as the root page
19850 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c  , not.** the val
19860 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e  ue of P2 itself.
19870 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c  .**.** There wil
19880 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b  l be a read lock
19890 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
198a0 20 77 68 65 6e 65 76 65 72 20 74 68 65 72 65 20   whenever there 
198b0 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75  is an.** open cu
198c0 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61  rsor.  If the da
198d0 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63  tabase was unloc
198e0 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69  ked prior to thi
198f0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  s instruction.**
19900 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63   then a read loc
19910 6b 20 69 73 20 61 63 71 75 69 72 65 64 20 61 73  k is acquired as
19920 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e   part of this in
19930 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65  struction.  A re
19940 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77  ad.** lock allow
19950 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65  s other processe
19960 73 20 74 6f 20 72 65 61 64 20 74 68 65 20 64 61  s to read the da
19970 74 61 62 61 73 65 20 62 75 74 20 70 72 6f 68 69  tabase but prohi
19980 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65  bits.** any othe
19990 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d  r process from m
199a0 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64 61 74  odifying the dat
199b0 61 62 61 73 65 2e 20 20 54 68 65 20 72 65 61 64  abase.  The read
199c0 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65   lock is.** rele
199d0 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75  ased when all cu
199e0 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64  rsors are closed
199f0 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  .  If this instr
19a00 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a  uction attempts.
19a10 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61 64  ** to get a read
19a20 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c   lock but fails,
19a30 20 74 68 65 20 73 63 72 69 70 74 20 74 65 72 6d   the script term
19a40 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a  inates with an.*
19a50 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72  * SQLITE_BUSY er
19a60 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  ror code..**.** 
19a70 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79  The P4 value may
19a80 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e   be either an in
19a90 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29  teger (P4_INT32)
19aa0 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   or a pointer to
19ab0 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74  .** a KeyInfo st
19ac0 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49  ructure (P4_KEYI
19ad0 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61  NFO). If it is a
19ae0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65   pointer to a Ke
19af0 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74  yInfo .** struct
19b00 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73  ure, then said s
19b10 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73  tructure defines
19b20 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64   the content and
19b30 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73   collating .** s
19b40 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69  equence of the i
19b50 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65  ndex being opene
19b60 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  d. Otherwise, if
19b70 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P4 is an intege
19b80 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20  r .** value, it 
19b90 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
19ba0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
19bb0 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a  in the table..**
19bc0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65  .** See also Ope
19bd0 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70  nWrite..*/./* Op
19be0 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20  code: OpenWrite 
19bf0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
19c00 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
19c10 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
19c20 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69   Open a read/wri
19c30 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20  te cursor named 
19c40 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20  P1 on the table 
19c50 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
19c60 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50  oot.** page is P
19c70 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20  2.  Or if P5!=0 
19c80 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  use the content 
19c90 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74  of register P2 t
19ca0 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f  o find the.** ro
19cb0 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54  ot page..**.** T
19cc0 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20  he P4 value may 
19cd0 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  be either an int
19ce0 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20  eger (P4_INT32) 
19cf0 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a  or a pointer to.
19d00 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  ** a KeyInfo str
19d10 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e  ucture (P4_KEYIN
19d20 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20  FO). If it is a 
19d30 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
19d40 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75  Info .** structu
19d50 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74  re, then said st
19d60 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20  ructure defines 
19d70 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
19d80 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
19d90 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e  quence of the in
19da0 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
19db0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
19dc0 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P4 is an integer
19dd0 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69   .** value, it i
19de0 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
19df0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
19e00 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20  n the table, or 
19e10 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73  to the.** larges
19e20 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63  t index of any c
19e30 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62  olumn of the tab
19e40 6c 65 20 74 68 61 74 20 69 73 20 61 63 74 75 61  le that is actua
19e50 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  lly used..**.** 
19e60 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
19e70 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
19e80 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74   OpenRead except
19e90 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74   that it opens t
19ea0 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20  he cursor.** in 
19eb0 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e  read/write mode.
19ec0 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61    For a given ta
19ed0 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62  ble, there can b
19ee0 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65  e one or more re
19ef0 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f  ad-only.** curso
19f00 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72  rs or a single r
19f10 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
19f20 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a   but not both..*
19f30 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70  *.** See also Op
19f40 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20  enRead..*/.case 
19f50 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73  OP_OpenRead:.cas
19f60 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20  e OP_OpenWrite: 
19f70 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a  {.  int nField;.
19f80 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
19f90 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20  nfo;.  int p2;. 
19fa0 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
19fb0 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20  wrFlag;.  Btree 
19fc0 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  *pX;.  VdbeCurso
19fd0 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70  r *pCur;.  Db *p
19fe0 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 28  Db;..  assert( (
19ff0 70 4f 70 2d 3e 70 35 26 28 4f 50 46 4c 41 47 5f  pOp->p5&(OPFLAG_
1a000 50 32 49 53 52 45 47 7c 4f 50 46 4c 41 47 5f 42  P2ISREG|OPFLAG_B
1a010 55 4c 4b 43 53 52 29 29 3d 3d 70 4f 70 2d 3e 70  ULKCSR))==pOp->p
1a020 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  5 );.  assert( p
1a030 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1a040 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d  penWrite || pOp-
1a050 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p5==0 );.  asse
1a060 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
1a070 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1a080 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1a090 65 6e 52 65 61 64 20 7c 7c 20 70 2d 3e 72 65 61  enRead || p->rea
1a0a0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69  dOnly==0 );..  i
1a0b0 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b  f( p->expired ){
1a0c0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
1a0d0 5f 41 42 4f 52 54 3b 0a 20 20 20 20 62 72 65 61  _ABORT;.    brea
1a0e0 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64  k;.  }..  nField
1a0f0 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f   = 0;.  pKeyInfo
1a100 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70   = 0;.  p2 = pOp
1a110 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f  ->p2;.  iDb = pO
1a120 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
1a130 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
1a140 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1a150 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
1a160 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
1a170 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20  )<<iDb))!=0 );. 
1a180 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
1a190 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62  iDb];.  pX = pDb
1a1a0 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28  ->pBt;.  assert(
1a1b0 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pX!=0 );.  if( 
1a1c0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1a1d0 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20  OpenWrite ){.   
1a1e0 20 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20   wrFlag = 1;.   
1a1f0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1a200 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
1a210 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20  db, iDb, 0) );. 
1a220 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68     if( pDb->pSch
1a230 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
1a240 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69   < p->minWriteFi
1a250 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20  leFormat ){.    
1a260 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c    p->minWriteFil
1a270 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70  eFormat = pDb->p
1a280 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
1a290 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  mat;.    }.  }el
1a2a0 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d  se{.    wrFlag =
1a2b0 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   0;.  }.  if( pO
1a2c0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50  p->p5 & OPFLAG_P
1a2d0 32 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73  2ISREG ){.    as
1a2e0 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20  sert( p2>0 );.  
1a2f0 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70    assert( p2<=(p
1a300 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
1a310 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d  r) );.    pIn2 =
1a320 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20   &aMem[p2];.    
1a330 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
1a340 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20  id(pIn2) );.    
1a350 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
1a360 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
1a370 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
1a380 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
1a390 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32  fy(pIn2);.    p2
1a3a0 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e   = (int)pIn2->u.
1a3b0 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32  i;.    /* The p2
1a3c0 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f   value always co
1a3d0 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72  mes from a prior
1a3e0 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20   OP_CreateTable 
1a3f0 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a  opcode and.    *
1a400 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69  * that opcode wi
1a410 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74 68  ll always set th
1a420 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20  e p2 value to 2 
1a430 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20  or more or else 
1a440 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20  fail..    ** If 
1a450 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61 69  there were a fai
1a460 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61 72  lure, the prepar
1a470 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75  ed statement wou
1a480 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20  ld have halted. 
1a490 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61     ** before rea
1a4a0 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  ching this instr
1a4b0 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69  uction. */.    i
1a4c0 66 28 20 4e 45 56 45 52 28 70 32 3c 32 29 20 29  f( NEVER(p2<2) )
1a4d0 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51   {.      rc = SQ
1a4e0 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
1a4f0 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  T;.      goto ab
1a500 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1a510 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
1a520 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1a530 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20  4_KEYINFO ){.   
1a540 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d   pKeyInfo = pOp-
1a550 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
1a560 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1a570 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29  fo->enc==ENC(db)
1a580 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1a590 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62  pKeyInfo->db==db
1a5a0 20 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d   );.    nField =
1a5b0 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c   pKeyInfo->nFiel
1a5c0 64 2b 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69  d+pKeyInfo->nXFi
1a5d0 65 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  eld;.  }else if(
1a5e0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1a5f0 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46  _INT32 ){.    nF
1a600 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  ield = pOp->p4.i
1a610 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
1a620 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1a630 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d  assert( nField>=
1a640 30 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  0 );.  testcase(
1a650 20 6e 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f   nField==0 );  /
1a660 2a 20 54 61 62 6c 65 20 77 69 74 68 20 49 4e 54  * Table with INT
1a670 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
1a680 20 61 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73   and nothing els
1a690 65 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c  e */.  pCur = al
1a6a0 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1a6b0 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c  pOp->p1, nField,
1a6c0 20 69 44 62 2c 20 31 29 3b 0a 20 20 69 66 28 20   iDb, 1);.  if( 
1a6d0 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  pCur==0 ) goto n
1a6e0 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e  o_mem;.  pCur->n
1a6f0 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
1a700 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20  ur->isOrdered = 
1a710 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  1;.  rc = sqlite
1a720 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c  3BtreeCursor(pX,
1a730 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65   p2, wrFlag, pKe
1a740 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75  yInfo, pCur->pCu
1a750 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70  rsor);.  pCur->p
1a760 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e  KeyInfo = pKeyIn
1a770 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50  fo;.  assert( OP
1a780 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54  FLAG_BULKCSR==BT
1a790 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a  REE_BULKLOAD );.
1a7a0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
1a7b0 72 73 6f 72 48 69 6e 74 73 28 70 43 75 72 2d 3e  rsorHints(pCur->
1a7c0 70 43 75 72 73 6f 72 2c 20 28 70 4f 70 2d 3e 70  pCursor, (pOp->p
1a7d0 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  5 & OPFLAG_BULKC
1a7e0 53 52 29 29 3b 0a 0a 20 20 2f 2a 20 53 69 6e 63  SR));..  /* Sinc
1a7f0 65 20 69 74 20 70 65 72 66 6f 72 6d 73 20 6e 6f  e it performs no
1a800 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
1a810 6f 6e 20 6f 72 20 49 4f 2c 20 74 68 65 20 6f 6e  on or IO, the on
1a820 6c 79 20 76 61 6c 75 65 20 74 68 61 74 0a 20 20  ly value that.  
1a830 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  ** sqlite3BtreeC
1a840 75 72 73 6f 72 28 29 20 6d 61 79 20 72 65 74 75  ursor() may retu
1a850 72 6e 20 69 73 20 53 51 4c 49 54 45 5f 4f 4b 2e  rn is SQLITE_OK.
1a860 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 72 63   */.  assert( rc
1a870 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a  ==SQLITE_OK );..
1a880 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64 62    /* Set the Vdb
1a890 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65 20  eCursor.isTable 
1a8a0 76 61 72 69 61 62 6c 65 2e 20 50 72 65 76 69 6f  variable. Previo
1a8b0 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20  us versions of. 
1a8c0 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20   ** SQLite used 
1a8d0 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65 20  to check if the 
1a8e0 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20  root-page flags 
1a8f0 77 65 72 65 20 73 61 6e 65 20 61 74 20 74 68 69  were sane at thi
1a900 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64  s point.  ** and
1a910 20 72 65 70 6f 72 74 20 64 61 74 61 62 61 73 65   report database
1a920 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74   corruption if t
1a930 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75  hey were not, bu
1a940 74 20 74 68 69 73 20 63 68 65 63 6b 20 68 61 73  t this check has
1a950 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65  .  ** since move
1a960 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65  d into the btree
1a970 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20   layer.  */  .  
1a980 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20  pCur->isTable = 
1a990 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f  pOp->p4type!=P4_
1a9a0 4b 45 59 49 4e 46 4f 3b 0a 20 20 62 72 65 61 6b  KEYINFO;.  break
1a9b0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1a9c0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31  OpenEphemeral P1
1a9d0 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53   P2 * P4 P5.** S
1a9e0 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e  ynopsis: nColumn
1a9f0 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P2.**.** Open a
1aa00 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74   new cursor P1 t
1aa10 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  o a transient ta
1aa20 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
1aa30 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65  or is always ope
1aa40 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65  ned read/write e
1aa50 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d  ven if .** the m
1aa60 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
1aa70 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20  read-only.  The 
1aa80 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62  ephemeral.** tab
1aa90 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75  le is deleted au
1aaa0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e  tomatically when
1aab0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
1aac0 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  losed..**.** P2 
1aad0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
1aae0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
1aaf0 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e  ephemeral table.
1ab00 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70  .** The cursor p
1ab10 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65  oints to a BTree
1ab20 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20   table if P4==0 
1ab30 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69  and to a BTree i
1ab40 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73  ndex.** if P4 is
1ab50 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69   not 0.  If P4 i
1ab60 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70  s not NULL, it p
1ab70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e  oints to a KeyIn
1ab80 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  fo structure.** 
1ab90 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
1aba0 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20   format of keys 
1abb0 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a  in the index..**
1abc0 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d  .** The P5 param
1abd0 65 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61  eter can be a ma
1abe0 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f  sk of the BTREE_
1abf0 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a  * flags defined.
1ac00 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20  ** in btree.h.  
1ac10 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74  These flags cont
1ac20 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74  rol aspects of t
1ac30 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a  he operation of.
1ac40 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20 54  ** the btree.  T
1ac50 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f  he BTREE_OMIT_JO
1ac60 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f  URNAL and BTREE_
1ac70 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65  SINGLE flags are
1ac80 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61  .** added automa
1ac90 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f  tically..*/./* O
1aca0 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69  pcode: OpenAutoi
1acb0 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20  ndex P1 P2 * P4 
1acc0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e  *.** Synopsis: n
1acd0 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20  Column=P2.**.** 
1ace0 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
1acf0 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50  s the same as OP
1ad00 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20  _OpenEphemeral. 
1ad10 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66   It has a.** dif
1ad20 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64  ferent name to d
1ad30 69 73 74 69 6e 67 75 69 73 68 20 69 74 73 20 75  istinguish its u
1ad40 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61  se.  Tables crea
1ad50 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20  ted using.** by 
1ad60 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  this opcode will
1ad70 20 62 65 20 75 73 65 64 20 66 6f 72 20 61 75 74   be used for aut
1ad80 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74  omatically creat
1ad90 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20  ed transient.** 
1ada0 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73  indices in joins
1adb0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
1adc0 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73  nAutoindex: .cas
1add0 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  e OP_OpenEphemer
1ade0 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  al: {.  VdbeCurs
1adf0 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e  or *pCx;.  KeyIn
1ae00 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20  fo *pKeyInfo;.. 
1ae10 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e   static const in
1ae20 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20  t vfsFlags = .  
1ae30 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1ae40 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20  READWRITE |.    
1ae50 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52    SQLITE_OPEN_CR
1ae60 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  EATE |.      SQL
1ae70 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49  ITE_OPEN_EXCLUSI
1ae80 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  VE |.      SQLIT
1ae90 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43  E_OPEN_DELETEONC
1aea0 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  LOSE |.      SQL
1aeb0 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45  ITE_OPEN_TRANSIE
1aec0 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65 72 74 28  NT_DB;.  assert(
1aed0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
1aee0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1aef0 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
1af00 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1af10 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
1af20 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28  2, -1, 1);.  if(
1af30 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
1af40 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75  o_mem;.  pCx->nu
1af50 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20  llRow = 1;.  rc 
1af60 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70  = sqlite3BtreeOp
1af70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20  en(db->pVfs, 0, 
1af80 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a  db, &pCx->pBt, .
1af90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afa0 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d          BTREE_OM
1afb0 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52  IT_JOURNAL | BTR
1afc0 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d  EE_SINGLE | pOp-
1afd0 3e 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a  >p5, vfsFlags);.
1afe0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1aff0 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  _OK ){.    rc = 
1b000 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
1b010 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c  nTrans(pCx->pBt,
1b020 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72   1);.  }.  if( r
1b030 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1b040 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e      /* If a tran
1b050 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72  sient index is r
1b060 65 71 75 69 72 65 64 2c 20 63 72 65 61 74 65 20  equired, create 
1b070 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20  it by calling.  
1b080 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65    ** sqlite3Btre
1b090 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77  eCreateTable() w
1b0a0 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c  ith the BTREE_BL
1b0b0 4f 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72  OBKEY flag befor
1b0c0 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67  e.    ** opening
1b0d0 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69   it. If a transi
1b0e0 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71  ent table is req
1b0f0 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20  uired, just use 
1b100 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d  the.    ** autom
1b110 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
1b120 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74   table with root
1b130 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42  -page 1 (an BLOB
1b140 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a  _INTKEY table)..
1b150 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28      */.    if( (
1b160 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1b170 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20  p4.pKeyInfo)!=0 
1b180 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e  ){.      int pgn
1b190 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  o;.      assert(
1b1a0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1b1b0 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20  _KEYINFO );.    
1b1c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1b1d0 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
1b1e0 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Cx->pBt, &pgno, 
1b1f0 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20  BTREE_BLOBKEY | 
1b200 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20  pOp->p5); .     
1b210 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1b220 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  OK ){.        as
1b230 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54  sert( pgno==MAST
1b240 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20  ER_ROOT+1 );.   
1b250 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65       assert( pKe
1b260 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1b270 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1b280 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d   pKeyInfo->enc==
1b290 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20  ENC(db) );.     
1b2a0 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f     pCx->pKeyInfo
1b2b0 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20   = pKeyInfo;.   
1b2c0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1b2d0 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
1b2e0 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20  ->pBt, pgno, 1, 
1b2f0 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 70  pKeyInfo, pCx->p
1b300 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d  Cursor);.      }
1b310 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1b320 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ble = 0;.    }el
1b330 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
1b340 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1b350 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54  r(pCx->pBt, MAST
1b360 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70  ER_ROOT, 1, 0, p
1b370 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  Cx->pCursor);.  
1b380 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1b390 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 1;.    }.  }.
1b3a0 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64    pCx->isOrdered
1b3b0 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52   = (pOp->p5!=BTR
1b3c0 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20  EE_UNORDERED);. 
1b3d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1b3e0 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e  code: SorterOpen
1b3f0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
1b400 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
1b410 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65  orks like OP_Ope
1b420 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70  nEphemeral excep
1b430 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a  t that it opens.
1b440 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69  ** a transient i
1b450 6e 64 65 78 20 74 68 61 74 20 69 73 20 73 70 65  ndex that is spe
1b460 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e  cifically design
1b470 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65  ed to sort large
1b480 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67  .** tables using
1b490 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72   an external mer
1b4a0 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68  ge-sort algorith
1b4b0 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  m..*/.case OP_So
1b4c0 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64  rterOpen: {.  Vd
1b4d0 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a  beCursor *pCx;..
1b4e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1b4f0 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1b500 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a  ( pOp->p2>=0 );.
1b510 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1b520 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1b530 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20  1, pOp->p2, -1, 
1b540 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  1);.  if( pCx==0
1b550 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1b560 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20    pCx->pKeyInfo 
1b570 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1b580 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  fo;.  assert( pC
1b590 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d  x->pKeyInfo->db=
1b5a0 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  =db );.  assert(
1b5b0 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
1b5c0 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a  enc==ENC(db) );.
1b5d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
1b5e0 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62 2c  beSorterInit(db,
1b5f0 20 70 43 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a   pCx);.  break;.
1b600 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1b610 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 50  enPseudo P1 P2 P
1b620 33 20 2a 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73  3 * P5.** Synops
1b630 69 73 3a 20 63 6f 6e 74 65 6e 74 20 69 6e 20 72  is: content in r
1b640 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4f 70  [P2@P3].**.** Op
1b650 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
1b660 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  that points to a
1b670 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74   fake table that
1b680 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67   contains a sing
1b690 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74  le.** row of dat
1b6a0 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  a.  The content 
1b6b0 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20  of that one row 
1b6c0 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  in the content o
1b6d0 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69  f memory.** regi
1b6e0 73 74 65 72 20 50 32 20 77 68 65 6e 20 50 35 3d  ster P2 when P5=
1b6f0 3d 30 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  =0.  In other wo
1b700 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62  rds, cursor P1 b
1b710 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20  ecomes an alias 
1b720 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f  for the .** MEM_
1b730 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e  Blob content con
1b740 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74  tained in regist
1b750 65 72 20 50 32 2e 20 20 57 68 65 6e 20 50 35 3d  er P2.  When P5=
1b760 3d 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  =1, then the.** 
1b770 72 6f 77 20 69 73 20 72 65 70 72 65 73 65 6e 74  row is represent
1b780 65 64 20 62 79 20 50 33 20 63 6f 6e 73 65 63 75  ed by P3 consecu
1b790 74 69 76 65 20 72 65 67 69 73 74 65 72 73 20 62  tive registers b
1b7a0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 32  eginning with P2
1b7b0 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f  ..**.** A pseudo
1b7c0 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64 20 62  -table created b
1b7d0 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
1b7e0 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20   used to hold a 
1b7f0 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75  single.** row ou
1b800 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f  tput from the so
1b810 72 74 65 72 20 73 6f 20 74 68 61 74 20 74 68 65  rter so that the
1b820 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f   row can be deco
1b830 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69  mposed into.** i
1b840 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e  ndividual column
1b850 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43  s using the OP_C
1b860 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54  olumn opcode.  T
1b870 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1b880 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e  ode.** is the on
1b890 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65  ly cursor opcode
1b8a0 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68   that works with
1b8b0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
1b8c0 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65  .**.** P3 is the
1b8d0 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   number of field
1b8e0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73  s in the records
1b8f0 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74   that will be st
1b900 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70  ored by.** the p
1b910 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
1b920 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75  case OP_OpenPseu
1b930 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  do: {.  VdbeCurs
1b940 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65  or *pCx;..  asse
1b950 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1b960 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1b970 3e 70 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p3>=0 );.  pCx 
1b980 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1b990 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1b9a0 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20  ->p3, -1, 0);.  
1b9b0 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
1b9c0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
1b9d0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1b9e0 70 43 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65  pCx->pseudoTable
1b9f0 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  Reg = pOp->p2;. 
1ba00 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1ba10 31 3b 0a 20 20 70 43 78 2d 3e 6d 75 6c 74 69 50  1;.  pCx->multiP
1ba20 73 65 75 64 6f 20 3d 20 70 4f 70 2d 3e 70 35 3b  seudo = pOp->p5;
1ba30 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1ba40 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31  Opcode: Close P1
1ba50 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
1ba60 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70 72  lose a cursor pr
1ba70 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20  eviously opened 
1ba80 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69 73  as P1.  If P1 is
1ba90 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c   not.** currentl
1baa0 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73  y open, this ins
1bab0 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f  truction is a no
1bac0 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  -op..*/.case OP_
1bad0 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72  Close: {.  asser
1bae0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1baf0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1bb00 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  sor );.  sqlite3
1bb10 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70  VdbeFreeCursor(p
1bb20 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  , p->apCsr[pOp->
1bb30 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72  p1]);.  p->apCsr
1bb40 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20  [pOp->p1] = 0;. 
1bb50 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1bb60 63 6f 64 65 3a 20 53 65 65 6b 47 65 20 50 31 20  code: SeekGe P1 
1bb70 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1bb80 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1bb90 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1bba0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1bbb0 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1bbc0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1bbd0 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1bbe0 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1bbf0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1bc00 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66   as the key.  If
1bc10 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1bc20 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1bc30 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1bc40 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1bc50 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1bc60 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1bc70 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1bc80 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1bc90 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1bca0 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1bcb0 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1bcc0 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
1bcd0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1bce0 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
1bcf0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1bd00 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1bd10 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1bd20 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72  ords .** greater
1bd30 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1bd40 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
1bd50 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1bd60 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1bd70 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1bd80 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1bd90 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74  Distinct, SeekLt
1bda0 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65  , SeekGt, SeekLe
1bdb0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
1bdc0 65 65 6b 47 74 20 50 31 20 50 32 20 50 33 20 50  eekGt P1 P2 P3 P
1bdd0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1bde0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1bdf0 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1be00 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1be10 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1be20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1be30 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1be40 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1be50 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1be60 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1be70 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1be80 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1be90 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1bea0 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1beb0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1bec0 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1bed0 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1bee0 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1bef0 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1bf00 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1bf10 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1bf20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
1bf30 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
1bf40 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
1bf50 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1bf60 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67  are no records g
1bf70 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20  reater than .** 
1bf80 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1bf90 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1bfa0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1bfb0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1bfc0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
1bfd0 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20  stinct, SeekLt, 
1bfe0 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGe, SeekLe.*
1bff0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
1c000 6b 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20  kLt P1 P2 P3 P4 
1c010 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  * .** Synopsis: 
1c020 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1c030 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1c040 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1c050 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1c060 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1c070 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1c080 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1c090 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1c0a0 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1c0b0 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1c0c0 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1c0d0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1c0e0 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1c0f0 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1c100 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1c110 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1c120 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1c130 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1c140 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1c150 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
1c160 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
1c170 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
1c180 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
1c190 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1c1a0 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74  o records less t
1c1b0 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20  han .** the key 
1c1c0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1c1d0 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1c1e0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
1c1f0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1c200 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20  ound, Distinct, 
1c210 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20  SeekGt, SeekGe, 
1c220 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1c230 6f 64 65 3a 20 53 65 65 6b 4c 65 20 50 31 20 50  ode: SeekLe P1 P
1c240 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
1c250 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1c260 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
1c270 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1c280 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1c290 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1c2a0 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1c2b0 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1c2c0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1c2d0 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
1c2e0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1c2f0 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1c300 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1c310 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1c320 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1c330 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1c340 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1c350 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1c360 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1c370 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1c380 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
1c390 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
1c3a0 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
1c3b0 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
1c3c0 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
1c3d0 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1c3e0 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20   no records .** 
1c3f0 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
1c400 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
1c410 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1c420 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1c430 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
1c440 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1c450 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65  nd, Distinct, Se
1c460 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1c470 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ekLt.*/.case OP_
1c480 53 65 65 6b 4c 74 3a 20 20 20 20 20 20 20 20 20  SeekLt:         
1c490 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1c4a0 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 65 3a 20  case OP_SeekLe: 
1c4b0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1c4c0 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1c4d0 53 65 65 6b 47 65 3a 20 20 20 20 20 20 20 20 20  SeekGe:         
1c4e0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1c4f0 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 74 3a 20  case OP_SeekGt: 
1c500 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  {       /* jump,
1c510 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65   in3 */.  int re
1c520 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56  s;.  int oc;.  V
1c530 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1c540 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
1c550 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  r;.  int nField;
1c560 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20  .  i64 iKey;    
1c570 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77    /* The rowid w
1c580 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f  e are to seek to
1c590 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
1c5a0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1c5b0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1c5c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1c5d0 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20  ->p2!=0 );.  pC 
1c5e0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1c5f0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1c600 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
1c610 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
1c620 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73  eReg==0 );.  ass
1c630 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 65 20 3d  ert( OP_SeekLe =
1c640 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 31 20 29 3b  = OP_SeekLt+1 );
1c650 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1c660 65 6b 47 65 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGe == OP_SeekL
1c670 74 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  t+2 );.  assert(
1c680 20 4f 50 5f 53 65 65 6b 47 74 20 3d 3d 20 4f 50   OP_SeekGt == OP
1c690 5f 53 65 65 6b 4c 74 2b 33 20 29 3b 0a 20 20 61  _SeekLt+3 );.  a
1c6a0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64  ssert( pC->isOrd
1c6b0 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ered );.  assert
1c6c0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
1c6d0 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e   );.  oc = pOp->
1c6e0 6f 70 63 6f 64 65 3b 0a 20 20 70 43 2d 3e 6e 75  opcode;.  pC->nu
1c6f0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 69 66 28  llRow = 0;.  if(
1c700 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a   pC->isTable ){.
1c710 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74      /* The input
1c720 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67   value in P3 mig
1c730 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70  ht be of any typ
1c740 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c  e: integer, real
1c750 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a  , string,.    **
1c760 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20   blob, or NULL. 
1c770 20 42 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f   But it needs to
1c780 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62   be an integer b
1c790 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a  efore we can do.
1c7a0 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c      ** the seek,
1c7b0 20 73 6f 20 63 6f 76 65 72 74 20 69 74 2e 20 2a   so covert it. *
1c7c0 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d  /.    pIn3 = &aM
1c7d0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
1c7e0 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
1c7f0 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20 20 20  inity(pIn3);.   
1c800 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56   iKey = sqlite3V
1c810 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33  dbeIntValue(pIn3
1c820 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  );.    pC->rowid
1c830 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20 20  IsValid = 0;..  
1c840 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76    /* If the P3 v
1c850 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62  alue could not b
1c860 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
1c870 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68   an integer with
1c880 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20  out.    ** loss 
1c890 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  of information, 
1c8a0 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f  then special pro
1c8b0 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75 69  cessing is requi
1c8c0 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66  red... */.    if
1c8d0 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1c8e0 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
1c8f0 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
1c900 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
1c910 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  l)==0 ){.       
1c920 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61   /* If the P3 va
1c930 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  lue cannot be co
1c940 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79  nverted into any
1c950 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65   kind of a numbe
1c960 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  r,.        ** th
1c970 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e  en the seek is n
1c980 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20  ot possible, so 
1c990 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
1c9a0 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1c9b0 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  p2 - 1;.        
1c9c0 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a  break;.      }..
1c9d0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1c9e0 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b  approximation iK
1c9f0 65 79 20 69 73 20 6c 61 72 67 65 72 20 74 68 61  ey is larger tha
1ca00 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61  n the actual rea
1ca10 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a  l search.      *
1ca20 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75  * term, substitu
1ca30 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64 20  te >= for > and 
1ca40 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20 69  < for <=. e.g. i
1ca50 66 20 74 68 65 20 73 65 61 72 63 68 20 74 65 72  f the search ter
1ca60 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 34 2e  m.      ** is 4.
1ca70 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65  9 and the intege
1ca80 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  r approximation 
1ca90 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  5:.      **.    
1caa0 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3e    **        (x >
1cab0 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20    4.9)    ->    
1cac0 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20 20 20   (x >= 5).      
1cad0 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c 3d 20  **        (x <= 
1cae0 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28  4.9)    ->     (
1caf0 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20 2a 2f  x <  5).      */
1cb00 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d  .      if( pIn3-
1cb10 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20  >r<(double)iKey 
1cb20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1cb30 74 28 20 4f 50 5f 53 65 65 6b 47 65 3d 3d 28 4f  t( OP_SeekGe==(O
1cb40 50 5f 53 65 65 6b 47 74 2d 31 29 20 29 3b 0a 20  P_SeekGt-1) );. 
1cb50 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
1cb60 50 5f 53 65 65 6b 4c 74 3d 3d 28 4f 50 5f 53 65  P_SeekLt==(OP_Se
1cb70 65 6b 4c 65 2d 31 29 20 29 3b 0a 20 20 20 20 20  ekLe-1) );.     
1cb80 20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53     assert( (OP_S
1cb90 65 65 6b 4c 65 20 26 20 30 78 30 30 30 31 29 3d  eekLe & 0x0001)=
1cba0 3d 28 4f 50 5f 53 65 65 6b 47 74 20 26 20 30 78  =(OP_SeekGt & 0x
1cbb0 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20  0001) );.       
1cbc0 20 69 66 28 20 28 6f 63 20 26 20 30 78 30 30 30   if( (oc & 0x000
1cbd0 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 74 20 26  1)==(OP_SeekGt &
1cbe0 20 30 78 30 30 30 31 29 20 29 20 6f 63 2d 2d 3b   0x0001) ) oc--;
1cbf0 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
1cc00 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78  /* If the approx
1cc10 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20  imation iKey is 
1cc20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 65  smaller than the
1cc30 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61   actual real sea
1cc40 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72  rch.      ** ter
1cc50 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20 3c 3d  m, substitute <=
1cc60 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66 6f 72   for < and > for
1cc70 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 65   >=.  */.      e
1cc80 6c 73 65 20 69 66 28 20 70 49 6e 33 2d 3e 72 3e  lse if( pIn3->r>
1cc90 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a  (double)iKey ){.
1cca0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1ccb0 4f 50 5f 53 65 65 6b 4c 65 3d 3d 28 4f 50 5f 53  OP_SeekLe==(OP_S
1ccc0 65 65 6b 4c 74 2b 31 29 20 29 3b 0a 20 20 20 20  eekLt+1) );.    
1ccd0 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
1cce0 65 65 6b 47 74 3d 3d 28 4f 50 5f 53 65 65 6b 47  eekGt==(OP_SeekG
1ccf0 65 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  e+1) );.        
1cd00 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b  assert( (OP_Seek
1cd10 4c 74 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  Lt & 0x0001)==(O
1cd20 50 5f 53 65 65 6b 47 65 20 26 20 30 78 30 30 30  P_SeekGe & 0x000
1cd30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66  1) );.        if
1cd40 28 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d  ( (oc & 0x0001)=
1cd50 3d 28 4f 50 5f 53 65 65 6b 4c 74 20 26 20 30 78  =(OP_SeekLt & 0x
1cd60 30 30 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20  0001) ) oc++;.  
1cd70 20 20 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20      }.    } .   
1cd80 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1cd90 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1cda0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c  (pC->pCursor, 0,
1cdb0 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26   (u64)iKey, 0, &
1cdc0 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63  res);.    if( rc
1cdd0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1cde0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1cdf0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1ce00 20 20 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3d    }.    if( res=
1ce10 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e  =0 ){.      pC->
1ce20 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 31  rowidIsValid = 1
1ce30 3b 0a 20 20 20 20 20 20 70 43 2d 3e 6c 61 73 74  ;.      pC->last
1ce40 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20  Rowid = iKey;.  
1ce50 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1ce60 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
1ce70 34 2e 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28  4.i;.    assert(
1ce80 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1ce90 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 61 73  _INT32 );.    as
1cea0 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29  sert( nField>0 )
1ceb0 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f  ;.    r.pKeyInfo
1cec0 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
1ced0 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
1cee0 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20  (u16)nField;..  
1cef0 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c 69    /* The next li
1cf00 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75  ne of code compu
1cf10 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20  tes as follows, 
1cf20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20 20  only faster:.   
1cf30 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50   **   if( oc==OP
1cf40 5f 53 65 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f  _SeekGt || oc==O
1cf50 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20 20 20 20  P_SeekLe ){.    
1cf60 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  **     r.flags =
1cf70 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45   UNPACKED_INCRKE
1cf80 59 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73  Y;.    **   }els
1cf90 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e  e{.    **     r.
1cfa0 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 2a  flags = 0;.    *
1cfb0 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20  *   }.    */.   
1cfc0 20 72 2e 66 6c 61 67 73 20 3d 20 28 75 38 29 28   r.flags = (u8)(
1cfd0 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
1cfe0 20 2a 20 28 31 20 26 20 28 6f 63 20 2d 20 4f 50   * (1 & (oc - OP
1cff0 5f 53 65 65 6b 4c 74 29 29 29 3b 0a 20 20 20 20  _SeekLt)));.    
1d000 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
1d010 65 65 6b 47 74 20 7c 7c 20 72 2e 66 6c 61 67 73  eekGt || r.flags
1d020 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b  ==UNPACKED_INCRK
1d030 45 59 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  EY );.    assert
1d040 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 65 20  ( oc!=OP_SeekLe 
1d050 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41  || r.flags==UNPA
1d060 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a  CKED_INCRKEY );.
1d070 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1d080 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 72 2e 66  OP_SeekGe || r.f
1d090 6c 61 67 73 3d 3d 30 20 29 3b 0a 20 20 20 20 61  lags==0 );.    a
1d0a0 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1d0b0 65 6b 4c 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d  ekLt || r.flags=
1d0c0 3d 30 20 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65  =0 );..    r.aMe
1d0d0 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
1d0e0 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  3];.#ifdef SQLIT
1d0f0 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e  E_DEBUG.    { in
1d100 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
1d110 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
1d120 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1d130 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
1d140 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 45 78   }.#endif.    Ex
1d150 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29  pandBlob(r.aMem)
1d160 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
1d170 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1d180 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1d190 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
1d1a0 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  s);.    if( rc!=
1d1b0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1d1c0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1d1d0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1d1e0 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49  }.    pC->rowidI
1d1f0 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a  sValid = 0;.  }.
1d200 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1d210 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
1d220 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1d230 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65  CHE_STALE;.#ifde
1d240 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
1d250 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
1d260 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
1d270 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b   if( oc>=OP_Seek
1d280 47 65 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f  Ge ){  assert( o
1d290 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20  c==OP_SeekGe || 
1d2a0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b  oc==OP_SeekGt );
1d2b0 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c  .    if( res<0 |
1d2c0 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d  | (res==0 && oc=
1d2d0 3d 4f 50 5f 53 65 65 6b 47 74 29 20 29 7b 0a 20  =OP_SeekGt) ){. 
1d2e0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1d2f0 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 70  3BtreeNext(pC->p
1d300 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1d310 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1d320 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1d330 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1d340 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69  ;.      pC->rowi
1d350 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1d360 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
1d370 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  es = 0;.    }.  
1d380 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
1d390 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74  t( oc==OP_SeekLt
1d3a0 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
1d3b0 65 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  e );.    if( res
1d3c0 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  >0 || (res==0 &&
1d3d0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 29 20   oc==OP_SeekLt) 
1d3e0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
1d3f0 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
1d400 75 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  us(pC->pCursor, 
1d410 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
1d420 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1d430 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1d440 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1d450 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1d460 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
1d470 0a 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69  .      /* res mi
1d480 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20  ght be negative 
1d490 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
1d4a0 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65  e is empty.  Che
1d4b0 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73  ck to.      ** s
1d4c0 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68  ee if this is th
1d4d0 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f  e case..      */
1d4e0 0a 20 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c  .      res = sql
1d4f0 69 74 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d  ite3BtreeEof(pC-
1d500 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  >pCursor);.    }
1d510 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
1d520 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 69 66  Op->p2>0 );.  if
1d530 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  ( res ){.    pc 
1d540 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1d550 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1d560 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50  * Opcode: Seek P
1d570 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
1d580 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d  nopsis:  intkey=
1d590 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69  r[P2].**.** P1 i
1d5a0 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20  s an open table 
1d5b0 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73  cursor and P2 is
1d5c0 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65 72   a rowid integer
1d5d0 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f  .  Arrange.** fo
1d5e0 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20  r P1 to move so 
1d5f0 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
1d600 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69 76 65  o the rowid give
1d610 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  n by P2..**.** T
1d620 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20  his is actually 
1d630 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e  a deferred seek.
1d640 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c    Nothing actual
1d650 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c  ly happens until
1d660 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69  .** the cursor i
1d670 73 20 75 73 65 64 20 74 6f 20 72 65 61 64 20 61  s used to read a
1d680 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77   record.  That w
1d690 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a  ay, if no reads.
1d6a0 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e  ** occur, no unn
1d6b0 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70  ecessary I/O hap
1d6c0 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  pens..*/.case OP
1d6d0 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69  _Seek: {    /* i
1d6e0 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n2 */.  VdbeCurs
1d6f0 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72  or *pC;..  asser
1d700 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1d710 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1d720 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1d730 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1d740 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1d750 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1d760 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
1d770 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1d780 54 61 62 6c 65 20 29 3b 0a 20 20 70 43 2d 3e 6e  Table );.  pC->n
1d790 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 49  ullRow = 0;.  pI
1d7a0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
1d7b0 70 32 5d 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74  p2];.  pC->movet
1d7c0 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65  oTarget = sqlite
1d7d0 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
1d7e0 6e 32 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  n2);.  pC->rowid
1d7f0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70  IsValid = 0;.  p
1d800 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1d810 6f 20 3d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  o = 1;.  break;.
1d820 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  }.  ../* Opcode:
1d830 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20   Found P1 P2 P3 
1d840 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1d850 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
1d860 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68  *.** If P4==0 th
1d870 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68  en register P3 h
1d880 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
1d890 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
1d8a0 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34  ecord.  If.** P4
1d8b0 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  >0 then register
1d8c0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1d8d0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1d8e0 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e   that form an un
1d8f0 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64  packed.** record
1d900 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50  ..**.** Cursor P
1d910 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
1d920 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
1d930 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
1d940 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
1d950 2a 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66  * is a prefix of
1d960 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31   any entry in P1
1d970 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20   then a jump is 
1d980 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a  made to P2 and.*
1d990 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69  * P1 is left poi
1d9a0 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74  nting at the mat
1d9b0 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a  ching entry..**.
1d9c0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74  ** See also: Not
1d9d0 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63  Found, NoConflic
1d9e0 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65  t, NotExists. Se
1d9f0 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekGe.*/./* Opcod
1da00 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50  e: NotFound P1 P
1da10 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
1da20 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1da30 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  P4].**.** If P4=
1da40 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
1da50 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
1da60 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
1da70 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
1da80 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
1da90 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
1daa0 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
1dab0 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
1dac0 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
1dad0 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75  ecord..** .** Cu
1dae0 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
1daf0 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
1db00 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
1db10 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
1db20 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74  d P4.** is not t
1db30 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79  he prefix of any
1db40 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
1db50 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
1db60 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a   to P2.  If P1 .
1db70 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  ** does contain 
1db80 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70  an entry whose p
1db90 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74 68  refix matches th
1dba0 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74  e P3/P4 record t
1dbb0 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66  hen control.** f
1dbc0 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20  alls through to 
1dbd0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
1dbe0 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c  tion and P1 is l
1dbf0 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
1dc00 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20  the.** matching 
1dc10 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  entry..**.** See
1dc20 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1dc30 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c  tExists, NoConfl
1dc40 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ict.*/./* Opcode
1dc50 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20  : NoConflict P1 
1dc60 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1dc70 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1dc80 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
1dc90 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
1dca0 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
1dcb0 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
1dcc0 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
1dcd0 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
1dce0 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
1dcf0 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
1dd00 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
1dd10 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
1dd20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43  record..** .** C
1dd30 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
1dd40 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
1dd50 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
1dd60 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
1dd70 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e  nd P4.** contain
1dd80 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65  s any NULL value
1dd90 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  , jump immediate
1dda0 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c  ly to P2.  If al
1ddb0 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a  l terms of the.*
1ddc0 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74  * record are not
1ddd0 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65  -NULL then a che
1dde0 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65  ck is done to de
1ddf0 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72  termine if any r
1de00 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20  ow in the.** P1 
1de10 69 6e 64 65 78 20 62 74 72 65 65 20 68 61 73 20  index btree has 
1de20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70  a matching key p
1de30 72 65 66 69 78 2e 20 20 49 66 20 74 68 65 72 65  refix.  If there
1de40 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c   are no matches,
1de50 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61   jump.** immedia
1de60 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
1de70 74 68 65 72 65 20 69 73 20 61 20 6d 61 74 63 68  there is a match
1de80 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61  , fall through a
1de90 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a  nd leave the P1.
1dea0 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  ** cursor pointi
1deb0 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69  ng to the matchi
1dec0 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68  ng row..**.** Th
1ded0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d  is opcode is sim
1dee0 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f  ilar to OP_NotFo
1def0 75 6e 64 20 77 69 74 68 20 74 68 65 20 65 78 63  und with the exc
1df00 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65  eptions that the
1df10 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c  .** branch is al
1df20 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e  ways taken if an
1df30 79 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 65  y part of the se
1df40 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69  arch key input i
1df50 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 53 65  s NULL..**.** Se
1df60 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64  e also: NotFound
1df70 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73  , Found, NotExis
1df80 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  ts.*/.case OP_No
1df90 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a  Conflict:     /*
1dfa0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1dfb0 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20  se OP_NotFound: 
1dfc0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1dfd0 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f  n3 */.case OP_Fo
1dfe0 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  und: {        /*
1dff0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1e000 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74  int alreadyExist
1e010 73 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56  s;.  int ii;.  V
1e020 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1e030 20 69 6e 74 20 72 65 73 3b 0a 20 20 63 68 61 72   int res;.  char
1e040 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70 61 63   *pFree;.  Unpac
1e050 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b  kedRecord *pIdxK
1e060 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  ey;.  UnpackedRe
1e070 63 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61  cord r;.  char a
1e080 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73  TempRec[ROUND8(s
1e090 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65  izeof(UnpackedRe
1e0a0 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28  cord)) + sizeof(
1e0b0 4d 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69  Mem)*4 + 7];..#i
1e0c0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
1e0d0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1e0e0 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  de!=OP_NoConflic
1e0f0 74 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e  t ) sqlite3_foun
1e100 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  d_count++;.#endi
1e110 66 0a 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73  f..  alreadyExis
1e120 74 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  ts = 0;.  assert
1e130 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1e140 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1e150 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
1e160 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1e170 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20  INT32 );.  pC = 
1e180 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1e190 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1e1a0 3d 30 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26  =0 );.  pIn3 = &
1e1b0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1e1c0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
1e1d0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
1e1e0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1e1f0 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  ==0 );.  if( pOp
1e200 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20  ->p4.i>0 ){.    
1e210 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
1e220 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72  >pKeyInfo;.    r
1e230 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
1e240 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e  Op->p4.i;.    r.
1e250 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66  aMem = pIn3;.#if
1e260 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1e270 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 6e 74  .    {.      int
1e280 20 69 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d   i;.      for(i=
1e290 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
1e2a0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  ++){.        ass
1e2b0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
1e2c0 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20  &r.aMem[i]) );. 
1e2d0 20 20 20 20 20 20 20 69 66 28 20 69 20 29 20 52         if( i ) R
1e2e0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
1e2f0 70 2d 3e 70 33 2b 69 2c 20 26 72 2e 61 4d 65 6d  p->p3+i, &r.aMem
1e300 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  [i]);.      }.  
1e310 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 72    }.#endif.    r
1e320 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45  .flags = UNPACKE
1e330 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a  D_PREFIX_MATCH;.
1e340 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72      pIdxKey = &r
1e350 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
1e360 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33  IdxKey = sqlite3
1e370 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65  VdbeAllocUnpacke
1e380 64 52 65 63 6f 72 64 28 0a 20 20 20 20 20 20 20  dRecord(.       
1e390 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 61   pC->pKeyInfo, a
1e3a0 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28  TempRec, sizeof(
1e3b0 61 54 65 6d 70 52 65 63 29 2c 20 26 70 46 72 65  aTempRec), &pFre
1e3c0 65 0a 20 20 20 20 29 3b 20 0a 20 20 20 20 69 66  e.    ); .    if
1e3d0 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67  ( pIdxKey==0 ) g
1e3e0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
1e3f0 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
1e400 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
1e410 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
1e420 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1e430 5f 5a 65 72 6f 29 3d 3d 30 20 29 3b 20 20 2f 2a  _Zero)==0 );  /*
1e440 20 7a 65 72 6f 62 6c 6f 62 73 20 61 6c 72 65 61   zeroblobs alrea
1e450 64 79 20 65 78 70 61 6e 64 65 64 20 2a 2f 0a 20  dy expanded */. 
1e460 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65     sqlite3VdbeRe
1e470 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70  cordUnpack(pC->p
1e480 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e  KeyInfo, pIn3->n
1e490 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b  , pIn3->z, pIdxK
1e4a0 65 79 29 3b 0a 20 20 20 20 70 49 64 78 4b 65 79  ey);.    pIdxKey
1e4b0 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41 43  ->flags |= UNPAC
1e4c0 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48  KED_PREFIX_MATCH
1e4d0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1e4e0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f  >opcode==OP_NoCo
1e4f0 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a  nflict ){.    /*
1e500 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f   For the OP_NoCo
1e510 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74  nflict opcode, t
1e520 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
1e530 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  any of the.    *
1e540 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61  * input fields a
1e550 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61  re NULL, since a
1e560 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55  ny key with a NU
1e570 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20  LL will not.    
1e580 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20  ** conflict */. 
1e590 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
1e5a0 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b  r.nField; ii++){
1e5b0 0a 20 20 20 20 20 20 69 66 28 20 72 2e 61 4d 65  .      if( r.aMe
1e5c0 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45  m[ii].flags & ME
1e5d0 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20  M_Null ){.      
1e5e0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1e5f0 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   1;.        brea
1e600 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
1e610 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
1e620 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1e630 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
1e640 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20  or, pIdxKey, 0, 
1e650 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20  0, &res);.  if( 
1e660 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a  pOp->p4.i==0 ){.
1e670 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
1e680 65 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20  e(db, pFree);.  
1e690 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  }.  if( rc!=SQLI
1e6a0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 62 72 65  TE_OK ){.    bre
1e6b0 61 6b 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65  ak;.  }.  pC->se
1e6c0 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a  ekResult = res;.
1e6d0 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20    alreadyExists 
1e6e0 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43  = (res==0);.  pC
1e6f0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c  ->nullRow = 1-al
1e700 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70  readyExists;.  p
1e710 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1e720 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
1e730 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1e740 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f  _STALE;.  if( pO
1e750 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f  p->opcode==OP_Fo
1e760 75 6e 64 20 29 7b 0a 20 20 20 20 69 66 28 20 61  und ){.    if( a
1e770 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70  lreadyExists ) p
1e780 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1e790 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66  .  }else{.    if
1e7a0 28 20 21 61 6c 72 65 61 64 79 45 78 69 73 74 73  ( !alreadyExists
1e7b0 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20   ) pc = pOp->p2 
1e7c0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
1e7d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1e7e0 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50 32 20  NotExists P1 P2 
1e7f0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
1e800 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d  is: intkey=r[P3]
1e810 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
1e820 20 69 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73   index of a curs
1e830 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51  or open on an SQ
1e840 4c 20 74 61 62 6c 65 20 62 74 72 65 65 20 28 77  L table btree (w
1e850 69 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b  ith integer.** k
1e860 65 79 73 29 2e 20 20 50 33 20 69 73 20 61 6e 20  eys).  P3 is an 
1e870 69 6e 74 65 67 65 72 20 72 6f 77 69 64 2e 20 20  integer rowid.  
1e880 49 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 20 63  If P1 does not c
1e890 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20  ontain a record 
1e8a0 77 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33  with.** rowid P3
1e8b0 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
1e8c0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49  iately to P2.  I
1e8d0 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69  f P1 does contai
1e8e0 6e 20 61 20 72 65 63 6f 72 64 0a 2a 2a 20 77 69  n a record.** wi
1e8f0 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e  th rowid P3 then
1e900 20 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f   leave the curso
1e910 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  r pointing at th
1e920 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61  at record and fa
1e930 6c 6c 0a 2a 2a 20 74 68 72 6f 75 67 68 20 74 6f  ll.** through to
1e940 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
1e950 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ction..**.** The
1e960 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63   OP_NotFound opc
1e970 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65  ode performs the
1e980 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20   same operation 
1e990 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a  on index btrees.
1e9a0 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74 72 61  ** (with arbitra
1e9b0 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b  ry multi-value k
1e9c0 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  eys)..**.** See 
1e9d0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1e9e0 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63  Found, NoConflic
1e9f0 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  t.*/.case OP_Not
1ea00 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20  Exists: {       
1ea10 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1ea20 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1ea30 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
1ea40 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
1ea50 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20  .  u64 iKey;..  
1ea60 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
1ea70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
1ea80 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
1ea90 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
1eaa0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1eab0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1eac0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1ead0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1eae0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1eaf0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1eb00 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
1eb10 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
1eb20 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b  doTableReg==0 );
1eb30 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
1eb40 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
1eb50 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
1eb60 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20  res = 0;.  iKey 
1eb70 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72  = pIn3->u.i;.  r
1eb80 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1eb90 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1eba0 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30  Crsr, 0, iKey, 0
1ebb0 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6c  , &res);.  pC->l
1ebc0 61 73 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d  astRowid = pIn3-
1ebd0 3e 75 2e 69 3b 0a 20 20 70 43 2d 3e 72 6f 77 69  >u.i;.  pC->rowi
1ebe0 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d  dIsValid = res==
1ebf0 30 20 3f 31 3a 30 3b 0a 20 20 70 43 2d 3e 6e 75  0 ?1:0;.  pC->nu
1ec00 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d  llRow = 0;.  pC-
1ec10 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1ec20 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43  ACHE_STALE;.  pC
1ec30 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1ec40 20 3d 20 30 3b 0a 20 20 69 66 28 20 72 65 73 21   = 0;.  if( res!
1ec50 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
1ec60 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1ec70 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69  assert( pC->rowi
1ec80 64 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20  dIsValid==0 );. 
1ec90 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73   }.  pC->seekRes
1eca0 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 62 72 65  ult = res;.  bre
1ecb0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1ecc0 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20 50 32  : Sequence P1 P2
1ecd0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
1ece0 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a  is: r[P2]=rowid.
1ecf0 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e  **.** Find the n
1ed00 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
1ed10 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f  quence number fo
1ed20 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
1ed30 57 72 69 74 65 20 74 68 65 20 73 65 71 75 65 6e  Write the sequen
1ed40 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72  ce number into r
1ed50 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54  egister P2..** T
1ed60 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  he sequence numb
1ed70 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  er on the cursor
1ed80 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
1ed90 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e  after this.** in
1eda0 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a  struction.  .*/.
1edb0 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65  case OP_Sequence
1edc0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
1edd0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
1ede0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
1edf0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1ee00 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1ee10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
1ee20 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30  pCsr[pOp->p1]!=0
1ee30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   );.  pOut->u.i 
1ee40 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1ee50 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b  p1]->seqCount++;
1ee60 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
1ee70 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69   Opcode: NewRowi
1ee80 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
1ee90 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
1eea0 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65  ]=rowid.**.** Ge
1eeb0 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20  t a new integer 
1eec0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61  record number (a
1eed0 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73  .k.a "rowid") us
1eee0 65 64 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f  ed as the key to
1eef0 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65   a table..** The
1ef00 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69   record number i
1ef10 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
1ef20 20 75 73 65 64 20 61 73 20 61 20 6b 65 79 20 69   used as a key i
1ef30 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
1ef40 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63 75 72  * table that cur
1ef50 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f  sor P1 points to
1ef60 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72  .  The new recor
1ef70 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74  d number is writ
1ef80 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74  ten.** written t
1ef90 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
1efa0 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65  *.** If P3>0 the
1efb0 6e 20 50 33 20 69 73 20 61 20 72 65 67 69 73 74  n P3 is a regist
1efc0 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66  er in the root f
1efd0 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42  rame of this VDB
1efe0 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a  E that holds .**
1eff0 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 72 65   the largest pre
1f000 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65  viously generate
1f010 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  d record number.
1f020 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e   No new record n
1f030 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c  umbers are.** al
1f040 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73  lowed to be less
1f050 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65   than this value
1f060 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75  . When this valu
1f070 65 20 72 65 61 63 68 65 73 20 69 74 73 20 6d 61  e reaches its ma
1f080 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51  ximum, .** an SQ
1f090 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20  LITE_FULL error 
1f0a0 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68  is generated. Th
1f0b0 65 20 50 33 20 72 65 67 69 73 74 65 72 20 69 73  e P3 register is
1f0c0 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
1f0d0 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64  e '.** generated
1f0e0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20   record number. 
1f0f0 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73  This P3 mechanis
1f100 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c  m is used to hel
1f110 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a  p implement the.
1f120 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ** AUTOINCREMENT
1f130 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73   feature..*/.cas
1f140 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b  e OP_NewRowid: {
1f150 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
1f160 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
1f170 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20 20 20  .  i64 v;       
1f180 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1f190 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
1f1a0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
1f1b0 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
1f1c0 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74   of table to get
1f1d0 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   the new rowid *
1f1e0 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20  /.  int res;    
1f1f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1f200 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74  sult of an sqlit
1f210 65 33 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f  e3BtreeLast() */
1f220 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20  .  int cnt;     
1f230 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
1f240 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68  nter to limit th
1f250 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72  e number of sear
1f260 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ches */.  Mem *p
1f270 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
1f280 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
1f290 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77  ding largest row
1f2a0 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45  id for AUTOINCRE
1f2b0 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72  MENT */.  VdbeFr
1f2c0 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20  ame *pFrame;    
1f2d0 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f   /* Root frame o
1f2e0 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d  f VDBE */..  v =
1f2f0 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   0;.  res = 0;. 
1f300 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1f310 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1f320 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1f330 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1f340 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1f350 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pC!=0 );.  if( 
1f360 4e 45 56 45 52 28 70 43 2d 3e 70 43 75 72 73 6f  NEVER(pC->pCurso
1f370 72 3d 3d 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20  r==0) ){.    /* 
1f380 54 68 65 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c  The zero initial
1f390 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65 20 69 73  ization above is
1f3a0 20 61 6c 6c 20 74 68 61 74 20 69 73 20 6e 65 65   all that is nee
1f3b0 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a  ded */.  }else{.
1f3c0 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
1f3d0 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20  rowid or record 
1f3e0 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e  number (differen
1f3f0 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20  t terms for the 
1f400 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e  same.    ** thin
1f410 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69  g) is obtained i
1f420 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67  n a two-step alg
1f430 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20  orithm..    **. 
1f440 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61     ** First we a
1f450 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74  ttempt to find t
1f460 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
1f470 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64  ing rowid and ad
1f480 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20  d one.    ** to 
1f490 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74 68  that.  But if th
1f4a0 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69  e largest existi
1f4b0 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65  ng rowid is alre
1f4c0 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a  ady the maximum.
1f4d0 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20      ** positive 
1f4e0 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76 65  integer, we have
1f4f0 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68   to fall through
1f500 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20   to the second. 
1f510 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73     ** probabilis
1f520 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20  tic algorithm.  
1f530 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20    **.    ** The 
1f540 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d  second algorithm
1f550 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20   is to select a 
1f560 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20  rowid at random 
1f570 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a  and see if.    *
1f580 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78 69  * it already exi
1f590 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  sts in the table
1f5a0 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f  .  If it does no
1f5b0 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76 65  t exist, we have
1f5c0 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65  .    ** succeede
1f5d0 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f  d.  If the rando
1f5e0 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69  m rowid does exi
1f5f0 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20  st, we select a 
1f600 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61  new one.    ** a
1f610 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70  nd try again, up
1f620 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20   to 100 times.. 
1f630 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
1f640 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1f650 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1f660 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20  32BIT_ROWID.#   
1f670 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
1f680 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73   0x7fffffff.#els
1f690 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f  e.    /* Some co
1f6a0 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e  mpilers complain
1f6b0 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73   about constants
1f6c0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37   of the form 0x7
1f6d0 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 2e  fffffffffffffff.
1f6e0 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63  .    ** Others c
1f6f0 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78  omplain about 0x
1f700 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
1f710 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  fLL.  The follow
1f720 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a  ing macro seems.
1f730 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64      ** to provid
1f740 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77  e the constant w
1f750 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20  hile making all 
1f760 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e  compilers happy.
1f770 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69  .    */.#   defi
1f780 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69  ne MAX_ROWID  (i
1f790 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37 66  64)( (((u64)0x7f
1f7a0 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28  ffffff)<<32) | (
1f7b0 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29  u64)0xffffffff )
1f7c0 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28  .#endif..    if(
1f7d0 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52   !pC->useRandomR
1f7e0 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20  owid ){.      v 
1f7f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65  = sqlite3BtreeGe
1f800 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d  tCachedRowid(pC-
1f810 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
1f820 20 69 66 28 20 76 3d 3d 30 20 29 7b 0a 20 20 20   if( v==0 ){.   
1f830 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1f840 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70  3BtreeLast(pC->p
1f850 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1f860 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
1f870 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1f880 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1f890 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1f8a0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1f8b0 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
1f8c0 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f        v = 1;   /
1f8d0 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34  * IMP: R-61914-4
1f8e0 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 20 20  8074 */.        
1f8f0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1f900 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1f910 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
1f920 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20  id(pC->pCursor) 
1f930 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  );.          rc 
1f940 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
1f950 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f  ySize(pC->pCurso
1f960 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  r, &v);.        
1f970 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
1f980 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20  LITE_OK );   /* 
1f990 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c  Cannot fail foll
1f9a0 6f 77 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28  owing BtreeLast(
1f9b0 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69  ) */.          i
1f9c0 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20  f( v>=MAX_ROWID 
1f9d0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ){.            p
1f9e0 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
1f9f0 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  d = 1;.         
1fa00 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1fa10 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d      v++;   /* IM
1fa20 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37  P: R-29538-34987
1fa30 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7d 0a   */.          }.
1fa40 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1fa50 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
1fa60 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
1fa70 4d 45 4e 54 0a 20 20 20 20 20 20 69 66 28 20 70  MENT.      if( p
1fa80 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20  Op->p3 ){.      
1fa90 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
1faa0 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
1fab0 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
1fac0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1fad0 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
1fae0 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d      if( p->pFram
1faf0 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66  e ){.          f
1fb00 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
1fb10 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61  ame; pFrame->pPa
1fb20 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  rent; pFrame=pFr
1fb30 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
1fb40 20 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65           /* Asse
1fb50 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
1fb60 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
1fb70 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  l. */.          
1fb80 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
1fb90 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b  =pFrame->nMem );
1fba0 0a 20 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20  .          pMem 
1fbb0 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
1fbc0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
1fbd0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1fbe0 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
1fbf0 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
1fc00 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
1fc10 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
1fc20 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
1fc30 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
1fc40 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4d 65  );.          pMe
1fc50 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
1fc60 33 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 6d 65  3];.          me
1fc70 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
1fc80 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20  , pMem);.       
1fc90 20 7d 0a 20 20 20 20 20 20 20 20 61 73 73 65 72   }.        asser
1fca0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d  t( memIsValid(pM
1fcb0 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 20 20  em) );..        
1fcc0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
1fcd0 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20  Op->p3, pMem);. 
1fce0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
1fcf0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
1fd00 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 61  pMem);.        a
1fd10 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
1fd20 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
1fd30 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29  0 );  /* mem(P3)
1fd40 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
1fd50 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  r */.        if(
1fd60 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f   pMem->u.i==MAX_
1fd70 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65  ROWID || pC->use
1fd80 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
1fd90 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51           rc = SQ
1fda0 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20  LITE_FULL;   /* 
1fdb0 49 4d 50 3a 20 52 2d 31 32 32 37 35 2d 36 31 33  IMP: R-12275-613
1fdc0 33 38 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  38 */.          
1fdd0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1fde0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1fdf0 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 76   }.        if( v
1fe00 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a  <pMem->u.i+1 ){.
1fe10 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d            v = pM
1fe20 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20  em->u.i + 1;.   
1fe30 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70       }.        p
1fe40 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Mem->u.i = v;.  
1fe50 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
1fe60 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
1fe70 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70  SetCachedRowid(p
1fe80 43 2d 3e 70 43 75 72 73 6f 72 2c 20 76 3c 4d 41  C->pCursor, v<MA
1fe90 58 5f 52 4f 57 49 44 20 3f 20 76 2b 31 20 3a 20  X_ROWID ? v+1 : 
1fea0 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  0);.    }.    if
1feb0 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  ( pC->useRandomR
1fec0 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a  owid ){.      /*
1fed0 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
1fee0 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38  OF: R-07677-4188
1fef0 31 20 49 66 20 74 68 65 20 6c 61 72 67 65 73 74  1 If the largest
1ff00 20 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20   ROWID is equal 
1ff10 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20  to the.      ** 
1ff20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65  largest possible
1ff30 20 69 6e 74 65 67 65 72 20 28 39 32 32 33 33 37   integer (922337
1ff40 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20 74  2036854775807) t
1ff50 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
1ff60 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65  .      ** engine
1ff70 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20   starts picking 
1ff80 70 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64 61  positive candida
1ff90 74 65 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e  te ROWIDs at ran
1ffa0 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20  dom until.      
1ffb0 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20  ** it finds one 
1ffc0 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76  that is not prev
1ffd0 69 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a  iously used. */.
1ffe0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1fff0 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20  p->p3==0 );  /* 
20000 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20  We cannot be in 
20010 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64  random rowid mod
20020 65 20 69 66 20 74 68 69 73 20 69 73 0a 20 20 20  e if this is.   
20030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20040 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20            ** an 
20050 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
20060 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 2f 2a  ble. */.      /*
20070 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 61 74   on the first at
20080 74 65 6d 70 74 2c 20 73 69 6d 70 6c 79 20 64 6f  tempt, simply do
20090 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61 6e 20 70   one more than p
200a0 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20  revious */.     
200b0 20 76 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a   v = lastRowid;.
200c0 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f        v &= (MAX_
200d0 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e  ROWID>>1); /* en
200e0 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20  sure doesn't go 
200f0 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20  negative */.    
20100 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65    v++; /* ensure
20110 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20   non-zero */.   
20120 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20     cnt = 0;.    
20130 20 20 77 68 69 6c 65 28 20 20 20 28 28 72 63 20    while(   ((rc 
20140 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
20150 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
20160 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  >pCursor, 0, (u6
20170 34 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20  4)v,.           
20180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201a0 20 20 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d        0, &res))=
201b0 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20  =SQLITE_OK).    
201c0 20 20 20 20 20 20 20 20 26 26 20 28 72 65 73 3d          && (res=
201d0 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  =0).            
201e0 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 7b  && (++cnt<100)){
201f0 0a 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c  .        /* coll
20200 69 73 69 6f 6e 20 2d 20 74 72 79 20 61 6e 6f 74  ision - try anot
20210 68 65 72 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  her random rowid
20220 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69   */.        sqli
20230 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73  te3_randomness(s
20240 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20  izeof(v), &v);. 
20250 20 20 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35         if( cnt<5
20260 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   ){.          /*
20270 20 74 72 79 20 22 73 6d 61 6c 6c 22 20 72 61 6e   try "small" ran
20280 64 6f 6d 20 72 6f 77 69 64 73 20 66 6f 72 20 74  dom rowids for t
20290 68 65 20 69 6e 69 74 69 61 6c 20 61 74 74 65 6d  he initial attem
202a0 70 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  pts */.         
202b0 20 76 20 26 3d 20 30 78 66 66 66 66 66 66 3b 0a   v &= 0xffffff;.
202c0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
202d0 20 20 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d           v &= (M
202e0 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a  AX_ROWID>>1); /*
202f0 20 65 6e 73 75 72 65 20 64 6f 65 73 6e 27 74 20   ensure doesn't 
20300 67 6f 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20  go negative */. 
20310 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
20320 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20   v++; /* ensure 
20330 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20  non-zero */.    
20340 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 63    }.      if( rc
20350 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
20360 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
20370 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
20380 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33  L;   /* IMP: R-3
20390 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20  8219-53002 */.  
203a0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
203b0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
203c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
203d0 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20  ert( v>0 );  /* 
203e0 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37  EV: R-40812-0357
203f0 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70  0 */.    }.    p
20400 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
20410 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  = 0;.    pC->def
20420 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
20430 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
20440 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
20450 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  LE;.  }.  pOut->
20460 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
20470 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
20480 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
20490 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
204a0 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20  s: intkey=r[P3] 
204b0 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  data=r[P2].**.**
204c0 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20   Write an entry 
204d0 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f  into the table o
204e0 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20  f cursor P1.  A 
204f0 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20  new entry is.** 
20500 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f  created if it do
20510 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78  esn't already ex
20520 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20  ist or the data 
20530 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a  for an existing.
20540 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72  ** entry is over
20550 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61  written.  The da
20560 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ta is the value 
20570 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20  MEM_Blob stored 
20580 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e  in register.** n
20590 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65  umber P2. The ke
205a0 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  y is stored in r
205b0 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20  egister P3. The 
205c0 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61  key must.** be a
205d0 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20   MEM_Int..**.** 
205e0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
205f0 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35  HANGE flag of P5
20600 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
20610 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
20620 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
20630 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
20640 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50  not).  If the OP
20650 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66  FLAG_LASTROWID f
20660 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
20670 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20  ,.** then rowid 
20680 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75  is stored for su
20690 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20  bsequent return 
206a0 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
206b0 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
206c0 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28  wid() function (
206d0 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  otherwise it is 
206e0 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a  unmodified)..**.
206f0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
20700 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
20710 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
20720 20 61 6e 64 20 69 66 20 74 68 65 20 72 65 73 75   and if the resu
20730 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73  lt of.** the las
20740 74 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e  t seek operation
20750 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29 20   (OP_NotExists) 
20760 77 61 73 20 61 20 73 75 63 63 65 73 73 2c 20 74  was a success, t
20770 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72  hen this.** oper
20780 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61  ation will not a
20790 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74  ttempt to find t
207a0 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 72  he appropriate r
207b0 6f 77 20 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a  ow before doing.
207c0 2a 2a 20 74 68 65 20 69 6e 73 65 72 74 20 62 75  ** the insert bu
207d0 74 20 77 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f  t will instead o
207e0 76 65 72 77 72 69 74 65 20 74 68 65 20 72 6f 77  verwrite the row
207f0 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f 72   that the cursor
20800 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79   is.** currently
20810 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50   pointing to.  P
20820 72 65 73 75 6d 61 62 6c 79 2c 20 74 68 65 20 70  resumably, the p
20830 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74  rior OP_NotExist
20840 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20  s opcode.** has 
20850 61 6c 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e  already position
20860 65 64 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  ed the cursor co
20870 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69  rrectly.  This i
20880 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  s an optimizatio
20890 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73  n.** that boosts
208a0 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20   performance by 
208b0 61 76 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61  avoiding redunda
208c0 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20  nt seeks..**.** 
208d0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53  If the OPFLAG_IS
208e0 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73  UPDATE flag is s
208f0 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70  et, then this op
20900 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20  code is part of 
20910 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65  an.** UPDATE ope
20920 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69  ration.  Otherwi
20930 73 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20  se (if the flag 
20940 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74  is clear) then t
20950 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  his opcode.** is
20960 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45   part of an INSE
20970 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54  RT operation.  T
20980 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73  he difference is
20990 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20   only important 
209a0 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65  to.** the update
209b0 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72   hook..**.** Par
209c0 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f  ameter P4 may po
209d0 69 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20  int to a string 
209e0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
209f0 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a  able-name, or.**
20a00 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66   may be NULL. If
20a10 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   it is not NULL,
20a20 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65   then the update
20a30 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74  -hook .** (sqlit
20a40 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  e3.xUpdateCallba
20a50 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66  ck) is invoked f
20a60 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65  ollowing a succe
20a70 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a  ssful insert..**
20a80 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44  .** (WARNING/TOD
20a90 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73  O: If P1 is a ps
20aa0 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20  eudo-cursor and 
20ab0 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c  P2 is dynamicall
20ac0 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
20ad0 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f  then ownership o
20ae0 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72  f P2 is transfer
20af0 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64  red to the pseud
20b00 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20  o-cursor.** and 
20b10 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f  register P2 beco
20b20 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20  mes ephemeral.  
20b30 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
20b40 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a   changed, the.**
20b50 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
20b60 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20  er P2 will then 
20b70 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75  change.  Make su
20b80 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74  re this does not
20b90 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72  .** cause any pr
20ba0 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54  oblems.).**.** T
20bb0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
20bc0 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61  only works on ta
20bd0 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  bles.  The equiv
20be0 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
20bf0 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73  n.** for indices
20c00 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74   is OP_IdxInsert
20c10 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
20c20 49 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32 20  InsertInt P1 P2 
20c30 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
20c40 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33  psis:  intkey=P3
20c50 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a   data=r[P2].**.*
20c60 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61  * This works exa
20c70 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73  ctly like OP_Ins
20c80 65 72 74 20 65 78 63 65 70 74 20 74 68 61 74 20  ert except that 
20c90 74 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a  the key is the.*
20ca0 2a 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * integer value 
20cb0 50 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75  P3, not the valu
20cc0 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72  e of the integer
20cd0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
20ce0 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
20cf0 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65  OP_Insert: .case
20d00 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b   OP_InsertInt: {
20d10 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20  .  Mem *pData;  
20d20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c       /* MEM cell
20d30 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f   holding data fo
20d40 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  r the record to 
20d50 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20  be inserted */. 
20d60 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20   Mem *pKey;     
20d70 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
20d80 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20  olding key  for 
20d90 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
20da0 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20  i64 iKey;       
20db0 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72    /* The integer
20dc0 20 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f   ROWID or key fo
20dd0 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  r the record to 
20de0 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20  be inserted */. 
20df0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
20e00 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20     /* Cursor to 
20e10 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68  table into which
20e20 20 69 6e 73 65 72 74 20 69 73 20 77 72 69 74 74   insert is writt
20e30 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72  en */.  int nZer
20e40 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  o;        /* Num
20e50 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65  ber of zero-byte
20e60 73 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20  s to append */. 
20e70 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b   int seekResult;
20e80 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
20e90 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20  prior seek or 0 
20ea0 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53  if no USESEEKRES
20eb0 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f  ULT flag */.  co
20ec0 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20  nst char *zDb;  
20ed0 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  /* database name
20ee0 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 75   - used by the u
20ef0 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20  pdate hook */.  
20f00 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c  const char *zTbl
20f10 3b 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20  ; /* Table name 
20f20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 6f 70  - used by the op
20f30 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69  date hook */.  i
20f40 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  nt op;          
20f50 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75   /* Opcode for u
20f60 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49  pdate hook: SQLI
20f70 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c  TE_UPDATE or SQL
20f80 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20  ITE_INSERT */.. 
20f90 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70   pData = &aMem[p
20fa0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
20fb0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
20fc0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
20fd0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
20fe0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74   memIsValid(pDat
20ff0 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  a) );.  pC = p->
21000 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
21010 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
21020 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
21030 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
21040 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
21050 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
21060 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
21070 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47  isTable );.  REG
21080 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
21090 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20  >p2, pData);..  
210a0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
210b0 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20  =OP_Insert ){.  
210c0 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70    pKey = &aMem[p
210d0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73  Op->p3];.    ass
210e0 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73  ert( pKey->flags
210f0 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
21100 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
21110 61 6c 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20  alid(pKey) );.  
21120 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
21130 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b  (pOp->p3, pKey);
21140 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4b 65 79  .    iKey = pKey
21150 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->u.i;.  }else{.
21160 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
21170 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65  >opcode==OP_Inse
21180 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65  rtInt );.    iKe
21190 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  y = pOp->p3;.  }
211a0 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ..  if( pOp->p5 
211b0 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
211c0 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
211d0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
211e0 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
211f0 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  D ) db->lastRowi
21200 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20  d = lastRowid = 
21210 69 4b 65 79 3b 0a 20 20 69 66 28 20 70 44 61 74  iKey;.  if( pDat
21220 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  a->flags & MEM_N
21230 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61 74 61  ull ){.    pData
21240 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44 61  ->z = 0;.    pDa
21250 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c  ta->n = 0;.  }el
21260 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
21270 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28  pData->flags & (
21280 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72  MEM_Blob|MEM_Str
21290 29 20 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52  ) );.  }.  seekR
212a0 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70  esult = ((pOp->p
212b0 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  5 & OPFLAG_USESE
212c0 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e  EKRESULT) ? pC->
212d0 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b  seekResult : 0);
212e0 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c  .  if( pData->fl
212f0 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
21300 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44  {.    nZero = pD
21310 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20  ata->u.nZero;.  
21320 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f  }else{.    nZero
21330 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69   = 0;.  }.  sqli
21340 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65  te3BtreeSetCache
21350 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73  dRowid(pC->pCurs
21360 6f 72 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73  or, 0);.  rc = s
21370 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72  qlite3BtreeInser
21380 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  t(pC->pCursor, 0
21390 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20  , iKey,.        
213a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213b0 20 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74    pData->z, pDat
213c0 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20  a->n, nZero,.   
213d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213e0 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20         (pOp->p5 
213f0 26 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 29  & OPFLAG_APPEND)
21400 21 3d 30 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a  !=0, seekResult.
21410 20 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64    );.  pC->rowid
21420 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70  IsValid = 0;.  p
21430 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
21440 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
21450 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
21460 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e  _STALE;..  /* In
21470 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d  voke the update-
21480 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
21490 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53  . */.  if( rc==S
214a0 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e  QLITE_OK && db->
214b0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
214c0 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  && pOp->p4.z ){.
214d0 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44      zDb = db->aD
214e0 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65  b[pC->iDb].zName
214f0 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70  ;.    zTbl = pOp
21500 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d  ->p4.z;.    op =
21510 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
21520 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20  LAG_ISUPDATE) ? 
21530 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20  SQLITE_UPDATE : 
21540 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a  SQLITE_INSERT);.
21550 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
21560 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64  isTable );.    d
21570 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
21580 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
21590 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c  g, op, zDb, zTbl
215a0 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73  , iKey);.    ass
215b0 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
215c0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
215d0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
215e0 6c 65 74 65 20 50 31 20 50 32 20 2a 20 50 34 20  lete P1 P2 * P4 
215f0 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74  *.**.** Delete t
21600 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69  he record at whi
21610 63 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  ch the P1 cursor
21620 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
21630 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  inting..**.** Th
21640 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65  e cursor will be
21650 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
21660 74 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78  t either the nex
21670 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75  t or the previou
21680 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74  s.** record in t
21690 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20  he table. If it 
216a0 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
216b0 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63   at the next rec
216c0 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ord, then.** the
216d0 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72   next Next instr
216e0 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  uction will be a
216f0 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69   no-op.  Hence i
21700 74 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74  t is OK to delet
21710 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72  e.** a record fr
21720 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 4e 65 78  om within an Nex
21730 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66  t loop..**.** If
21740 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
21750 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69  NGE flag of P2 i
21760 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  s set, then the 
21770 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  row change count
21780 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74   is.** increment
21790 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f  ed (otherwise no
217a0 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73  t)..**.** P1 mus
217b0 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d  t not be pseudo-
217c0 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74  table.  It has t
217d0 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c  o be a real tabl
217e0 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70  e with.** multip
217f0 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49  le rows..**.** I
21800 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
21810 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65  , then it is the
21820 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
21830 6c 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a  le that P1 is.**
21840 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54   pointing to.  T
21850 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77  he update hook w
21860 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20  ill be invoked, 
21870 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a  if it exists..**
21880 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
21890 4c 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20 63  LL then the P1 c
218a0 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20  ursor must have 
218b0 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a  been positioned.
218c0 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46  ** using OP_NotF
218d0 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e  ound prior to in
218e0 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  voking this opco
218f0 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  de..*/.case OP_D
21900 65 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34 20 69  elete: {.  i64 i
21910 4b 65 79 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  Key;.  VdbeCurso
21920 72 20 2a 70 43 3b 0a 0a 20 20 69 4b 65 79 20 3d  r *pC;..  iKey =
21930 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
21940 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21950 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21960 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21970 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
21980 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
21990 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
219a0 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f  rsor!=0 );  /* O
219b0 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65  nly valid for re
219c0 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73  al tables, no ps
219d0 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 0a 20  eudotables */.. 
219e0 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61 74   /* If the updat
219f0 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69  e-hook will be i
21a00 6e 76 6f 6b 65 64 2c 20 73 65 74 20 69 4b 65 79  nvoked, set iKey
21a10 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66   to the rowid of
21a20 20 74 68 65 0a 20 20 2a 2a 20 72 6f 77 20 62 65   the.  ** row be
21a30 69 6e 67 20 64 65 6c 65 74 65 64 2e 0a 20 20 2a  ing deleted..  *
21a40 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64  /.  if( db->xUpd
21a50 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70  ateCallback && p
21a60 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
21a70 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
21a80 62 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ble );.    asser
21a90 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  t( pC->rowidIsVa
21aa0 6c 69 64 20 29 3b 20 20 2f 2a 20 6c 61 73 74 52  lid );  /* lastR
21ab0 6f 77 69 64 20 73 65 74 20 62 79 20 70 72 65 76  owid set by prev
21ac0 69 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  ious OP_NotFound
21ad0 20 2a 2f 0a 20 20 20 20 69 4b 65 79 20 3d 20 70   */.    iKey = p
21ae0 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20  C->lastRowid;.  
21af0 7d 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44  }..  /* The OP_D
21b00 65 6c 65 74 65 20 6f 70 63 6f 64 65 20 61 6c 77  elete opcode alw
21b10 61 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f  ays follows an O
21b20 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 4f  P_NotExists or O
21b30 50 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f  P_Last or.  ** O
21b40 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20  P_Column on the 
21b50 73 61 6d 65 20 74 61 62 6c 65 20 77 69 74 68 6f  same table witho
21b60 75 74 20 61 6e 79 20 69 6e 74 65 72 76 65 6e 69  ut any interveni
21b70 6e 67 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 68  ng operations th
21b80 61 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f  at.  ** might mo
21b90 76 65 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65  ve or invalidate
21ba0 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65   the cursor.  He
21bb0 6e 63 65 20 63 75 72 73 6f 72 20 70 43 20 69 73  nce cursor pC is
21bc0 20 61 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e 67   always pointing
21bd0 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77  .  ** to the row
21be0 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61   to be deleted a
21bf0 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 56 64  nd the sqlite3Vd
21c00 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
21c10 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20   operation.  ** 
21c20 62 65 6c 6f 77 20 69 73 20 61 6c 77 61 79 73 20  below is always 
21c30 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e  a no-op and cann
21c40 6f 74 20 66 61 69 6c 2e 20 20 57 65 20 77 69 6c  ot fail.  We wil
21c50 6c 20 72 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c  l run it anyhow,
21c60 20 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f   though,.  ** to
21c70 20 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 66   guard against f
21c80 75 74 75 72 65 20 63 68 61 6e 67 65 73 20 74 6f  uture changes to
21c90 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
21ca0 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73  tor..  **/.  ass
21cb0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
21cc0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
21cd0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
21ce0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
21cf0 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
21d00 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67  !=SQLITE_OK) ) g
21d10 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
21d20 5f 65 72 72 6f 72 3b 0a 0a 20 20 73 71 6c 69 74  _error;..  sqlit
21d30 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64  e3BtreeSetCached
21d40 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Rowid(pC->pCurso
21d50 72 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71  r, 0);.  rc = sq
21d60 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
21d70 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
21d80 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
21d90 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
21da0 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
21db0 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20   update-hook if 
21dc0 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69  required. */.  i
21dd0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
21de0 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43   && db->xUpdateC
21df0 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e  allback && pOp->
21e00 70 34 2e 7a 20 29 7b 0a 20 20 20 20 63 6f 6e 73  p4.z ){.    cons
21e10 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 64 62  t char *zDb = db
21e20 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
21e30 4e 61 6d 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20  Name;.    const 
21e40 63 68 61 72 20 2a 7a 54 62 6c 20 3d 20 70 4f 70  char *zTbl = pOp
21e50 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 64 62 2d 3e  ->p4.z;.    db->
21e60 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
21e70 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20  db->pUpdateArg, 
21e80 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a  SQLITE_DELETE, z
21e90 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b  Db, zTbl, iKey);
21ea0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
21eb0 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20  >iDb>=0 );.  }. 
21ec0 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f   if( pOp->p2 & O
21ed0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
21ee0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
21ef0 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f  break;.}./* Opco
21f00 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a  de: ResetCount *
21f10 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54   * * * *.**.** T
21f20 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
21f30 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
21f40 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20  s copied to the 
21f50 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a  database handle.
21f60 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  ** change counte
21f70 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73  r (returned by s
21f80 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20  ubsequent calls 
21f90 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  to sqlite3_chang
21fa0 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74  es())..** Then t
21fb0 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20  he VMs internal 
21fc0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72  change counter r
21fd0 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54  esets to 0..** T
21fe0 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
21ff0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
22000 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65  .*/.case OP_Rese
22010 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69  tCount: {.  sqli
22020 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
22030 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65  s(db, p->nChange
22040 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  );.  p->nChange 
22050 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
22060 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
22070 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20  erCompare P1 P2 
22080 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69  P3 P4.** Synopsi
22090 73 3a 20 20 69 66 20 6b 65 79 28 50 31 29 21 3d  s:  if key(P1)!=
220a0 72 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20  rtrim(r[P3],P4) 
220b0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31  goto P2.**.** P1
220c0 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72   is a sorter cur
220d0 73 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75  sor. This instru
220e0 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61  ction compares a
220f0 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 0a 2a   prefix of the.*
22100 2a 20 74 68 65 20 72 65 63 6f 72 64 20 62 6c 6f  * the record blo
22110 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  b in register P3
22120 20 61 67 61 69 6e 73 74 20 61 20 70 72 65 66 69   against a prefi
22130 78 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74  x of the entry t
22140 68 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74  hat .** the sort
22150 65 72 20 63 75 72 73 6f 72 20 63 75 72 72 65 6e  er cursor curren
22160 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20  tly points to.  
22170 54 68 65 20 66 69 6e 61 6c 20 50 34 20 66 69 65  The final P4 fie
22180 6c 64 73 20 6f 66 20 62 6f 74 68 0a 2a 2a 20 74  lds of both.** t
22190 68 65 20 50 33 20 61 6e 64 20 73 6f 72 74 65 72  he P3 and sorter
221a0 20 72 65 63 6f 72 64 20 61 72 65 20 69 67 6e 6f   record are igno
221b0 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69  red..**.** If ei
221c0 74 68 65 72 20 50 33 20 6f 72 20 74 68 65 20 73  ther P3 or the s
221d0 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61  orter contains a
221e0 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20   NULL in one of 
221f0 74 68 65 69 72 20 73 69 67 6e 69 66 69 63 61 6e  their significan
22200 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74  t.** fields (not
22210 20 63 6f 75 6e 74 69 6e 67 20 74 68 65 20 50 34   counting the P4
22220 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65   fields at the e
22230 6e 64 20 77 68 69 63 68 20 61 72 65 20 69 67 6e  nd which are ign
22240 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68  ored) then.** th
22250 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  e comparison is 
22260 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20 65 71  assumed to be eq
22270 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20  ual..**.** Fall 
22280 74 68 72 6f 75 67 68 20 74 6f 20 6e 65 78 74 20  through to next 
22290 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 66 20 74  instruction if t
222a0 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20 63  he two records c
222b0 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f 0a  ompare equal to.
222c0 2a 2a 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20  ** each other.  
222d0 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
222e0 65 79 20 61 72 65 20 64 69 66 66 65 72 65 6e 74  ey are different
222f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
22300 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20  terCompare: {.  
22310 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
22320 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74    int res;.  int
22330 20 6e 49 67 6e 6f 72 65 3b 0a 0a 20 20 70 43 20   nIgnore;..  pC 
22340 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
22350 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
22360 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20  sSorter(pC) );. 
22370 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
22380 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
22390 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
223a0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 49 67  [pOp->p3];.  nIg
223b0 6e 6f 72 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  nore = pOp->p4.i
223c0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
223d0 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72  VdbeSorterCompar
223e0 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 49 67 6e  e(pC, pIn3, nIgn
223f0 6f 72 65 2c 20 26 72 65 73 29 3b 0a 20 20 69 66  ore, &res);.  if
22400 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  ( res ){.    pc 
22410 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
22420 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a  .  break;.};../*
22430 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 44   Opcode: SorterD
22440 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ata P1 P2 * * *.
22450 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
22460 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72  2]=data.**.** Wr
22470 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
22480 72 20 50 32 20 74 68 65 20 63 75 72 72 65 6e 74  r P2 the current
22490 20 73 6f 72 74 65 72 20 64 61 74 61 20 66 6f 72   sorter data for
224a0 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 50   sorter cursor P
224b0 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  1..*/.case OP_So
224c0 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20 56 64  rterData: {.  Vd
224d0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
224e0 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
224f0 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70  p->p2];.  pC = p
22500 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22510 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
22520 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72 63  rter(pC) );.  rc
22530 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
22540 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c 20 70  rterRowkey(pC, p
22550 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
22560 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
22570 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a  Data P1 P2 * * *
22580 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
22590 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57  P2]=data.**.** W
225a0 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
225b0 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65  er P2 the comple
225c0 74 65 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20  te row data for 
225d0 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
225e0 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70  ere is no interp
225f0 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
22600 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73  data.  .** It is
22610 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74   just copied ont
22620 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65  o the P2 registe
22630 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a  r exactly as .**
22640 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20   it is found in 
22650 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
22660 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
22670 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
22680 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
22690 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
226a0 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
226b0 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
226c0 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
226d0 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  e..*/./* Opcode:
226e0 20 52 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20   RowKey P1 P2 * 
226f0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
22700 20 72 5b 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a   r[P2]=key.**.**
22710 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
22720 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70  ster P2 the comp
22730 6c 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72  lete row key for
22740 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
22750 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72  here is no inter
22760 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
22770 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20   data.  .** The 
22780 6b 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e  key is copied on
22790 74 6f 20 74 68 65 20 50 33 20 72 65 67 69 73 74  to the P3 regist
227a0 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a  er exactly as .*
227b0 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e  * it is found in
227c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
227d0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
227e0 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
227f0 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61  be pointing to a
22800 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20   valid row (not 
22810 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f  a NULL row).** o
22820 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  f a real table, 
22830 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
22840 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  le..*/.case OP_R
22850 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52  owKey:.case OP_R
22860 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65  owData: {.  Vdbe
22870 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
22880 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
22890 20 75 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36   u32 n;.  i64 n6
228a0 34 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  4;..  pOut = &aM
228b0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d  em[pOp->p2];.  m
228c0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
228d0 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20  p, pOut);..  /* 
228e0 4e 6f 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79  Note that RowKey
228f0 20 61 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65   and RowData are
22900 20 72 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20   really exactly 
22910 74 68 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63  the same instruc
22920 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74  tion */.  assert
22930 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
22940 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
22950 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
22960 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
22970 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
22980 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61  er(pC)==0 );.  a
22990 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
229a0 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  le || pOp->opcod
229b0 65 21 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b  e!=OP_RowData );
229c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
229d0 73 54 61 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70  sTable==0 || pOp
229e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77  ->opcode==OP_Row
229f0 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74  Data );.  assert
22a00 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
22a10 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  ert( pC->nullRow
22a20 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
22a30 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
22a40 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Reg==0 );.  asse
22a50 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
22a60 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
22a70 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61  pC->pCursor;.  a
22a80 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
22a90 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
22aa0 28 70 43 72 73 72 29 20 29 3b 0a 0a 20 20 2f 2a  (pCrsr) );..  /*
22ab0 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61   The OP_RowKey a
22ac0 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70  nd OP_RowData op
22ad0 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c  codes always fol
22ae0 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  low OP_NotExists
22af0 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69   or.  ** OP_Rewi
22b00 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20  nd/Op_Next with 
22b10 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69  no intervening i
22b20 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74  nstructions that
22b30 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74   might invalidat
22b40 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f  e.  ** the curso
22b50 72 2e 20 20 48 65 6e 63 65 20 74 68 65 20 66 6f  r.  Hence the fo
22b60 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74 65 33 56  llowing sqlite3V
22b70 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
22b80 29 20 63 61 6c 6c 20 69 73 20 61 6c 77 61 79 73  ) call is always
22b90 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e  .  ** a no-op an
22ba0 64 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c  d can never fail
22bb0 2e 20 20 42 75 74 20 77 65 20 6c 65 61 76 65 20  .  But we leave 
22bc0 69 74 20 69 6e 20 70 6c 61 63 65 20 61 73 20 61  it in place as a
22bd0 20 73 61 66 65 74 79 2e 0a 20 20 2a 2f 0a 20 20   safety..  */.  
22be0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
22bf0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
22c00 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
22c10 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
22c20 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  pC);.  if( NEVER
22c30 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
22c40 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
22c50 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66  _to_error;..  if
22c60 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
22c70 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
22c80 21 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a  !pC->isTable );.
22c90 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20      VVA_ONLY(rc 
22ca0 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b  =) sqlite3BtreeK
22cb0 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e  eySize(pCrsr, &n
22cc0 36 34 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  64);.    assert(
22cd0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
22ce0 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63  ;    /* True bec
22cf0 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f  ause of CursorMo
22d00 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76  veto() call abov
22d10 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 36 34  e */.    if( n64
22d20 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
22d30 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
22d40 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74   ){.      goto t
22d50 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20  oo_big;.    }.  
22d60 20 20 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a    n = (u32)n64;.
22d70 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 56 41    }else{.    VVA
22d80 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69  _ONLY(rc =) sqli
22d90 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65  te3BtreeDataSize
22da0 28 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20  (pCrsr, &n);.   
22db0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
22dc0 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20  ITE_OK );    /* 
22dd0 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f  DataSize() canno
22de0 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66  t fail */.    if
22df0 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69  ( n>(u32)db->aLi
22e00 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
22e10 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
22e20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
22e30 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
22e40 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
22e50 6f 77 28 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29  ow(pOut, n, 0) )
22e60 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
22e70 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e  m;.  }.  pOut->n
22e80 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79   = n;.  MemSetTy
22e90 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
22ea0 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43  _Blob);.  if( pC
22eb0 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a  ->isTable==0 ){.
22ec0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
22ed0 42 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20  BtreeKey(pCrsr, 
22ee0 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a  0, n, pOut->z);.
22ef0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
22f00 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  = sqlite3BtreeDa
22f10 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ta(pCrsr, 0, n, 
22f20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20  pOut->z);.  }.  
22f30 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
22f40 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20  TE_UTF8;  /* In 
22f50 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73  case the blob is
22f60 20 65 76 65 72 20 63 61 73 74 20 74 6f 20 74 65   ever cast to te
22f70 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d  xt */.  UPDATE_M
22f80 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
22f90 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
22fa0 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
22fb0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
22fc0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64  /* Opcode: Rowid
22fd0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
22fe0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
22ff0 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  rowid.**.** Stor
23000 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
23010 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
23020 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  h is the key of 
23030 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
23040 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75  that.** P1 is cu
23050 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f  rrently point to
23060 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62  ..**.** P1 can b
23070 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69  e either an ordi
23080 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20  nary table or a 
23090 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
230a0 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  There used to.**
230b0 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f   be a separate O
230c0 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20  P_VRowid opcode 
230d0 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72  for use with vir
230e0 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74  tual tables, but
230f0 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63   this.** one opc
23100 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f  ode now works fo
23110 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70  r both table typ
23120 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  es..*/.case OP_R
23130 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
23140 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
23150 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
23160 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
23170 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74    i64 v;.  sqlit
23180 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
23190 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
231a0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
231b0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
231c0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
231d0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
231e0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
231f0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
23200 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
23210 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
23220 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 7c 7c 20  oTableReg==0 || 
23230 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20  pC->nullRow );. 
23240 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
23250 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
23260 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
23270 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c      break;.  }el
23280 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72  se if( pC->defer
23290 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20  redMoveto ){.   
232a0 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54   v = pC->movetoT
232b0 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53  arget;.#ifndef S
232c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
232d0 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20  ALTABLE.  }else 
232e0 69 66 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72  if( pC->pVtabCur
232f0 73 6f 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62  sor ){.    pVtab
23300 20 3d 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73   = pC->pVtabCurs
23310 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70  or->pVtab;.    p
23320 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
23330 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73  pModule;.    ass
23340 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  ert( pModule->xR
23350 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d  owid );.    rc =
23360 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
23370 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  (pC->pVtabCursor
23380 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74  , &v);.    sqlit
23390 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
233a0 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 23 65  sg(p, pVtab);.#e
233b0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
233c0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
233d0 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
233e0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
233f0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72  rsor!=0 );.    r
23400 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
23410 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
23420 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
23430 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
23440 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70  error;.    if( p
23450 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
23460 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 70 43 2d  ){.      v = pC-
23470 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20  >lastRowid;.    
23480 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
23490 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
234a0 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f  ySize(pC->pCurso
234b0 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 61 73  r, &v);.      as
234c0 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
234d0 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79  _OK );  /* Alway
234e0 73 20 73 6f 20 62 65 63 61 75 73 65 20 6f 66 20  s so because of 
234f0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 61  CursorMoveto() a
23500 62 6f 76 65 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  bove */.    }.  
23510 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
23520 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
23530 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f  * Opcode: NullRo
23540 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  w P1 * * * *.**.
23550 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73  ** Move the curs
23560 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20  or P1 to a null 
23570 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c  row.  Any OP_Col
23580 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a  umn operations.*
23590 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69  * that occur whi
235a0 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  le the cursor is
235b0 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77   on the null row
235c0 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20   will always.** 
235d0 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f  write a NULL..*/
235e0 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77  .case OP_NullRow
235f0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
23600 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
23610 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
23620 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
23630 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
23640 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
23650 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
23660 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
23670 3d 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  = 1;.  pC->rowid
23680 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70  IsValid = 0;.  p
23690 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
236a0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
236b0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
236c0 73 6f 72 20 7c 7c 20 70 43 2d 3e 70 56 74 61 62  sor || pC->pVtab
236d0 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20  Cursor );.  if( 
236e0 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20  pC->pCursor ){. 
236f0 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
23700 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70  learCursor(pC->p
23710 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62  Cursor);.  }.  b
23720 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
23730 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a  de: Last P1 P2 *
23740 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
23750 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
23760 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
23770 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  r Next instructi
23780 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
23790 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
237a0 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
237b0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
237c0 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
237d0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
237e0 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
237f0 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
23800 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
23810 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
23820 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
23830 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
23840 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
23850 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
23860 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
23870 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
23880 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20  P_Last: {       
23890 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
238a0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
238b0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
238c0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61  .  int res;..  a
238d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
238e0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
238f0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
23900 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
23910 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
23920 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  C!=0 );.  pCrsr 
23930 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
23940 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65   res = 0;.  asse
23950 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
23960 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
23970 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26  reeLast(pCrsr, &
23980 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  res);.  pC->null
23990 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
239a0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
239b0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 72  eto = 0;.  pC->r
239c0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
239d0 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
239e0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
239f0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e  ;.  if( pOp->p2>
23a00 30 20 26 26 20 72 65 73 20 29 7b 0a 20 20 20 20  0 && res ){.    
23a10 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
23a20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
23a30 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  .../* Opcode: So
23a40 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  rt P1 P2 * * *.*
23a50 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
23a60 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68   does exactly th
23a70 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20  e same thing as 
23a80 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74  OP_Rewind except
23a90 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72   that.** it incr
23aa0 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75  ements an undocu
23ab0 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61  mented global va
23ac0 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20  riable used for 
23ad0 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53  testing..**.** S
23ae0 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70  orting is accomp
23af0 6c 69 73 68 65 64 20 62 79 20 77 72 69 74 69 6e  lished by writin
23b00 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61  g records into a
23b10 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a   sorting index,.
23b20 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e  ** then rewindin
23b30 67 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64  g that index and
23b40 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b   playing it back
23b50 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20   from beginning 
23b60 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75  to.** end.  We u
23b70 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f  se the OP_Sort o
23b80 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66  pcode instead of
23b90 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f   OP_Rewind to do
23ba0 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e   the.** rewindin
23bb0 67 20 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c  g so that the gl
23bc0 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69  obal variable wi
23bd0 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65  ll be incremente
23be0 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73  d and.** regress
23bf0 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65  ion tests can de
23c00 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
23c10 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d  or not the optim
23c20 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65  izer is.** corre
23c30 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20  ctly optimizing 
23c40 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61  out sorts..*/.ca
23c50 73 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74  se OP_SorterSort
23c60 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  :    /* jump */.
23c70 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20  case OP_Sort: { 
23c80 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
23c90 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
23ca0 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73  TEST.  sqlite3_s
23cb0 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73  ort_count++;.  s
23cc0 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
23cd0 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20  unt--;.#endif.  
23ce0 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49  p->aCounter[SQLI
23cf0 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f  TE_STMTSTATUS_SO
23d00 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  RT]++;.  /* Fall
23d10 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
23d20 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20  _Rewind */.}./* 
23d30 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50  Opcode: Rewind P
23d40 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
23d50 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66   The next use of
23d60 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f   the Rowid or Co
23d70 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73  lumn or Next ins
23d80 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20  truction for P1 
23d90 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74  .** will refer t
23da0 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e 74 72  o the first entr
23db0 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
23dc0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
23dd0 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
23de0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d  e or index is em
23df0 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68  pty and P2>0, th
23e00 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
23e10 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
23e20 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74   P2 is 0 or if t
23e30 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
23e40 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
23e50 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
23e60 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
23e70 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
23e80 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a  .case OP_Rewind:
23e90 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
23ea0 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
23eb0 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
23ec0 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
23ed0 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
23ee0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
23ef0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
23f00 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
23f10 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
23f20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
23f30 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
23f40 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f  ter(pC)==(pOp->o
23f50 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
23f60 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d  Sort) );.  res =
23f70 20 31 3b 0a 20 20 69 66 28 20 69 73 53 6f 72 74   1;.  if( isSort
23f80 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63  er(pC) ){.    rc
23f90 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
23fa0 72 74 65 72 52 65 77 69 6e 64 28 64 62 2c 20 70  rterRewind(db, p
23fb0 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73  C, &res);.  }els
23fc0 65 7b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70  e{.    pCrsr = p
23fd0 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20  C->pCursor;.    
23fe0 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
23ff0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
24000 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73  3BtreeFirst(pCrs
24010 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43  r, &res);.    pC
24020 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
24030 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
24040 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
24050 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d  E_STALE;.    pC-
24060 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
24070 30 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c  0;.  }.  pC->nul
24080 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
24090 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
240a0 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70  2>0 && pOp->p2<p
240b0 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20 72  ->nOp );.  if( r
240c0 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
240d0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
240e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
240f0 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50  pcode: Next P1 P
24100 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 41  2 * * P5.**.** A
24110 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31  dvance cursor P1
24120 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
24130 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b  ts to the next k
24140 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
24150 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
24160 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
24170 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79   are no more key
24180 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
24190 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
241a0 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
241b0 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
241c0 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
241d0 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73  or advance was s
241e0 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
241f0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
24200 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  o P2..**.** The 
24210 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
24220 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
24230 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
24240 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74  -table.  P1 must
24250 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70   have.** been op
24260 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  ened prior to th
24270 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65  is opcode or the
24280 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65   program will se
24290 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 50 34  gfault..**.** P4
242a0 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79   is always of ty
242b0 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54  pe P4_ADVANCE. T
242c0 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  he function poin
242d0 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  ter points to.**
242e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78   sqlite3BtreeNex
242f0 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  t()..**.** If P5
24300 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
24310 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
24320 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
24330 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
24340 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
24350 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
24360 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
24370 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
24380 50 72 65 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e  Prev, NextIfOpen
24390 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
243a0 65 78 74 49 66 4f 70 65 6e 20 50 31 20 50 32 20  extIfOpen P1 P2 
243b0 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69  * * P5.**.** Thi
243c0 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
243d0 75 73 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74  ust like OP_Next
243e0 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20   except that if 
243f0 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74  cursor P1 is not
24400 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61  .** open it beha
24410 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a  ves a no-op..*/.
24420 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20  /* Opcode: Prev 
24430 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a  P1 P2 * * P5.**.
24440 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f  ** Back up curso
24450 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
24460 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72  points to the pr
24470 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20  evious key/data 
24480 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74  pair in its.** t
24490 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
244a0 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70  If there is no p
244b0 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75  revious key/valu
244c0 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c  e pairs then fal
244d0 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
244e0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
244f0 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
24500 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61  if the cursor ba
24510 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73  ckup was success
24520 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d  ful,.** jump imm
24530 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
24540 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
24550 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
24560 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
24570 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
24580 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e  .  If P1 is.** n
24590 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65  ot open then the
245a0 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64   behavior is und
245b0 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 34  efined..**.** P4
245c0 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79   is always of ty
245d0 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54  pe P4_ADVANCE. T
245e0 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  he function poin
245f0 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  ter points to.**
24600 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
24610 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  vious()..**.** I
24620 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65  f P5 is positive
24630 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73   and the jump is
24640 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65   taken, then eve
24650 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75  nt counter.** nu
24660 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65  mber P5-1 in the
24670 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
24680 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ent is increment
24690 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ed..*/./* Opcode
246a0 3a 20 50 72 65 76 49 66 4f 70 65 6e 20 50 31 20  : PrevIfOpen P1 
246b0 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  P2 * * P5.**.** 
246c0 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
246d0 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 50 5f 50  s just like OP_P
246e0 72 65 76 20 65 78 63 65 70 74 20 74 68 61 74 20  rev except that 
246f0 69 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20  if cursor P1 is 
24700 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62  not.** open it b
24710 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ehaves a no-op..
24720 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
24730 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d  rNext: {  /* jum
24740 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
24750 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
24760 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ;..  pC = p->apC
24770 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
24780 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
24790 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  pC) );.  rc = sq
247a0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e  lite3VdbeSorterN
247b0 65 78 74 28 64 62 2c 20 70 43 2c 20 26 72 65 73  ext(db, pC, &res
247c0 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74  );.  goto next_t
247d0 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65  ail;.case OP_Pre
247e0 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a  vIfOpen:    /* j
247f0 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ump */.case OP_N
24800 65 78 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a  extIfOpen:    /*
24810 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70   jump */.  if( p
24820 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
24830 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f  ==0 ) break;.  /
24840 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 2a  * Fall through *
24850 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20  /.case OP_Prev: 
24860 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
24870 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74   */.case OP_Next
24880 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
24890 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
248a0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
248b0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
248c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
248d0 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65 28  p->p5<ArraySize(
248e0 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a  p->aCounter) );.
248f0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
24900 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
24910 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
24920 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
24930 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
24940 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
24950 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
24960 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
24970 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e  OP_Next || pOp->
24980 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
24990 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b  ite3BtreeNext );
249a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
249b0 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20  opcode!=OP_Prev 
249c0 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
249d0 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
249e0 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61  ePrevious );.  a
249f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
24a00 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65  de!=OP_NextIfOpe
24a10 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  n || pOp->p4.xAd
24a20 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
24a30 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73  reeNext );.  ass
24a40 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
24a50 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20  !=OP_PrevIfOpen 
24a60 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
24a70 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
24a80 65 50 72 65 76 69 6f 75 73 29 3b 0a 20 20 72 63  ePrevious);.  rc
24a90 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61   = pOp->p4.xAdva
24aa0 6e 63 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  nce(pC->pCursor,
24ab0 20 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74 61 69   &res);.next_tai
24ac0 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  l:.  pC->cacheSt
24ad0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
24ae0 4c 45 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30  LE;.  if( res==0
24af0 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c   ){.    pC->null
24b00 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 63 20  Row = 0;.    pc 
24b10 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
24b20 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70     p->aCounter[p
24b30 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65  Op->p5]++;.#ifde
24b40 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
24b50 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
24b60 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
24b70 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43  .  }else{.    pC
24b80 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
24b90 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73   }.  pC->rowidIs
24ba0 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 67 6f 74  Valid = 0;.  got
24bb0 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
24bc0 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  rrupt;.}../* Opc
24bd0 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50  ode: IdxInsert P
24be0 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20  1 P2 P3 * P5.** 
24bf0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
24c00 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74  P2].**.** Regist
24c10 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53  er P2 holds an S
24c20 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64  QL index key mad
24c30 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d  e using the.** M
24c40 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75  akeRecord instru
24c50 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70  ctions.  This op
24c60 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61 74  code writes that
24c70 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65   key.** into the
24c80 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61   index P1.  Data
24c90 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69   for the entry i
24ca0 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20  s nil..**.** P3 
24cb0 69 73 20 61 20 66 6c 61 67 20 74 68 61 74 20 70  is a flag that p
24cc0 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20 74  rovides a hint t
24cd0 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79  o the b-tree lay
24ce0 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20  er that this.** 
24cf0 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79  insert is likely
24d00 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
24d10 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
24d20 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f  truction only wo
24d30 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e  rks for indices.
24d40 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
24d50 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
24d60 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50  for tables is OP
24d70 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65  _Insert..*/.case
24d80 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74   OP_SorterInsert
24d90 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a  :       /* in2 *
24da0 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73  /.case OP_IdxIns
24db0 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ert: {        /*
24dc0 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75   in2 */.  VdbeCu
24dd0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
24de0 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
24df0 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74  nt nKey;.  const
24e00 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20   char *zKey;..  
24e10 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
24e20 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
24e30 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
24e40 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
24e50 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
24e60 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
24e70 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d  t( isSorter(pC)=
24e80 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  =(pOp->opcode==O
24e90 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20  P_SorterInsert) 
24ea0 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
24eb0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
24ec0 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67  sert( pIn2->flag
24ed0 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
24ee0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
24ef0 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70  ursor;.  if( pOp
24f00 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p5 & OPFLAG_NC
24f10 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
24f20 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20  ge++;.  assert( 
24f30 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73  pCrsr!=0 );.  as
24f40 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
24f50 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45  e==0 );.  rc = E
24f60 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b  xpandBlob(pIn2);
24f70 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
24f80 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20  E_OK ){.    if( 
24f90 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a  isSorter(pC) ){.
24fa0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
24fb0 65 33 56 64 62 65 53 6f 72 74 65 72 57 72 69 74  e3VdbeSorterWrit
24fc0 65 28 64 62 2c 20 70 43 2c 20 70 49 6e 32 29 3b  e(db, pC, pIn2);
24fd0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
24fe0 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e    nKey = pIn2->n
24ff0 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70  ;.      zKey = p
25000 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63  In2->z;.      rc
25010 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
25020 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65  nsert(pCrsr, zKe
25030 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20  y, nKey, "", 0, 
25040 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20  0, pOp->p3, .   
25050 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35         ((pOp->p5
25060 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45   & OPFLAG_USESEE
25070 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73  KRESULT) ? pC->s
25080 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20  eekResult : 0). 
25090 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20           );.    
250a0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
250b0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
250c0 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63  );.      pC->cac
250d0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
250e0 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20  _STALE;.    }.  
250f0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
25100 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65   Opcode: IdxDele
25110 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  te P1 P2 P3 * *.
25120 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
25130 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20  =r[P2@P3].**.** 
25140 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50  The content of P
25150 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  3 registers star
25160 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72  ting at register
25170 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75   P2 form.** an u
25180 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
25190 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  y. This opcode r
251a0 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72  emoves that entr
251b0 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69  y from the .** i
251c0 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63  ndex opened by c
251d0 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ursor P1..*/.cas
251e0 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20  e OP_IdxDelete: 
251f0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
25200 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
25210 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
25220 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
25230 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
25240 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
25250 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
25260 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70  0 && pOp->p2+pOp
25270 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
25280 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
25290 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
252a0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
252b0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
252c0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
252d0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
252e0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
252f0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
25300 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
25310 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
25320 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a  ( pOp->p5==0 );.
25330 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
25340 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72  C->pKeyInfo;.  r
25350 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
25360 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 66 6c 61 67  Op->p3;.  r.flag
25370 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45  s = UNPACKED_PRE
25380 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 72 2e 61  FIX_MATCH;.  r.a
25390 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
253a0 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p2];.#ifdef SQL
253b0 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e  ITE_DEBUG.  { in
253c0 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
253d0 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
253e0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
253f0 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
25400 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d   }.#endif.  rc =
25410 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
25420 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
25430 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
25440 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  s);.  if( rc==SQ
25450 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d  LITE_OK && res==
25460 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
25470 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
25480 28 70 43 72 73 72 29 3b 0a 20 20 7d 0a 20 20 61  (pCrsr);.  }.  a
25490 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
254a0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
254b0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
254c0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
254d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
254e0 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64  Opcode: IdxRowid
254f0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
25500 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
25510 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74  rowid.**.** Writ
25520 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
25530 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
25540 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20  ich is the last 
25550 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63  entry in the rec
25560 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e  ord at.** the en
25570 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
25580 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  ey pointed to by
25590 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69   cursor P1.  Thi
255a0 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64  s integer should
255b0 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64   be.** the rowid
255c0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e   of the table en
255d0 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69  try to which thi
255e0 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f  s index entry po
255f0 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ints..**.** See 
25600 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b  also: Rowid, Mak
25610 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65  eRecord..*/.case
25620 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20   OP_IdxRowid: { 
25630 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25640 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
25650 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  */.  BtCursor *p
25660 43 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73  Crsr;.  VdbeCurs
25670 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f  or *pC;.  i64 ro
25680 77 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  wid;..  assert( 
25690 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
256a0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
256b0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
256c0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
256d0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
256e0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
256f0 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
25700 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
25710 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
25720 4d 5f 4e 75 6c 6c 3b 0a 20 20 72 63 20 3d 20 73  M_Null;.  rc = s
25730 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
25740 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66  Moveto(pC);.  if
25750 28 20 4e 45 56 45 52 28 72 63 29 20 29 20 67 6f  ( NEVER(rc) ) go
25760 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
25770 65 72 72 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  error;.  assert(
25780 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
25790 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
257a0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
257b0 3d 30 20 29 3b 0a 20 20 69 66 28 20 21 70 43 2d  =0 );.  if( !pC-
257c0 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
257d0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
257e0 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43 72  IdxRowid(db, pCr
257f0 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20  sr, &rowid);.   
25800 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
25810 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
25820 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
25830 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  ror;.    }.    p
25840 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64  Out->u.i = rowid
25850 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
25860 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  s = MEM_Int;.  }
25870 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
25880 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31  Opcode: IdxGE P1
25890 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
258a0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
258b0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
258c0 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
258d0 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
258e0 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
258f0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
25900 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
25910 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70  the ROWID.  Comp
25920 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
25930 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
25940 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
25950 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
25960 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
25970 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e  ing the ROWID on
25980 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
25990 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
259a0 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
259b0 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
259c0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
259d0 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  alue.** then jum
259e0 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77  p to P2.  Otherw
259f0 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
25a00 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
25a10 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
25a20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P5 is non-zer
25a30 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76  o then the key v
25a40 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73 65  alue is increase
25a50 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20  d by an epsilon 
25a60 0a 2a 2a 20 70 72 69 6f 72 20 74 6f 20 74 68 65  .** prior to the
25a70 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68   comparison.  Th
25a80 69 73 20 6d 61 6b 65 20 74 68 65 20 6f 70 63 6f  is make the opco
25a90 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78  de work like Idx
25aa0 47 54 20 65 78 63 65 70 74 0a 2a 2a 20 74 68 61  GT except.** tha
25ab0 74 20 69 66 20 74 68 65 20 6b 65 79 20 66 72 6f  t if the key fro
25ac0 6d 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  m register P3 is
25ad0 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
25ae0 20 6b 65 79 20 69 6e 20 74 68 65 20 63 75 72 73   key in the curs
25af0 6f 72 2c 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c  or,.** the resul
25b00 74 20 69 73 20 66 61 6c 73 65 20 77 68 65 72 65  t is false where
25b10 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 74  as it would be t
25b20 72 75 65 20 77 69 74 68 20 49 64 78 47 54 2e 0a  rue with IdxGT..
25b30 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
25b40 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20  xLT P1 P2 P3 P4 
25b50 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
25b60 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
25b70 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
25b80 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
25b90 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
25ba0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
25bb0 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
25bc0 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44 2e  omits the ROWID.
25bd0 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
25be0 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
25bf0 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74   the index .** t
25c00 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
25c10 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
25c20 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f   ignoring the RO
25c30 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e  WID on the P1 in
25c40 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  dex..**.** If th
25c50 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
25c60 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
25c70 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e  e key value then
25c80 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20   jump to P2..** 
25c90 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
25ca0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
25cb0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
25cc0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
25cd0 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68 65  on-zero then the
25ce0 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69 6e   key value is in
25cf0 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65 70  creased by an ep
25d00 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20  silon prior .** 
25d10 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  to the compariso
25d20 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 73 20 74  n.  This makes t
25d30 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c  he opcode work l
25d40 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61  ike IdxLE..*/.ca
25d50 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20  se OP_IdxLT:    
25d60 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
25d70 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20  .case OP_IdxGE: 
25d80 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
25d90 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
25da0 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
25db0 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
25dc0 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d r;..  assert( 
25dd0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
25de0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
25df0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
25e00 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
25e10 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
25e20 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
25e30 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73  sOrdered );.  as
25e40 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
25e50 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28  r!=0);.  assert(
25e60 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
25e70 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
25e80 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c  rt( pOp->p5==0 |
25e90 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a  | pOp->p5==1 );.
25ea0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25eb0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
25ec0 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  );.  r.pKeyInfo 
25ed0 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
25ee0 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
25ef0 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69  6)pOp->p4.i;.  i
25f00 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
25f10 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
25f20 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55  CKED_INCRKEY | U
25f30 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d  NPACKED_PREFIX_M
25f40 41 54 43 48 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ATCH;.  }else{. 
25f50 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50     r.flags = UNP
25f60 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54  ACKED_PREFIX_MAT
25f70 43 48 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d  CH;.  }.  r.aMem
25f80 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
25f90 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ];.#ifdef SQLITE
25fa0 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74 20 69  _DEBUG.  { int i
25fb0 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e  ; for(i=0; i<r.n
25fc0 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65  Field; i++) asse
25fd0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
25fe0 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a  r.aMem[i]) ); }.
25ff0 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20 73 71  #endif.  rc = sq
26000 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43  lite3VdbeIdxKeyC
26010 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20 26  ompare(pC, &r, &
26020 72 65 73 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  res);.  if( pOp-
26030 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
26040 54 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 2d  T ){.    res = -
26050 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  res;.  }else{.  
26060 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
26070 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20  pcode==OP_IdxGE 
26080 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20  );.    res++;.  
26090 7d 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b  }.  if( res>0 ){
260a0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
260b0 32 20 2d 20 31 20 3b 0a 20 20 7d 0a 20 20 62 72  2 - 1 ;.  }.  br
260c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
260d0 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50 32  e: Destroy P1 P2
260e0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65   P3 * *.**.** De
260f0 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64  lete an entire d
26100 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
26110 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
26120 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 61  t page in the da
26130 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69  tabase.** file i
26140 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a  s given by P1..*
26150 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62  *.** The table b
26160 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69  eing destroyed i
26170 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s in the main da
26180 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
26190 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d  3==0.  If.** P3=
261a0 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  =1 then the tabl
261b0 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73  e to be clear is
261c0 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   in the auxiliar
261d0 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  y database file.
261e0 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ** that is used 
261f0 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20  to store tables 
26200 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45  create using CRE
26210 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41  ATE TEMPORARY TA
26220 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55  BLE..**.** If AU
26230 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62  TOVACUUM is enab
26240 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 70  led then it is p
26250 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f  ossible that ano
26260 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a  ther root page.*
26270 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64  * might be moved
26280 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20   into the newly 
26290 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67  deleted root pag
262a0 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  e in order to ke
262b0 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70  ep all.** root p
262c0 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20  ages contiguous 
262d0 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
262e0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
262f0 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a  .  The former.**
26300 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f   value of the ro
26310 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76  ot page that mov
26320 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62  ed - its value b
26330 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f  efore the move o
26340 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20  ccurred -.** is 
26350 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
26360 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61  er P2.  If no pa
26370 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20  ge .** movement 
26380 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65  was required (be
26390 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20  cause the table 
263a0 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61  being dropped wa
263b0 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68  s already .** th
263c0 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68  e last one in th
263d0 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e  e database) then
263e0 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65   a zero is store
263f0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
26400 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55  ..** If AUTOVACU
26410 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74  UM is disabled t
26420 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74  hen a zero is st
26430 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
26440 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
26450 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61  lso: Clear.*/.ca
26460 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b  se OP_Destroy: {
26470 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
26480 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
26490 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69   iMoved;.  int i
264a0 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70 56 64  Cnt;.  Vdbe *pVd
264b0 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a  be;.  int iDb;..
264c0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
264d0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 23 69 66 6e  dOnly==0 );.#ifn
264e0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
264f0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
26500 43 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70  Cnt = 0;.  for(p
26510 56 64 62 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20  Vdbe=db->pVdbe; 
26520 70 56 64 62 65 3b 20 70 56 64 62 65 20 3d 20 70  pVdbe; pVdbe = p
26530 56 64 62 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20  Vdbe->pNext){.  
26540 20 20 69 66 28 20 70 56 64 62 65 2d 3e 6d 61 67    if( pVdbe->mag
26550 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic==VDBE_MAGIC_R
26560 55 4e 20 26 26 20 70 56 64 62 65 2d 3e 62 49 73  UN && pVdbe->bIs
26570 52 65 61 64 65 72 20 0a 20 20 20 20 20 26 26 20  Reader .     && 
26580 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74  pVdbe->inVtabMet
26590 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e  hod<2 && pVdbe->
265a0 70 63 3e 3d 30 20 0a 20 20 20 20 29 7b 0a 20 20  pc>=0 .    ){.  
265b0 20 20 20 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20      iCnt++;.    
265c0 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43  }.  }.#else.  iC
265d0 6e 74 20 3d 20 64 62 2d 3e 6e 56 64 62 65 52 65  nt = db->nVdbeRe
265e0 61 64 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75  ad;.#endif.  pOu
265f0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
26600 75 6c 6c 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e  ull;.  if( iCnt>
26610 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  1 ){.    rc = SQ
26620 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20  LITE_LOCKED;.   
26630 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20   p->errorAction 
26640 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65  = OE_Abort;.  }e
26650 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70  lse{.    iDb = p
26660 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65  Op->p3;.    asse
26670 72 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20  rt( iCnt==1 );. 
26680 20 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62     assert( (p->b
26690 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44  treeMask & (((yD
266a0 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29 29 21  bMask)1)<<iDb))!
266b0 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =0 );.    rc = s
266c0 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54  qlite3BtreeDropT
266d0 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62  able(db->aDb[iDb
266e0 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
266f0 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f  &iMoved);.    pO
26700 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
26710 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  Int;.    pOut->u
26720 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66  .i = iMoved;.#if
26730 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26740 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20  _AUTOVACUUM.    
26750 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
26760 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29  K && iMoved!=0 )
26770 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
26780 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c  ootPageMoved(db,
26790 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f   iDb, iMoved, pO
267a0 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a  p->p1);.      /*
267b0 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20   All OP_Destroy 
267c0 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72  operations occur
267d0 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72   on the same btr
267e0 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  ee */.      asse
267f0 72 74 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f  rt( resetSchemaO
26800 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73  nFault==0 || res
26810 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d  etSchemaOnFault=
26820 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20  =iDb+1 );.      
26830 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
26840 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20  lt = iDb+1;.    
26850 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62  }.#endif.  }.  b
26860 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
26870 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20  de: Clear P1 P2 
26880 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20  P3.**.** Delete 
26890 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  all contents of 
268a0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
268b0 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
268c0 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69  e root page.** i
268d0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
268e0 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
268f0 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65  P1.  But, unlike
26900 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74   Destroy, do not
26910 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74  .** remove the t
26920 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72  able or index fr
26930 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
26940 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  file..**.** The 
26950 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
26960 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e  r is in the main
26970 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
26980 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20  f P2==0.  If.** 
26990 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74  P2==1 then the t
269a0 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72  able to be clear
269b0 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c   is in the auxil
269c0 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
269d0 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73  le.** that is us
269e0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c  ed to store tabl
269f0 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20  es create using 
26a00 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
26a10 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66   TABLE..**.** If
26a20 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   the P3 value is
26a30 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
26a40 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72  the table referr
26a50 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e  ed to must be an
26a60 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65  .** intkey table
26a70 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20   (an SQL table, 
26a80 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49  not an index). I
26a90 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
26aa0 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63  row change .** c
26ab0 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ount is incremen
26ac0 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65  ted by the numbe
26ad0 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
26ae0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
26af0 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20  ared. .** If P3 
26b00 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
26b10 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76  zero, then the v
26b20 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72  alue stored in r
26b30 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a  egister P3 is.**
26b40 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65   also incremente
26b50 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
26b60 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
26b70 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
26b80 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
26b90 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63  so: Destroy.*/.c
26ba0 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a  ase OP_Clear: {.
26bb0 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20    int nChange;. 
26bc0 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  .  nChange = 0;.
26bd0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
26be0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73  dOnly==0 );.  as
26bf0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 21 3d 31  sert( pOp->p1!=1
26c00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
26c10 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
26c20 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70  (yDbMask)1)<<pOp
26c30 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72  ->p2))!=0 );.  r
26c40 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
26c50 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20  ClearTable(.    
26c60 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70    db->aDb[pOp->p
26c70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  2].pBt, pOp->p1,
26c80 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68   (pOp->p3 ? &nCh
26c90 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20  ange : 0).  );. 
26ca0 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
26cb0 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b      p->nChange +
26cc0 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69  = nChange;.    i
26cd0 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a  f( pOp->p3>0 ){.
26ce0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
26cf0 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
26d00 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
26d10 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
26d20 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
26d30 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65  >p3]);.      aMe
26d40 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b  m[pOp->p3].u.i +
26d50 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d  = nChange;.    }
26d60 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
26d70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61  ./* Opcode: Crea
26d80 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20  teTable P1 P2 * 
26d90 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
26da0 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d   r[P2]=root iDb=
26db0 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  P1.**.** Allocat
26dc0 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  e a new table in
26dd0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
26de0 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30  se file if P1==0
26df0 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75   or in the.** au
26e00 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
26e10 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f   file if P1==1 o
26e20 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64  r in an attached
26e30 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20   database if.** 
26e40 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65  P1>1.  Write the
26e50 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
26e60 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62  r of the new tab
26e70 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  le into.** regis
26e80 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65  ter P2.**.** The
26e90 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
26ea0 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20  een a table and 
26eb0 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69 73  an index is this
26ec0 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a  :  A table must.
26ed0 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74 65  ** have a 4-byte
26ee0 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64   integer key and
26ef0 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74 72   can have arbitr
26f00 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e  ary data.  An in
26f10 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72  dex.** has an ar
26f20 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74 20  bitrary key but 
26f30 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53  no data..**.** S
26f40 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49  ee also: CreateI
26f50 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ndex.*/./* Opcod
26f60 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20 50  e: CreateIndex P
26f70 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
26f80 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
26f90 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20  ot iDb=P1.**.** 
26fa0 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69  Allocate a new i
26fb0 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e  ndex in the main
26fc0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
26fd0 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68  f P1==0 or in th
26fe0 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64  e.** auxiliary d
26ff0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
27000 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61  P1==1 or in an a
27010 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
27020 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72   if.** P1>1.  Wr
27030 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67  ite the root pag
27040 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
27050 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a  new table into.*
27060 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  * register P2..*
27070 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e  *.** See documen
27080 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65  tation on OP_Cre
27090 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64  ateTable for add
270a0 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
270b0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
270c0 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20  CreateIndex:    
270d0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
270e0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61  prerelease */.ca
270f0 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  se OP_CreateTabl
27100 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  e: {          /*
27110 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
27120 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a   */.  int pgno;.
27130 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44    int flags;.  D
27140 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20  b *pDb;..  pgno 
27150 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
27160 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
27170 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
27180 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
27190 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
271a0 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31  Mask)1)<<pOp->p1
271b0 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ))!=0 );.  asser
271c0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
271d0 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
271e0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
271f0 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
27200 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  Bt!=0 );.  if( p
27210 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  Op->opcode==OP_C
27220 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20  reateTable ){.  
27230 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52    /* flags = BTR
27240 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20  EE_INTKEY; */.  
27250 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f    flags = BTREE_
27260 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b  INTKEY;.  }else{
27270 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52  .    flags = BTR
27280 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a  EE_BLOBKEY;.  }.
27290 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
272a0 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
272b0 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Db->pBt, &pgno, 
272c0 66 6c 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e  flags);.  pOut->
272d0 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72  u.i = pgno;.  br
272e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
272f0 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50  e: ParseSchema P
27300 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
27310 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20   Read and parse 
27320 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  all entries from
27330 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54   the SQLITE_MAST
27340 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61  ER table of data
27350 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20  base P1.** that 
27360 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20  match the WHERE 
27370 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a  clause P4. .**.*
27380 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
27390 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65 72  vokes the parser
273a0 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77   to create a new
273b0 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
273c0 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74  ,.** then runs t
273d0 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d  he new virtual m
273e0 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74  achine.  It is t
273f0 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74  hus a re-entrant
27400 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
27410 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a   OP_ParseSchema:
27420 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20   {.  int iDb;.  
27430 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73  const char *zMas
27440 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71  ter;.  char *zSq
27450 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e  l;.  InitData in
27460 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e  itData;..  /* An
27470 79 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  y prepared state
27480 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65  ment that invoke
27490 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  s this opcode wi
274a0 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a  ll hold mutexes.
274b0 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74    ** on every bt
274c0 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61 20  ree.  This is a 
274d0 70 72 65 72 65 71 75 69 73 69 74 65 20 66 6f 72  prerequisite for
274e0 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20   invoking .  ** 
274f0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
27500 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64  ack()..  */.#ifd
27510 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
27520 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62    for(iDb=0; iDb
27530 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29  <db->nDb; iDb++)
27540 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44  {.    assert( iD
27550 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42  b==1 || sqlite3B
27560 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64  treeHoldsMutex(d
27570 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29  b->aDb[iDb].pBt)
27580 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a   );.  }.#endif..
27590 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
275a0 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
275b0 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
275c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
275d0 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
275e0 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
275f0 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73  aded) );.  /* Us
27600 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69  ed to be a condi
27610 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20  tional */ {.    
27620 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41  zMaster = SCHEMA
27630 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20  _TABLE(iDb);.   
27640 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64   initData.db = d
27650 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  b;.    initData.
27660 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
27670 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72     initData.pzEr
27680 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d  rMsg = &p->zErrM
27690 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73  sg;.    zSql = s
276a0 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
276b0 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  ,.       "SELECT
276c0 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c   name, rootpage,
276d0 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25   sql FROM '%q'.%
276e0 73 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52  s WHERE %s ORDER
276f0 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20   BY rowid",.    
27700 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e     db->aDb[iDb].
27710 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20  zName, zMaster, 
27720 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
27730 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20  if( zSql==0 ){. 
27740 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
27750 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73  _NOMEM;.    }els
27760 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
27770 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d   db->init.busy==
27780 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  0 );.      db->i
27790 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20  nit.busy = 1;.  
277a0 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20      initData.rc 
277b0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
277c0 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e     assert( !db->
277d0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
277e0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
277f0 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c  e3_exec(db, zSql
27800 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  , sqlite3InitCal
27810 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61  lback, &initData
27820 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
27830 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc==SQLITE_OK ) 
27840 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63  rc = initData.rc
27850 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  ;.      sqlite3D
27860 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b  bFree(db, zSql);
27870 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
27880 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  busy = 0;.    }.
27890 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 73    }.  if( rc ) s
278a0 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
278b0 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
278c0 6e 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d  n(db);.  if( rc=
278d0 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
278e0 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
278f0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20  ;.  }.  break;  
27900 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .}..#if !defined
27910 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
27920 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  LYZE)./* Opcode:
27930 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31   LoadAnalysis P1
27940 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52   * * * *.**.** R
27950 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ead the sqlite_s
27960 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64  tat1 table for d
27970 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c  atabase P1 and l
27980 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a  oad the content.
27990 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
279a0 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e   into the intern
279b0 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61  al index hash ta
279c0 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ble.  This will 
279d0 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61  cause.** the ana
279e0 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64  lysis to be used
279f0 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20   when preparing 
27a00 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71  all subsequent q
27a10 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20  ueries..*/.case 
27a20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a  OP_LoadAnalysis:
27a30 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
27a40 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
27a50 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
27a60 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c  rc = sqlite3Anal
27a70 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70  ysisLoad(db, pOp
27a80 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20  ->p1);.  break; 
27a90 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64   .}.#endif /* !d
27aa0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
27ab0 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a  IT_ANALYZE) */..
27ac0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
27ad0 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  able P1 * * P4 *
27ae0 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
27af0 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
27b00 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
27b10 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
27b20 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c  ribe.** the tabl
27b30 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  e named P4 in da
27b40 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
27b50 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
27b60 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64   a table.** is d
27b70 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20  ropped in order 
27b80 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
27b90 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
27ba0 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
27bb0 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
27bc0 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
27bd0 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
27be0 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20  _DropTable: {.  
27bf0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
27c00 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20  DeleteTable(db, 
27c10 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
27c20 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
27c30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
27c40 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20  Index P1 * * P4 
27c50 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
27c60 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
27c70 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
27c80 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
27c90 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64  cribe.** the ind
27ca0 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  ex named P4 in d
27cb0 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
27cc0 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
27cd0 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73  r an index.** is
27ce0 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65   dropped in orde
27cf0 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
27d00 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
27d10 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
27d20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
27d30 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
27d40 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
27d50 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a  OP_DropIndex: {.
27d60 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
27d70 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62  ndDeleteIndex(db
27d80 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
27d90 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
27da0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  }../* Opcode: Dr
27db0 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a  opTrigger P1 * *
27dc0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
27dd0 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
27de0 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
27df0 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
27e00 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
27e10 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50   trigger named P
27e20 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
27e30 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
27e40 64 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65  d after a trigge
27e50 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  r.** is dropped 
27e60 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
27e70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
27e80 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
27e90 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
27ea0 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
27eb0 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
27ec0 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72  /.case OP_DropTr
27ed0 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74  igger: {.  sqlit
27ee0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
27ef0 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70  eTrigger(db, pOp
27f00 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
27f10 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  ;.  break;.}...#
27f20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
27f30 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
27f40 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  CK./* Opcode: In
27f50 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20  tegrityCk P1 P2 
27f60 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f  P3 * P5.**.** Do
27f70 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20   an analysis of 
27f80 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  the currently op
27f90 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74  en database.  St
27fa0 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ore in.** regist
27fb0 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f  er P1 the text o
27fc0 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  f an error messa
27fd0 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e  ge describing an
27fe0 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49  y problems..** I
27ff0 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72  f no problems ar
28000 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61  e found, store a
28010 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65   NULL in registe
28020 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  r P1..**.** The 
28030 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74  register P3 cont
28040 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  ains the maximum
28050 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77   number of allow
28060 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74  ed errors..** At
28070 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72   most reg(P3) er
28080 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70  rors will be rep
28090 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68  orted..** In oth
280a0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e  er words, the an
280b0 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20  alysis stops as 
280c0 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20  soon as reg(P1) 
280d0 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73  errors are .** s
280e0 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73  een.  Reg(P1) is
280f0 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
28100 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  e number of erro
28110 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a  rs remaining..**
28120 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67  .** The root pag
28130 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c  e numbers of all
28140 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64   tables in the d
28150 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65  atabase are inte
28160 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e  ger.** stored in
28170 20 72 65 67 28 50 31 29 2c 20 72 65 67 28 50 31   reg(P1), reg(P1
28180 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20  +1), reg(P1+2), 
28190 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20  ....  There are 
281a0 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74  P2 tables.** tot
281b0 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  al..**.** If P5 
281c0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
281d0 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f   check is done o
281e0 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
281f0 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
28200 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64  , not the main d
28210 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
28220 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
28230 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
28240 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69  ment the integri
28250 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e  ty_check pragma.
28260 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
28270 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74  grityCk: {.  int
28280 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20   nRoot;      /* 
28290 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
282a0 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d   to check.  (Num
282b0 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65  ber of root page
282c0 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52  s.) */.  int *aR
282d0 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oot;     /* Arra
282e0 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75  y of rootpage nu
282f0 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73  mbers for tables
28300 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a   to be checked *
28310 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20  /.  int j;      
28320 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
28330 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ter */.  int nEr
28340 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
28350 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70  er of errors rep
28360 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  orted */.  char 
28370 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65  *z;        /* Te
28380 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20  xt of the error 
28390 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20  report */.  Mem 
283a0 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52  *pnErr;     /* R
283b0 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20  egister keeping 
283c0 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20  track of errors 
283d0 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20  remaining */..  
283e0 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
283f0 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20  ader );.  nRoot 
28400 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
28410 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a  ert( nRoot>0 );.
28420 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65    aRoot = sqlite
28430 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c  3DbMallocRaw(db,
28440 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52   sizeof(int)*(nR
28450 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20  oot+1) );.  if( 
28460 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20  aRoot==0 ) goto 
28470 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74  no_mem;.  assert
28480 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
28490 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
284a0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
284b0 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b    pnErr = &aMem[
284c0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
284d0 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67  rt( (pnErr->flag
284e0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
284f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e  );.  assert( (pn
28500 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Err->flags & (ME
28510 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
28520 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  ==0 );.  pIn1 = 
28530 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
28540 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f    for(j=0; j<nRo
28550 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52  ot; j++){.    aR
28560 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71  oot[j] = (int)sq
28570 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
28580 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d  e(&pIn1[j]);.  }
28590 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b  .  aRoot[j] = 0;
285a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
285b0 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p5<db->nDb );.  
285c0 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
285d0 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
285e0 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 35 29 29  sk)1)<<pOp->p5))
285f0 21 3d 30 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c  !=0 );.  z = sql
28600 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 72 69  ite3BtreeIntegri
28610 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b  tyCheck(db->aDb[
28620 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52  pOp->p5].pBt, aR
28630 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20  oot, nRoot,.    
28640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28650 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
28660 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e  t)pnErr->u.i, &n
28670 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44  Err);.  sqlite3D
28680 62 46 72 65 65 28 64 62 2c 20 61 52 6f 6f 74 29  bFree(db, aRoot)
28690 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d  ;.  pnErr->u.i -
286a0 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65  = nErr;.  sqlite
286b0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
286c0 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72  pIn1);.  if( nEr
286d0 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  r==0 ){.    asse
286e0 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65  rt( z==0 );.  }e
286f0 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a  lse if( z==0 ){.
28700 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
28710 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
28720 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
28730 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20  tr(pIn1, z, -1, 
28740 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c  SQLITE_UTF8, sql
28750 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a  ite3_free);.  }.
28760 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
28770 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73  BSIZE(pIn1);.  s
28780 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
28790 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65  Encoding(pIn1, e
287a0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61  ncoding);.  brea
287b0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
287c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
287d0 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f  RITY_CHECK */../
287e0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
287f0 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Add P1 P2 * * *.
28800 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 6f  ** Synopsis:  ro
28810 77 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a  wset(P1)=r[P2].*
28820 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20  *.** Insert the 
28830 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65  integer value he
28840 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50  ld by register P
28850 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e  2 into a boolean
28860 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69   index.** held i
28870 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
28880 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f  *.** An assertio
28890 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73  n fails if P2 is
288a0 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e   not an integer.
288b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
288c0 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f  etAdd: {       /
288d0 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20  * in1, in2 */.  
288e0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
288f0 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
28900 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
28910 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d    assert( (pIn2-
28920 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
28930 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70  )!=0 );.  if( (p
28940 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
28950 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20  _RowSet)==0 ){. 
28960 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
28970 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29  mSetRowSet(pIn1)
28980 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
28990 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
289a0 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Set)==0 ) goto n
289b0 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c  o_mem;.  }.  sql
289c0 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
289d0 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
289e0 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn2->u.i);.  
289f0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
28a00 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20  ode: RowSetRead 
28a10 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
28a20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
28a30 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a  =rowset(P1).**.*
28a40 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73 6d  * Extract the sm
28a50 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f  allest value fro
28a60 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  m boolean index 
28a70 50 31 20 61 6e 64 20 70 75 74 20 74 68 61 74 20  P1 and put that 
28a80 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  value into.** re
28a90 67 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20  gister P3.  Or, 
28aa0 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  if boolean index
28ab0 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79   P1 is initially
28ac0 20 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33   empty, leave P3
28ad0 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e  .** unchanged an
28ae0 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  d jump to instru
28af0 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ction P2..*/.cas
28b00 65 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a  e OP_RowSetRead:
28b10 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
28b20 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in1, out3 */. 
28b30 20 69 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e   i64 val;..  pIn
28b40 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
28b50 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
28b60 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
28b70 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73  Set)==0 .   || s
28b80 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
28b90 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
28ba0 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a  , &val)==0.  ){.
28bb0 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65      /* The boole
28bc0 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  an index is empt
28bd0 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  y */.    sqlite3
28be0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
28bf0 49 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d 20 70  In1);.    pc = p
28c00 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65  Op->p2 - 1;.  }e
28c10 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61  lse{.    /* A va
28c20 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66  lue was pulled f
28c30 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f  rom the index */
28c40 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
28c50 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
28c60 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29  m[pOp->p3], val)
28c70 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65  ;.  }.  goto che
28c80 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
28c90 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
28ca0 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32  RowSetTest P1 P2
28cb0 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73   P3 P4.** Synops
28cc0 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20  is: if r[P3] in 
28cd0 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20  rowset(P1) goto 
28ce0 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
28cf0 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20  r P3 is assumed 
28d00 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74  to hold a 64-bit
28d10 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
28d20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  If register P1.*
28d30 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77  * contains a Row
28d40 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74  Set object and t
28d50 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  hat RowSet objec
28d60 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68  t contains.** th
28d70 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20  e value held in 
28d80 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69  P3, jump to regi
28d90 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69  ster P2. Otherwi
28da0 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a  se, insert the.*
28db0 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20  * integer in P3 
28dc0 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20  into the RowSet 
28dd0 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20  and continue on 
28de0 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f  to the.** next o
28df0 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  pcode..**.** The
28e00 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69   RowSet object i
28e10 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20  s optimized for 
28e20 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73  the case where s
28e30 75 63 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a  uccessive sets.*
28e40 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77  * of integers, w
28e50 68 65 72 65 20 65 61 63 68 20 73 65 74 20 63 6f  here each set co
28e60 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63  ntains no duplic
28e70 61 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a  ates. Each set.*
28e80 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69  * of values is i
28e90 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 75  dentified by a u
28ea0 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20  nique P4 value. 
28eb0 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a  The first set.**
28ec0 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30   must have P4==0
28ed0 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20  , the final set 
28ee0 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20  P4=-1.  P4 must 
28ef0 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a  be either -1 or.
28f00 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e  ** non-negative.
28f10 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69    For non-negati
28f20 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20  ve values of P4 
28f30 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34  only the lower 4
28f40 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69 67  .** bits are sig
28f50 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20  nificant..**.** 
28f60 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69  This allows opti
28f70 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77  mizations: (a) w
28f80 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20  hen P4==0 there 
28f90 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65  is no need to te
28fa0 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74  st.** the rowset
28fb0 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20   object for P3, 
28fc0 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e 74  as it is guarant
28fd0 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61  eed not to conta
28fe0 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68  in it,.** (b) wh
28ff0 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20  en P4==-1 there 
29000 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e  is no need to in
29010 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20  sert the value, 
29020 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65  as it will.** ne
29030 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66 6f  ver be tested fo
29040 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20  r, and (c) when 
29050 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20  a value that is 
29060 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69 73  part of set X is
29070 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68  .** inserted, th
29080 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
29090 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65 20  o search to see 
290a0 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  if the same valu
290b0 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75  e was.** previou
290c0 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73 20  sly inserted as 
290d0 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f  part of set X (o
290e0 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70 72  nly if it was pr
290f0 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65  eviously.** inse
29100 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  rted as part of 
29110 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e  some other set).
29120 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
29130 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20  etTest: {       
29140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
29150 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
29160 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20  */.  int iSet;. 
29170 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20   int exists;..  
29180 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
29190 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20  ->p1];.  pIn3 = 
291a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
291b0 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34    iSet = pOp->p4
291c0 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  .i;.  assert( pI
291d0 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n3->flags&MEM_In
291e0 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  t );..  /* If th
291f0 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20  ere is anything 
29200 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77  other than a row
29210 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65  set object in me
29220 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20  mory cell P1,.  
29230 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77  ** delete it now
29240 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20   and initialize 
29250 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79  P1 with an empty
29260 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69   rowset.  */.  i
29270 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
29280 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
29290 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
292a0 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28  dbeMemSetRowSet(
292b0 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28  pIn1);.    if( (
292c0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
292d0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67  M_RowSet)==0 ) g
292e0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
292f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29300 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
29310 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53   );.  assert( iS
29320 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d  et==-1 || iSet>=
29330 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20  0 );.  if( iSet 
29340 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20  ){.    exists = 
29350 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73  sqlite3RowSetTes
29360 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
29370 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  t, .            
29380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29390 20 20 20 28 75 38 29 28 69 53 65 74 3e 3d 30 20     (u8)(iSet>=0 
293a0 3f 20 69 53 65 74 20 26 20 30 78 66 20 3a 20 30  ? iSet & 0xf : 0
293b0 78 66 66 29 2c 0a 20 20 20 20 20 20 20 20 20 20  xff),.          
293c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293d0 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29 3b       pIn3->u.i);
293e0 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73 20  .    if( exists 
293f0 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
29400 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20  p->p2 - 1;.     
29410 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
29420 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20  }.  if( iSet>=0 
29430 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f  ){.    sqlite3Ro
29440 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d  wSetInsert(pIn1-
29450 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33  >u.pRowSet, pIn3
29460 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72  ->u.i);.  }.  br
29470 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
29480 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
29490 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  GGER../* Opcode:
294a0 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50   Program P1 P2 P
294b0 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65  3 P4 *.**.** Exe
294c0 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65 72  cute the trigger
294d0 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20   program passed 
294e0 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f 53  as P4 (type P4_S
294f0 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a  UBPROGRAM). .**.
29500 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74  ** P1 contains t
29510 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68  he address of th
29520 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68  e memory cell th
29530 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
29540 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a  first memory .**
29550 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61   cell in an arra
29560 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64  y of values used
29570 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   as arguments to
29580 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
29590 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e  . P2 .** contain
295a0 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74 6f  s the address to
295b0 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20   jump to if the 
295c0 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f  sub-program thro
295d0 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a  ws an IGNORE .**
295e0 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67   exception using
295f0 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75 6e   the RAISE() fun
29600 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20  ction. Register 
29610 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P3 contains the 
29620 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61  address .** of a
29630 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
29640 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e 74  this (the parent
29650 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73 65  ) VM that is use
29660 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68  d to allocate th
29670 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71  e .** memory req
29680 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75 62  uired by the sub
29690 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65  -vdbe at runtime
296a0 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
296b0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56  pointer to the V
296c0 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  M containing the
296d0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
296e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f  ..*/.case OP_Pro
296f0 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f  gram: {        /
29700 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  * jump */.  int 
29710 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  nMem;           
29720 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
29730 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   memory register
29740 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61  s for sub-progra
29750 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65  m */.  int nByte
29760 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
29770 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69  * Bytes of runti
29780 6d 65 20 73 70 61 63 65 20 72 65 71 75 69 72 65  me space require
29790 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61  d for sub-progra
297a0 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b  m */.  Mem *pRt;
297b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
297c0 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c  * Register to al
297d0 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73  locate runtime s
297e0 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  pace */.  Mem *p
297f0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
29800 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65    /* Used to ite
29810 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d  rate through mem
29820 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d  ory cells */.  M
29830 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  em *pEnd;       
29840 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d         /* Last m
29850 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65  emory cell in ne
29860 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62  w array */.  Vdb
29870 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20  eFrame *pFrame; 
29880 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65       /* New vdbe
29890 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74   frame to execut
298a0 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f  e in */.  SubPro
298b0 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
298c0 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d    /* Sub-program
298d0 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20   to execute */. 
298e0 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20   void *t;       
298f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
29900 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72  n identifying tr
29910 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f  igger */..  pPro
29920 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  gram = pOp->p4.p
29930 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d  Program;.  pRt =
29940 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
29950 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67  .  assert( pProg
29960 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20  ram->nOp>0 );.  
29970 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20  .  /* If the p5 
29980 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74  flag is clear, t
29990 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e  hen recursive in
299a0 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67  vocation of trig
299b0 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69  gers is .  ** di
299c0 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77  sabled for backw
299d0 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69  ards compatibili
299e0 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69 66  ty (p5 is set if
299f0 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61   this sub-progra
29a00 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79  m.  ** is really
29a10 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20   a trigger, not 
29a20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63  a foreign key ac
29a30 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c  tion, and the fl
29a40 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20  ag set.  ** and 
29a50 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20 22  cleared by the "
29a60 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76 65  PRAGMA recursive
29a70 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61  _triggers" comma
29a80 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20  nd is clear)..  
29a90 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72  ** .  ** It is r
29aa0 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74  ecursive invocat
29ab0 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c  ion of triggers,
29ac0 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65   at the SQL leve
29ad0 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a  l, that is .  **
29ae0 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f   disabled. In so
29af0 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c  me cases a singl
29b00 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67 65  e trigger may ge
29b10 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e  nerate more than
29b20 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72   one .  ** SubPr
29b30 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74 72  ogram (if the tr
29b40 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78 65  igger may be exe
29b50 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20  cuted with more 
29b60 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65  than one differe
29b70 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46  nt .  ** ON CONF
29b80 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e  LICT algorithm).
29b90 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75   SubProgram stru
29ba0 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74 65  ctures associate
29bb0 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69  d with a.  ** si
29bc0 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c  ngle trigger all
29bd0 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76   have the same v
29be0 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75 62  alue for the Sub
29bf0 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20  Program.token . 
29c00 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a   ** variable.  *
29c10 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  /.  if( pOp->p5 
29c20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67  ){.    t = pProg
29c30 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20  ram->token;.    
29c40 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
29c50 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20  rame; pFrame && 
29c60 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74  pFrame->token!=t
29c70 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
29c80 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69  >pParent);.    i
29c90 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65 61  f( pFrame ) brea
29ca0 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d  k;.  }..  if( p-
29cb0 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69  >nFrame>=db->aLi
29cc0 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
29cd0 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20  _TRIGGER_DEPTH] 
29ce0 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
29cf0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71  TE_ERROR;.    sq
29d00 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
29d10 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
29d20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73  "too many levels
29d30 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63 75   of trigger recu
29d40 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65  rsion");.    bre
29d50 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65  ak;.  }..  /* Re
29d60 67 69 73 74 65 72 20 70 52 74 20 69 73 20 75 73  gister pRt is us
29d70 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
29d80 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
29d90 74 6f 20 73 61 76 65 20 74 68 65 20 73 74 61 74  to save the stat
29da0 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75  e.  ** of the cu
29db0 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61  rrent program, a
29dc0 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65  nd the memory re
29dd0 71 75 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d  quired at runtim
29de0 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a  e to execute.  *
29df0 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  * the trigger pr
29e00 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74  ogram. If this t
29e10 72 69 67 67 65 72 20 68 61 73 20 62 65 65 6e 20  rigger has been 
29e20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68  fired before, th
29e30 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20  en pRt .  ** is 
29e40 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65  already allocate
29e50 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74  d. Otherwise, it
29e60 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c   must be initial
29e70 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20  ized.  */.  if( 
29e80 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  (pRt->flags&MEM_
29e90 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20  Frame)==0 ){.   
29ea0 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e   /* SubProgram.n
29eb0 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68  Mem is set to th
29ec0 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
29ed0 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79  ry cells used by
29ee0 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f   the .    ** pro
29ef0 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53  gram stored in S
29f00 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41  ubProgram.aOp. A
29f10 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c  s well as these,
29f20 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20   one memory.    
29f30 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69  ** cell is requi
29f40 72 65 64 20 66 6f 72 20 65 61 63 68 20 63 75 72  red for each cur
29f50 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 65 20  sor used by the 
29f60 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63  program. Set loc
29f70 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62  al.    ** variab
29f80 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74  le nMem (and lat
29f90 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43  er, VdbeFrame.nC
29fa0 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73  hildMem) to this
29fb0 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20   value..    */. 
29fc0 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72     nMem = pProgr
29fd0 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67  am->nMem + pProg
29fe0 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e  ram->nCsr;.    n
29ff0 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69  Byte = ROUND8(si
2a000 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29  zeof(VdbeFrame))
2a010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
2a020 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d   nMem * sizeof(M
2a030 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  em).            
2a040 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43    + pProgram->nC
2a050 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65  sr * sizeof(Vdbe
2a060 43 75 72 73 6f 72 20 2a 29 0a 20 20 20 20 20 20  Cursor *).      
2a070 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72          + pProgr
2a080 61 6d 2d 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a 65  am->nOnce * size
2a090 6f 66 28 75 38 29 3b 0a 20 20 20 20 70 46 72 61  of(u8);.    pFra
2a0a0 6d 65 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  me = sqlite3DbMa
2a0b0 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79  llocZero(db, nBy
2a0c0 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46  te);.    if( !pF
2a0d0 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f  rame ){.      go
2a0e0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d  to no_mem;.    }
2a0f0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2a100 4d 65 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b  MemRelease(pRt);
2a110 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20  .    pRt->flags 
2a120 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20  = MEM_Frame;.   
2a130 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d   pRt->u.pFrame =
2a140 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46   pFrame;..    pF
2a150 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20  rame->v = p;.   
2a160 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d   pFrame->nChildM
2a170 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70  em = nMem;.    p
2a180 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
2a190 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   = pProgram->nCs
2a1a0 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70  r;.    pFrame->p
2a1b0 63 20 3d 20 70 63 3b 0a 20 20 20 20 70 46 72 61  c = pc;.    pFra
2a1c0 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d  me->aMem = p->aM
2a1d0 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
2a1e0 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a  nMem = p->nMem;.
2a1f0 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70 43 73      pFrame->apCs
2a200 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20  r = p->apCsr;.  
2a210 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f    pFrame->nCurso
2a220 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a  r = p->nCursor;.
2a230 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20      pFrame->aOp 
2a240 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46  = p->aOp;.    pF
2a250 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e  rame->nOp = p->n
2a260 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
2a270 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d  token = pProgram
2a280 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 70 46 72  ->token;.    pFr
2a290 61 6d 65 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d  ame->aOnceFlag =
2a2a0 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a 20   p->aOnceFlag;. 
2a2b0 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65     pFrame->nOnce
2a2c0 46 6c 61 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46  Flag = p->nOnceF
2a2d0 6c 61 67 3b 0a 0a 20 20 20 20 70 45 6e 64 20 3d  lag;..    pEnd =
2a2e0 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70   &VdbeFrameMem(p
2a2f0 46 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e  Frame)[pFrame->n
2a300 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66  ChildMem];.    f
2a310 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d  or(pMem=VdbeFram
2a320 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d  eMem(pFrame); pM
2a330 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b  em!=pEnd; pMem++
2a340 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66  ){.      pMem->f
2a350 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 76 61 6c  lags = MEM_Inval
2a360 69 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e  id;.      pMem->
2a370 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20  db = db;.    }. 
2a380 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61   }else{.    pFra
2a390 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61  me = pRt->u.pFra
2a3a0 6d 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  me;.    assert( 
2a3b0 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70  pProgram->nMem+p
2a3c0 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70  Program->nCsr==p
2a3d0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
2a3e0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2a3f0 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d  pProgram->nCsr==
2a400 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73  pFrame->nChildCs
2a410 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  r );.    assert(
2a420 20 70 63 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20   pc==pFrame->pc 
2a430 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72  );.  }..  p->nFr
2a440 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d  ame++;.  pFrame-
2a450 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46  >pParent = p->pF
2a460 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  rame;.  pFrame->
2a470 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
2a480 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d  Rowid;.  pFrame-
2a490 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43  >nChange = p->nC
2a4a0 68 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61  hange;.  p->nCha
2a4b0 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46  nge = 0;.  p->pF
2a4c0 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20  rame = pFrame;. 
2a4d0 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20   p->aMem = aMem 
2a4e0 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28  = &VdbeFrameMem(
2a4f0 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70  pFrame)[-1];.  p
2a500 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d  ->nMem = pFrame-
2a510 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d  >nChildMem;.  p-
2a520 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29  >nCursor = (u16)
2a530 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73  pFrame->nChildCs
2a540 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20  r;.  p->apCsr = 
2a550 28 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26  (VdbeCursor **)&
2a560 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b  aMem[p->nMem+1];
2a570 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20  .  p->aOp = aOp 
2a580 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b  = pProgram->aOp;
2a590 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f  .  p->nOp = pPro
2a5a0 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e  gram->nOp;.  p->
2a5b0 61 4f 6e 63 65 46 6c 61 67 20 3d 20 28 75 38 20  aOnceFlag = (u8 
2a5c0 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e  *)&p->apCsr[p->n
2a5d0 43 75 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f  Cursor];.  p->nO
2a5e0 6e 63 65 46 6c 61 67 20 3d 20 70 50 72 6f 67 72  nceFlag = pProgr
2a5f0 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 20 20 70 63 20  am->nOnce;.  pc 
2a600 3d 20 2d 31 3b 0a 20 20 6d 65 6d 73 65 74 28 70  = -1;.  memset(p
2a610 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20  ->aOnceFlag, 0, 
2a620 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a  p->nOnceFlag);..
2a630 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2a640 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20  pcode: Param P1 
2a650 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
2a660 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  his opcode is on
2a670 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20  ly ever present 
2a680 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20  in sub-programs 
2a690 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a  called via the .
2a6a0 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e  ** OP_Program in
2a6b0 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20  struction. Copy 
2a6c0 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c  a value currentl
2a6d0 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65  y stored in a me
2a6e0 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66  mory .** cell of
2a6f0 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61   the calling (pa
2a700 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63  rent) frame to c
2a710 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75  ell P2 in the cu
2a720 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a  rrent frames .**
2a730 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20   address space. 
2a740 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
2a750 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
2a760 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e   to access the n
2a770 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64  ew.* .** and old
2a780 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a  .* values..**.**
2a790 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   The address of 
2a7a0 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  the cell in the 
2a7b0 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20  parent frame is 
2a7c0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64  determined by ad
2a7d0 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ding.** the valu
2a7e0 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
2a7f0 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75  ment to the valu
2a800 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
2a810 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ment to the.** c
2a820 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
2a830 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  m instruction..*
2a840 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a  /.case OP_Param:
2a850 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
2a860 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
2a870 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
2a880 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70  pFrame;.  Mem *p
2a890 49 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70  In;.  pFrame = p
2a8a0 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20  ->pFrame;.  pIn 
2a8b0 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
2a8c0 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65  pOp->p1 + pFrame
2a8d0 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63  ->aOp[pFrame->pc
2a8e0 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69  ].p1];   .  sqli
2a8f0 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
2a900 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c  wCopy(pOut, pIn,
2a910 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62   MEM_Ephem);.  b
2a920 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20  reak;.}..#endif 
2a930 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /* #ifndef SQLIT
2a940 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a  E_OMIT_TRIGGER *
2a950 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2a960 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
2a970 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  EY./* Opcode: Fk
2a980 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20  Counter P1 P2 * 
2a990 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2a9a0 20 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a   fkctr[P1]+=P2.*
2a9b0 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61  *.** Increment a
2a9c0 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75   "constraint cou
2a9d0 6e 74 65 72 22 20 62 79 20 50 32 20 28 50 32 20  nter" by P2 (P2 
2a9e0 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76 65 20  may be negative 
2a9f0 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a  or positive)..**
2aa00 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
2aa10 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73 65  ro, the database
2aa20 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e   constraint coun
2aa30 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ter is increment
2aa40 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64  ed .** (deferred
2aa50 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2aa60 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72  straints). Other
2aa70 77 69 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a  wise, if P1 is z
2aa80 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61  ero, the .** sta
2aa90 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69  tement counter i
2aaa0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69  s incremented (i
2aab0 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
2aac0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
2aad0 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b  )..*/.case OP_Fk
2aae0 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28  Counter: {.  if(
2aaf0 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c   db->flags & SQL
2ab00 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a  ITE_DeferFKs ){.
2ab10 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
2ab20 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d  dImmCons += pOp-
2ab30 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  >p2;.  }else if(
2ab40 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
2ab50 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
2ab60 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  s += pOp->p2;.  
2ab70 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46  }else{.    p->nF
2ab80 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70  kConstraint += p
2ab90 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72  Op->p2;.  }.  br
2aba0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2abb0 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50  e: FkIfZero P1 P
2abc0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2abd0 73 69 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31  sis: if fkctr[P1
2abe0 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ]==0 goto P2.**.
2abf0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74  ** This opcode t
2ac00 65 73 74 73 20 69 66 20 61 20 66 6f 72 65 69 67  ests if a foreig
2ac10 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
2ac20 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72  -counter is curr
2ac30 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49  ently zero..** I
2ac40 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  f so, jump to in
2ac50 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74  struction P2. Ot
2ac60 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68  herwise, fall th
2ac70 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2ac80 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  t .** instructio
2ac90 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69  n..**.** If P1 i
2aca0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
2acb0 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
2acc0 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61  en if the databa
2acd0 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  se constraint-co
2ace0 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f  unter.** is zero
2acf0 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63   (the one that c
2ad00 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64 20 63  ounts deferred c
2ad10 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
2ad20 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a  ions). If P1 is.
2ad30 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d  ** zero, the jum
2ad40 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
2ad50 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73  e statement cons
2ad60 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
2ad70 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64  s zero.** (immed
2ad80 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
2ad90 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
2ada0 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65  ations)..*/.case
2adb0 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20   OP_FkIfZero: { 
2adc0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2add0 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  */.  if( pOp->p1
2ade0 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   ){.    if( db->
2adf0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30  nDeferredCons==0
2ae00 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
2ae10 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63  dImmCons==0 ) pc
2ae20 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
2ae30 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70  }else{.    if( p
2ae40 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d  ->nFkConstraint=
2ae50 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
2ae60 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20  redImmCons==0 ) 
2ae70 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
2ae80 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2ae90 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
2aea0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
2aeb0 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66  EIGN_KEY */..#if
2aec0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2aed0 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f  _AUTOINCREMENT./
2aee0 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78  * Opcode: MemMax
2aef0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2af00 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d  Synopsis: r[P1]=
2af10 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29  max(r[P1],r[P2])
2af20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72  .**.** P1 is a r
2af30 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72  egister in the r
2af40 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69  oot frame of thi
2af50 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66  s VM (the root f
2af60 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65  rame is.** diffe
2af70 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75  rent from the cu
2af80 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74  rrent frame if t
2af90 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2afa0 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74 65  is being execute
2afb0 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75  d.** within a su
2afc0 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20  b-program). Set 
2afd0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
2afe0 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20  ister P1 to the 
2aff0 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69  maximum of .** i
2b000 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  ts current value
2b010 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69   and the value i
2b020 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
2b030 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
2b040 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20  ction throws an 
2b050 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d  error if the mem
2b060 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20  ory cell is not 
2b070 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20  initially.** an 
2b080 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65  integer..*/.case
2b090 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20   OP_MemMax: {   
2b0a0 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
2b0b0 20 4d 65 6d 20 2a 70 49 6e 31 3b 0a 20 20 56 64   Mem *pIn1;.  Vd
2b0c0 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
2b0d0 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65  .  if( p->pFrame
2b0e0 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61   ){.    for(pFra
2b0f0 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
2b100 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
2b110 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
2b120 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31  arent);.    pIn1
2b130 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
2b140 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c  [pOp->p1];.  }el
2b150 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  se{.    pIn1 = &
2b160 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2b170 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d   }.  assert( mem
2b180 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
2b190 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2b1a0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31  mIntegerify(pIn1
2b1b0 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
2b1c0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71  m[pOp->p2];.  sq
2b1d0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
2b1e0 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20  gerify(pIn2);.  
2b1f0 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49  if( pIn1->u.i<pI
2b200 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49  n2->u.i){.    pI
2b210 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e  n1->u.i = pIn2->
2b220 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  u.i;.  }.  break
2b230 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2b240 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
2b250 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f  CREMENT */../* O
2b260 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20  pcode: IfPos P1 
2b270 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2b280 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30  psis: if r[P1]>0
2b290 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 49   goto P2.**.** I
2b2a0 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  f the value of r
2b2b0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 31 20  egister P1 is 1 
2b2c0 6f 72 20 67 72 65 61 74 65 72 2c 20 6a 75 6d 70  or greater, jump
2b2d0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74   to P2..**.** It
2b2e0 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75   is illegal to u
2b2f0 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  se this instruct
2b300 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65  ion on a registe
2b310 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e  r that does.** n
2b320 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
2b330 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72  teger.  An asser
2b340 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20  tion fault will 
2b350 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72  result if you tr
2b360 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  y..*/.case OP_If
2b370 50 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Pos: {        /*
2b380 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
2b390 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2b3a0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2b3b0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
2b3c0 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49  _Int );.  if( pI
2b3d0 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20  n1->u.i>0 ){.   
2b3e0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2b3f0 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
2b400 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
2b410 66 4e 65 67 20 50 31 20 50 32 20 2a 20 2a 20 2a  fNeg P1 P2 * * *
2b420 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2b430 20 72 5b 50 31 5d 3c 30 20 67 6f 74 6f 20 50 32   r[P1]<0 goto P2
2b440 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  .**.** If the va
2b450 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
2b460 50 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  P1 is less than 
2b470 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32  zero, jump to P2
2b480 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  . .**.** It is i
2b490 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68  llegal to use th
2b4a0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
2b4b0 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  n a register tha
2b4c0 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f  t does.** not co
2b4d0 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
2b4e0 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  .  An assertion 
2b4f0 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c  fault will resul
2b500 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f  t if you try..*/
2b510 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20  .case OP_IfNeg: 
2b520 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
2b530 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
2b540 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2b550 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
2b560 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
2b570 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
2b580 2e 69 3c 30 20 29 7b 0a 20 20 20 20 20 70 63 20  .i<0 ){.     pc 
2b590 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
2b5a0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2b5b0 2a 20 4f 70 63 6f 64 65 3a 20 49 66 5a 65 72 6f  * Opcode: IfZero
2b5c0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2b5d0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
2b5e0 2b 3d 50 33 2c 20 69 66 20 72 5b 50 31 5d 3d 3d  +=P3, if r[P1]==
2b5f0 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  0 goto P2.**.** 
2b600 54 68 65 20 72 65 67 69 73 74 65 72 20 50 31 20  The register P1 
2b610 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20  must contain an 
2b620 69 6e 74 65 67 65 72 2e 20 20 41 64 64 20 6c 69  integer.  Add li
2b630 74 65 72 61 6c 20 50 33 20 74 6f 20 74 68 65 0a  teral P3 to the.
2b640 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  ** value in regi
2b650 73 74 65 72 20 50 31 2e 20 20 49 66 20 74 68 65  ster P1.  If the
2b660 20 72 65 73 75 6c 74 20 69 73 20 65 78 61 63 74   result is exact
2b670 6c 79 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32  ly 0, jump to P2
2b680 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  . .**.** It is i
2b690 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68  llegal to use th
2b6a0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
2b6b0 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  n a register tha
2b6c0 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f  t does.** not co
2b6d0 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
2b6e0 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  .  An assertion 
2b6f0 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c  fault will resul
2b700 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f  t if you try..*/
2b710 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a  .case OP_IfZero:
2b720 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2b730 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
2b740 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2b750 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
2b760 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
2b770 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20   );.  pIn1->u.i 
2b780 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66  += pOp->p3;.  if
2b790 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29  ( pIn1->u.i==0 )
2b7a0 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
2b7b0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
2b7c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2b7d0 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32  de: AggStep * P2
2b7e0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
2b7f0 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50  opsis: accum=r[P
2b800 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d  3] step(r[P2@P5]
2b810 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ).**.** Execute 
2b820 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
2b830 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  n for an aggrega
2b840 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63  te.  The.** func
2b850 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75  tion has P5 argu
2b860 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61  ments.   P4 is a
2b870 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
2b880 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63  FuncDef.** struc
2b890 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66  ture that specif
2b8a0 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ies the function
2b8b0 2e 20 20 55 73 65 20 72 65 67 69 73 74 65 72 0a  .  Use register.
2b8c0 2a 2a 20 50 33 20 61 73 20 74 68 65 20 61 63 63  ** P3 as the acc
2b8d0 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  umulator..**.** 
2b8e0 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73  The P5 arguments
2b8f0 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20   are taken from 
2b900 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
2b910 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72  its.** successor
2b920 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67  s..*/.case OP_Ag
2b930 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e  gStep: {.  int n
2b940 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d  ;.  int i;.  Mem
2b950 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70   *pMem;.  Mem *p
2b960 52 65 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  Rec;.  sqlite3_c
2b970 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71  ontext ctx;.  sq
2b980 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70  lite3_value **ap
2b990 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  Val;..  n = pOp-
2b9a0 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  >p5;.  assert( n
2b9b0 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63 20 3d 20  >=0 );.  pRec = 
2b9c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2b9d0 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41    apVal = p->apA
2b9e0 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70  rg;.  assert( ap
2b9f0 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20  Val || n==0 );. 
2ba00 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69   for(i=0; i<n; i
2ba10 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20  ++, pRec++){.   
2ba20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
2ba30 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20  lid(pRec) );.   
2ba40 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65 63   apVal[i] = pRec
2ba50 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
2ba60 43 68 61 6e 67 65 28 70 2c 20 70 52 65 63 29 3b  Change(p, pRec);
2ba70 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2ba80 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 52 65  MemStoreType(pRe
2ba90 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46  c);.  }.  ctx.pF
2baa0 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46  unc = pOp->p4.pF
2bab0 75 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20 70  unc;.  assert( p
2bac0 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
2bad0 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
2bae0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 63  >nCursor) );.  c
2baf0 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d  tx.pMem = pMem =
2bb00 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2bb10 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20  .  pMem->n++;.  
2bb20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45  ctx.s.flags = ME
2bb30 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e  M_Null;.  ctx.s.
2bb40 7a 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a  z = 0;.  ctx.s.z
2bb50 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74  Malloc = 0;.  ct
2bb60 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20  x.s.xDel = 0;.  
2bb70 63 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20  ctx.s.db = db;. 
2bb80 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30   ctx.isError = 0
2bb90 3b 0a 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20  ;.  ctx.pColl = 
2bba0 30 3b 0a 20 20 63 74 78 2e 73 6b 69 70 46 6c 61  0;.  ctx.skipFla
2bbb0 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78  g = 0;.  if( ctx
2bbc0 2e 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67  .pFunc->funcFlag
2bbd0 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  s & SQLITE_FUNC_
2bbe0 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20  NEEDCOLL ){.    
2bbf0 61 73 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61  assert( pOp>p->a
2bc00 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Op );.    assert
2bc10 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65  ( pOp[-1].p4type
2bc20 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a  ==P4_COLLSEQ );.
2bc30 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
2bc40 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  -1].opcode==OP_C
2bc50 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74  ollSeq );.    ct
2bc60 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31  x.pColl = pOp[-1
2bc70 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a  ].p4.pColl;.  }.
2bc80 20 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53    (ctx.pFunc->xS
2bc90 74 65 70 29 28 26 63 74 78 2c 20 6e 2c 20 61 70  tep)(&ctx, n, ap
2bca0 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d  Val); /* IMP: R-
2bcb0 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20  24505-23230 */. 
2bcc0 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72   if( ctx.isError
2bcd0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
2bce0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2bcf0 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
2bd00 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
2bd10 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20  xt(&ctx.s));.   
2bd20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f   rc = ctx.isErro
2bd30 72 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 74 78  r;.  }.  if( ctx
2bd40 2e 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20  .skipFlag ){.   
2bd50 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
2bd60 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c  .opcode==OP_Coll
2bd70 53 65 71 20 29 3b 0a 20 20 20 20 69 20 3d 20 70  Seq );.    i = p
2bd80 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69  Op[-1].p1;.    i
2bd90 66 28 20 69 20 29 20 73 71 6c 69 74 65 33 56 64  f( i ) sqlite3Vd
2bda0 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
2bdb0 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a  Mem[i], 1);.  }.
2bdc0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2bdd0 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29  mRelease(&ctx.s)
2bde0 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  ;..  break;.}../
2bdf0 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e  * Opcode: AggFin
2be00 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  al P1 P2 * P4 *.
2be10 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63  ** Synopsis: acc
2be20 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a  um=r[P1] N=P2.**
2be30 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
2be40 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69  finalizer functi
2be50 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67  on for an aggreg
2be60 61 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74  ate.  P1 is.** t
2be70 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  he memory locati
2be80 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20 61  on that is the a
2be90 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74  ccumulator for t
2bea0 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a  he aggregate..**
2beb0 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75  .** P2 is the nu
2bec0 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
2bed0 73 20 74 68 61 74 20 74 68 65 20 73 74 65 70 20  s that the step 
2bee0 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61  function takes a
2bef0 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  nd.** P4 is a po
2bf00 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e  inter to the Fun
2bf10 63 44 65 66 20 66 6f 72 20 74 68 69 73 20 66 75  cDef for this fu
2bf20 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a  nction.  The P2.
2bf30 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e  ** argument is n
2bf40 6f 74 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ot used by this 
2bf50 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f  opcode.  It is o
2bf60 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69 73  nly there to dis
2bf70 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e  ambiguate.** fun
2bf80 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20  ctions that can 
2bf90 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d  take varying num
2bfa0 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74  bers of argument
2bfb0 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72  s.  The.** P4 ar
2bfc0 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e  gument is only n
2bfd0 65 65 64 65 64 20 66 6f 72 20 74 68 65 20 64 65  eeded for the de
2bfe0 67 65 6e 65 72 61 74 65 20 63 61 73 65 20 77 68  generate case wh
2bff0 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20  ere.** the step 
2c000 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74  function was not
2c010 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c   previously call
2c020 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ed..*/.case OP_A
2c030 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d  ggFinal: {.  Mem
2c040 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74   *pMem;.  assert
2c050 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
2c060 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p1<=(p->nMem
2c070 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
2c080 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70    pMem = &aMem[p
2c090 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2c0a0 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
2c0b0 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d  & ~(MEM_Null|MEM
2c0c0 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72  _Agg))==0 );.  r
2c0d0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
2c0e0 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c  emFinalize(pMem,
2c0f0 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b   pOp->p4.pFunc);
2c100 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
2c110 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2c120 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
2c130 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
2c140 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d  _value_text(pMem
2c150 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ));.  }.  sqlite
2c160 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2c170 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69  ing(pMem, encodi
2c180 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ng);.  UPDATE_MA
2c190 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29  X_BLOBSIZE(pMem)
2c1a0 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
2c1b0 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65  dbeMemTooBig(pMe
2c1c0 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  m) ){.    goto t
2c1d0 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72  oo_big;.  }.  br
2c1e0 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
2c1f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
2c200 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b  /* Opcode: Check
2c210 70 6f 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a  point P1 P2 P3 *
2c220 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f   *.**.** Checkpo
2c230 69 6e 74 20 64 61 74 61 62 61 73 65 20 50 31 2e  int database P1.
2c240 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70   This is a no-op
2c250 20 69 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75   if P1 is not cu
2c260 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41  rrently in.** WA
2c270 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65  L mode. Paramete
2c280 72 20 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53  r P2 is one of S
2c290 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
2c2a0 5f 50 41 53 53 49 56 45 2c 20 46 55 4c 4c 0a 2a  _PASSIVE, FULL.*
2c2b0 2a 20 6f 72 20 52 45 53 54 41 52 54 2e 20 20 57  * or RESTART.  W
2c2c0 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f  rite 1 or 0 into
2c2d0 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20   mem[P3] if the 
2c2e0 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72  checkpoint retur
2c2f0 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53  ns.** SQLITE_BUS
2c300 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63  Y or not, respec
2c310 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74  tively.  Write t
2c320 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
2c330 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c  es in the.** WAL
2c340 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b   after the check
2c350 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50  point into mem[P
2c360 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d  3+1] and the num
2c370 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20  ber of pages.** 
2c380 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20  in the WAL that 
2c390 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70  have been checkp
2c3a0 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68 65  ointed after the
2c3b0 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63   checkpoint.** c
2c3c0 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65  ompletes into me
2c3d0 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65  m[P3+2].  Howeve
2c3e0 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d  r on an error, m
2c3f0 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20  em[P3+1] and.** 
2c400 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e  mem[P3+2] are in
2c410 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e  itialized to -1.
2c420 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63  .*/.case OP_Chec
2c430 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20  kpoint: {.  int 
2c440 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
2c450 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
2c460 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
2c470 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20   int aRes[3];   
2c480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c490 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20   /* Results */. 
2c4a0 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
2c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4c0 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74   /* Write result
2c4d0 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73  s here */..  ass
2c4e0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2c4f0 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d  ==0 );.  aRes[0]
2c500 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20   = 0;.  aRes[1] 
2c510 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a  = aRes[2] = -1;.
2c520 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2c530 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
2c540 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20  OINT_PASSIVE.   
2c550 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
2c560 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
2c570 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c  T_FULL.       ||
2c580 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
2c590 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54  _CHECKPOINT_REST
2c5a0 41 52 54 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20  ART.  );.  rc = 
2c5b0 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e  sqlite3Checkpoin
2c5c0 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  t(db, pOp->p1, p
2c5d0 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d  Op->p2, &aRes[1]
2c5e0 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69  , &aRes[2]);.  i
2c5f0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
2c600 53 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  SY ){.    rc = S
2c610 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52  QLITE_OK;.    aR
2c620 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20  es[0] = 1;.  }. 
2c630 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d   for(i=0, pMem =
2c640 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2c650 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b   i<3; i++, pMem+
2c660 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  +){.    sqlite3V
2c670 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
2c680 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69  Mem, (i64)aRes[i
2c690 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72  ]);.  }    .  br
2c6a0 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66  eak;.};  .#endif
2c6b0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2c6c0 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20  _OMIT_PRAGMA./* 
2c6d0 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d  Opcode: JournalM
2c6e0 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 50  ode P1 P2 P3 * P
2c6f0 35 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74  5.**.** Change t
2c700 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  he journal mode 
2c710 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74  of database P1 t
2c720 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65  o P3. P3 must be
2c730 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50   one of the.** P
2c740 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2c750 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20  _XXX values. If 
2c760 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e  changing between
2c770 20 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c   the various rol
2c780 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28  lback.** modes (
2c790 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65  delete, truncate
2c7a0 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61  , persist, off a
2c7b0 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73  nd memory), this
2c7c0 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20   is a simple.** 
2c7d0 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f  operation. No IO
2c7e0 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a   is required..**
2c7f0 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20  .** If changing 
2c800 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57  into or out of W
2c810 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63  AL mode the proc
2c820 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f  edure is more co
2c830 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a  mplicated..**.**
2c840 20 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20   Write a string 
2c850 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66  containing the f
2c860 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64  inal journal-mod
2c870 65 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  e to register P2
2c880 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75  ..*/.case OP_Jou
2c890 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f  rnalMode: {    /
2c8a0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
2c8b0 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  e */.  Btree *pB
2c8c0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
2c8d0 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20         /* Btree 
2c8e0 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61  to change journa
2c8f0 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50  l mode of */.  P
2c900 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20  ager *pPager;   
2c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2c920 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61 74  * Pager associat
2c930 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20  ed with pBt */. 
2c940 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20   int eNew;      
2c950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c960 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20   /* New journal 
2c970 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f  mode */.  int eO
2c980 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ld;             
2c990 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
2c9a0 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   old journal mod
2c9b0 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e */.#ifndef SQL
2c9c0 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63  ITE_OMIT_WAL.  c
2c9d0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
2c9e0 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  name;          /
2c9f0 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61  * Name of databa
2ca00 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67  se file for pPag
2ca10 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20  er */.#endif..  
2ca20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  eNew = pOp->p3;.
2ca30 20 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d    assert( eNew==
2ca40 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2ca50 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20  E_DELETE .      
2ca60 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2ca70 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e  JOURNALMODE_TRUN
2ca80 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20  CATE .       || 
2ca90 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2caa0 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20  NALMODE_PERSIST 
2cab0 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2cac0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2cad0 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c  DE_OFF.       ||
2cae0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2caf0 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a  RNALMODE_MEMORY.
2cb00 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
2cb10 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2cb20 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20  E_WAL.       || 
2cb30 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2cb40 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20  NALMODE_QUERY.  
2cb50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2cb60 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2cb70 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
2cb80 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
2cb90 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74  nly==0 );..  pBt
2cba0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
2cbb0 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65  p1].pBt;.  pPage
2cbc0 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
2cbd0 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65 4f  Pager(pBt);.  eO
2cbe0 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  ld = sqlite3Page
2cbf0 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rGetJournalMode(
2cc00 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20 65  pPager);.  if( e
2cc10 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2cc20 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20 65  ALMODE_QUERY ) e
2cc30 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66  New = eOld;.  if
2cc40 28 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 4f  ( !sqlite3PagerO
2cc50 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c  kToChangeJournal
2cc60 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29 20 65  Mode(pPager) ) e
2cc70 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66  New = eOld;..#if
2cc80 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2cc90 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65  _WAL.  zFilename
2cca0 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46   = sqlite3PagerF
2ccb0 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 2c 20  ilename(pPager, 
2ccc0 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74  1);..  /* Do not
2ccd0 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74   allow a transit
2cce0 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d  ion to journal_m
2ccf0 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61  ode=WAL for a da
2cd00 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74  tabase.  ** in t
2cd10 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65  emporary storage
2cd20 20 6f 72 20 69 66 20 74 68 65 20 56 46 53 20 64   or if the VFS d
2cd30 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  oes not support 
2cd40 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20  shared memory . 
2cd50 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d   */.  if( eNew==
2cd60 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2cd70 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c  E_WAL.   && (sql
2cd80 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69  ite3Strlen30(zFi
2cd90 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20  lename)==0      
2cda0 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c       /* Temp fil
2cdb0 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21  e */.       || !
2cdc0 73 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53  sqlite3PagerWalS
2cdd0 75 70 70 6f 72 74 65 64 28 70 50 61 67 65 72 29  upported(pPager)
2cde0 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64  )   /* No shared
2cdf0 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20  -memory support 
2ce00 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77  */.  ){.    eNew
2ce10 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20   = eOld;.  }..  
2ce20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29  if( (eNew!=eOld)
2ce30 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41  .   && (eOld==PA
2ce40 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2ce50 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47  WAL || eNew==PAG
2ce60 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2ce70 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28  AL).  ){.    if(
2ce80 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   !db->autoCommit
2ce90 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61   || db->nVdbeRea
2cea0 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20  d>1 ){.      rc 
2ceb0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
2cec0 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
2ced0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2cee0 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20  sg, db, .       
2cef0 20 20 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67     "cannot chang
2cf00 65 20 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72  e %s wal mode fr
2cf10 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  om within a tran
2cf20 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20  saction",.      
2cf30 20 20 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52      (eNew==PAGER
2cf40 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2cf50 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74   ? "into" : "out
2cf60 20 6f 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20   of").      );. 
2cf70 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2cf80 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69  }else{. .      i
2cf90 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  f( eOld==PAGER_J
2cfa0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29  OURNALMODE_WAL )
2cfb0 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  {.        /* If 
2cfc0 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65  leaving WAL mode
2cfd0 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20  , close the log 
2cfe0 66 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73  file. If success
2cff0 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20  ful, the call.  
2d000 20 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65        ** to Page
2d010 72 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63  rCloseWal() chec
2d020 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65  kpoints and dele
2d030 74 65 73 20 74 68 65 20 77 72 69 74 65 2d 61 68  tes the write-ah
2d040 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20  ead-log .       
2d050 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43   ** file. An EXC
2d060 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20  LUSIVE lock may 
2d070 73 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e  still be held on
2d080 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2d090 6c 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  le .        ** a
2d0a0 66 74 65 72 20 61 20 73 75 63 63 65 73 73 66 75  fter a successfu
2d0b0 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20  l return. .     
2d0c0 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63     */.        rc
2d0d0 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 43   = sqlite3PagerC
2d0e0 6c 6f 73 65 57 61 6c 28 70 50 61 67 65 72 29 3b  loseWal(pPager);
2d0f0 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d  .        if( rc=
2d100 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2d110 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50          sqlite3P
2d120 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerSetJournalMo
2d130 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29  de(pPager, eNew)
2d140 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2d150 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64    }else if( eOld
2d160 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2d170 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20  ODE_MEMORY ){.  
2d180 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20        /* Cannot 
2d190 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63  transition direc
2d1a0 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20  tly from MEMORY 
2d1b0 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64  to WAL.  Use mod
2d1c0 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a  e OFF.        **
2d1d0 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69   as an intermedi
2d1e0 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73  ate */.        s
2d1f0 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
2d200 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
2d210 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  , PAGER_JOURNALM
2d220 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20  ODE_OFF);.      
2d230 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70  }.  .      /* Op
2d240 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  en a transaction
2d250 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
2d260 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73   file. Regardles
2d270 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c  s of the journal
2d280 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20  .      ** mode, 
2d290 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
2d2a0 20 61 6c 77 61 79 73 20 75 73 65 73 20 61 20 72   always uses a r
2d2b0 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e  ollback journal.
2d2c0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
2d2d0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
2d2e0 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
2d2f0 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  t)==0 );.      i
2d300 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2d310 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
2d320 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
2d330 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e  Version(pBt, (eN
2d340 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2d350 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20  LMODE_WAL ? 2 : 
2d360 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  1));.      }.   
2d370 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a   }.  }.#endif /*
2d380 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f   ifndef SQLITE_O
2d390 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66  MIT_WAL */..  if
2d3a0 28 20 72 63 20 29 7b 0a 20 20 20 20 65 4e 65 77  ( rc ){.    eNew
2d3b0 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65   = eOld;.  }.  e
2d3c0 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67  New = sqlite3Pag
2d3d0 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
2d3e0 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a  (pPager, eNew);.
2d3f0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
2d400 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
2d410 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74  ->flags = MEM_St
2d420 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  r|MEM_Static|MEM
2d430 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a  _Term;.  pOut->z
2d440 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74   = (char *)sqlit
2d450 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
2d460 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d  e(eNew);.  pOut-
2d470 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  >n = sqlite3Strl
2d480 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20  en30(pOut->z);. 
2d490 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
2d4a0 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69  ITE_UTF8;.  sqli
2d4b0 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
2d4c0 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f  oding(pOut, enco
2d4d0 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ding);.  break;.
2d4e0 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
2d4f0 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20  ITE_OMIT_PRAGMA 
2d500 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  */..#if !defined
2d510 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43  (SQLITE_OMIT_VAC
2d520 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64  UUM) && !defined
2d530 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54  (SQLITE_OMIT_ATT
2d540 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ACH)./* Opcode: 
2d550 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a  Vacuum * * * * *
2d560 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68  .**.** Vacuum th
2d570 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  e entire databas
2d580 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  e.  This opcode 
2d590 77 69 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72  will cause other
2d5a0 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68   virtual.** mach
2d5b0 69 6e 65 73 20 74 6f 20 62 65 20 63 72 65 61 74  ines to be creat
2d5c0 65 64 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20  ed and run.  It 
2d5d0 6d 61 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65  may not be calle
2d5e0 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a  d from within.**
2d5f0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a   a transaction..
2d600 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75  */.case OP_Vacuu
2d610 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  m: {.  assert( p
2d620 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
2d630 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52  .  rc = sqlite3R
2d640 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72  unVacuum(&p->zEr
2d650 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20 62 72 65  rMsg, db);.  bre
2d660 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
2d670 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2d680 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
2d690 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  M)./* Opcode: In
2d6a0 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a  crVacuum P1 P2 *
2d6b0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f   * *.**.** Perfo
2d6c0 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70  rm a single step
2d6d0 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e   of the incremen
2d6e0 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65  tal vacuum proce
2d6f0 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50  dure on.** the P
2d700 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74  1 database. If t
2d710 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66 69  he vacuum has fi
2d720 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20  nished, jump to 
2d730 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50  instruction.** P
2d740 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61  2. Otherwise, fa
2d750 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2d760 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
2d770 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  on..*/.case OP_I
2d780 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20  ncrVacuum: {    
2d790 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
2d7a0 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20   Btree *pBt;..  
2d7b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2d7c0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
2d7d0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
2d7e0 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
2d7f0 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
2d800 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29  <<pOp->p1))!=0 )
2d810 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
2d820 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
2d830 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
2d840 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63  p->p1].pBt;.  rc
2d850 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
2d860 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a  ncrVacuum(pBt);.
2d870 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2d880 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20  _DONE ){.    pc 
2d890 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
2d8a0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
2d8b0 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  K;.  }.  break;.
2d8c0 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
2d8d0 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a  ode: Expire P1 *
2d8e0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75   * * *.**.** Cau
2d8f0 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73  se precompiled s
2d900 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 62 65 63  tatements to bec
2d910 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 41 6e 20  ome expired. An 
2d920 65 78 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e  expired statemen
2d930 74 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74 68 20  t.** fails with 
2d940 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66  an error code of
2d950 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 69   SQLITE_SCHEMA i
2d960 66 20 69 74 20 69 73 20 65 76 65 72 20 65 78 65  f it is ever exe
2d970 63 75 74 65 64 20 0a 2a 2a 20 28 76 69 61 20 73  cuted .** (via s
2d980 71 6c 69 74 65 33 5f 73 74 65 70 28 29 29 2e 0a  qlite3_step())..
2d990 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  ** .** If P1 is 
2d9a0 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20  0, then all SQL 
2d9b0 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d  statements becom
2d9c0 65 20 65 78 70 69 72 65 64 2e 20 49 66 20 50 31  e expired. If P1
2d9d0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a   is non-zero,.**
2d9e0 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63   then only the c
2d9f0 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69  urrently executi
2da00 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ng statement is 
2da10 61 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61  affected. .*/.ca
2da20 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a  se OP_Expire: {.
2da30 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29    if( !pOp->p1 )
2da40 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  {.    sqlite3Exp
2da50 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
2da60 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c  ments(db);.  }el
2da70 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  se{.    p->expir
2da80 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  ed = 1;.  }.  br
2da90 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
2daa0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
2dab0 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f  ED_CACHE./* Opco
2dac0 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31  de: TableLock P1
2dad0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
2dae0 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d 50 31 20  ynopsis: iDb=P1 
2daf0 72 6f 6f 74 3d 50 32 20 77 72 69 74 65 3d 50 33  root=P2 write=P3
2db00 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20  .**.** Obtain a 
2db10 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63  lock on a partic
2db20 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73  ular table. This
2db30 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
2db40 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a  only used when.*
2db50 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63  * the shared-cac
2db60 68 65 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  he feature is en
2db70 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31  abled. .**.** P1
2db80 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
2db90 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   the database in
2dba0 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f   sqlite3.aDb[] o
2dbb0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
2dbc0 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c  * on which the l
2dbd0 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e  ock is acquired.
2dbe0 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20    A readlock is 
2dbf0 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d  obtained if P3==
2dc00 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20  0 or.** a write 
2dc10 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a  lock if P3==1..*
2dc20 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73  *.** P2 contains
2dc30 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f   the root-page o
2dc40 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c  f the table to l
2dc50 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f  ock..**.** P4 co
2dc60 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72  ntains a pointer
2dc70 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   to the name of 
2dc80 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
2dc90 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20  locked. This is 
2dca0 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20  only.** used to 
2dcb0 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f  generate an erro
2dcc0 72 20 6d 65 73 73 61 67 65 20 69 66 20 74 68 65  r message if the
2dcd0 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20   lock cannot be 
2dce0 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73  obtained..*/.cas
2dcf0 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20  e OP_TableLock: 
2dd00 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f  {.  u8 isWriteLo
2dd10 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33  ck = (u8)pOp->p3
2dd20 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74 65 4c  ;.  if( isWriteL
2dd30 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66  ock || 0==(db->f
2dd40 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64  lags&SQLITE_Read
2dd50 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a  Uncommitted) ){.
2dd60 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70      int p1 = pOp
2dd70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72  ->p1; .    asser
2dd80 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64  t( p1>=0 && p1<d
2dd90 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73  b->nDb );.    as
2dda0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
2ddb0 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
2ddc0 29 31 29 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a  )1)<<p1))!=0 );.
2ddd0 20 20 20 20 61 73 73 65 72 74 28 20 69 73 57 72      assert( isWr
2dde0 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73  iteLock==0 || is
2ddf0 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a  WriteLock==1 );.
2de00 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2de10 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64  BtreeLockTable(d
2de20 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20  b->aDb[p1].pBt, 
2de30 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65  pOp->p2, isWrite
2de40 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 28  Lock);.    if( (
2de50 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45  rc&0xFF)==SQLITE
2de60 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20  _LOCKED ){.     
2de70 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d   const char *z =
2de80 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20   pOp->p4.z;.    
2de90 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2dea0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2deb0 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 74 61  db, "database ta
2dec0 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25  ble is locked: %
2ded0 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  s", z);.    }.  
2dee0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2def0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2df00 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20  IT_SHARED_CACHE 
2df10 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2df20 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2df30 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2df40 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20  VBegin * * * P4 
2df50 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62  *.**.** P4 may b
2df60 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  e a pointer to a
2df70 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
2df80 74 72 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c  tructure. If so,
2df90 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42   call the .** xB
2dfa0 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20  egin method for 
2dfb0 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  that table..**.*
2dfc0 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20  * Also, whether 
2dfd0 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74  or not P4 is set
2dfe0 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74 68 69  , check that thi
2dff0 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63  s is not being c
2e000 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69  alled from.** wi
2e010 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20  thin a callback 
2e020 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
2e030 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f  le xSync() metho
2e040 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74 68 65  d. If it is, the
2e050 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77   error.** code w
2e060 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51  ill be set to SQ
2e070 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a  LITE_LOCKED..*/.
2e080 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20  case OP_VBegin: 
2e090 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  {.  VTable *pVTa
2e0a0 62 3b 0a 20 20 70 56 54 61 62 20 3d 20 70 4f 70  b;.  pVTab = pOp
2e0b0 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63  ->p4.pVtab;.  rc
2e0c0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 42 65   = sqlite3VtabBe
2e0d0 67 69 6e 28 64 62 2c 20 70 56 54 61 62 29 3b 0a  gin(db, pVTab);.
2e0e0 20 20 69 66 28 20 70 56 54 61 62 20 29 20 73 71    if( pVTab ) sq
2e0f0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
2e100 72 72 6d 73 67 28 70 2c 20 70 56 54 61 62 2d 3e  rrmsg(p, pVTab->
2e110 70 56 74 61 62 29 3b 0a 20 20 62 72 65 61 6b 3b  pVtab);.  break;
2e120 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2e130 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2e140 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
2e150 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2e160 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2e170 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50 31  code: VCreate P1
2e180 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2e190 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  P4 is the name o
2e1a0 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
2e1b0 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  e in database P1
2e1c0 2e 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61  . Call the xCrea
2e1d0 74 65 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72  te method.** for
2e1e0 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a   that table..*/.
2e1f0 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a  case OP_VCreate:
2e200 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   {.  rc = sqlite
2e210 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28  3VtabCallCreate(
2e220 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
2e230 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72  ->p4.z, &p->zErr
2e240 4d 73 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Msg);.  break;.}
2e250 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2e260 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2e270 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
2e280 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2e290 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2e2a0 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20  de: VDestroy P1 
2e2b0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
2e2c0 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  4 is the name of
2e2d0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
2e2e0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
2e2f0 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74    Call the xDest
2e300 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66  roy method.** of
2e310 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a   that table..*/.
2e320 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79  case OP_VDestroy
2e330 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d  : {.  p->inVtabM
2e340 65 74 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20  ethod = 2;.  rc 
2e350 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  = sqlite3VtabCal
2e360 6c 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70  lDestroy(db, pOp
2e370 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
2e380 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  ;.  p->inVtabMet
2e390 68 6f 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  hod = 0;.  break
2e3a0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2e3b0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2e3c0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
2e3d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2e3e0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2e3f0 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20  pcode: VOpen P1 
2e400 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
2e410 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2e420 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
2e430 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
2e440 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
2e450 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20  ure..** P1 is a 
2e460 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20  cursor number.  
2e470 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e  This opcode open
2e480 73 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68  s a cursor to th
2e490 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  e virtual.** tab
2e4a0 6c 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68  le and stores th
2e4b0 61 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e  at cursor in P1.
2e4c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65  .*/.case OP_VOpe
2e4d0 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  n: {.  VdbeCurso
2e4e0 72 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74  r *pCur;.  sqlit
2e4f0 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a  e3_vtab_cursor *
2e500 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73  pVtabCursor;.  s
2e510 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
2e520 61 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f  ab;.  sqlite3_mo
2e530 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a  dule *pModule;..
2e540 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
2e550 52 65 61 64 65 72 20 29 3b 0a 20 20 70 43 75 72  Reader );.  pCur
2e560 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 43 75 72   = 0;.  pVtabCur
2e570 73 6f 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62  sor = 0;.  pVtab
2e580 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
2e590 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
2e5a0 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f  le = (sqlite3_mo
2e5b0 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d  dule *)pVtab->pM
2e5c0 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28  odule;.  assert(
2e5d0 70 56 74 61 62 20 26 26 20 70 4d 6f 64 75 6c 65  pVtab && pModule
2e5e0 29 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  );.  rc = pModul
2e5f0 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20  e->xOpen(pVtab, 
2e600 26 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  &pVtabCursor);. 
2e610 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
2e620 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
2e630 62 29 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45  b);.  if( SQLITE
2e640 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f  _OK==rc ){.    /
2e650 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c  * Initialize sql
2e660 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
2e670 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20   base class */. 
2e680 20 20 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e     pVtabCursor->
2e690 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a  pVtab = pVtab;..
2e6a0 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a      /* Initializ
2e6b0 65 20 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62  e vdbe cursor ob
2e6c0 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70 43 75 72  ject */.    pCur
2e6d0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
2e6e0 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  r(p, pOp->p1, 0,
2e6f0 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20 69 66 28   -1, 0);.    if(
2e700 20 70 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70   pCur ){.      p
2e710 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2e720 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a   = pVtabCursor;.
2e730 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2e740 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
2e750 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 4d 6f  d = 1;.      pMo
2e760 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74  dule->xClose(pVt
2e770 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  abCursor);.    }
2e780 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2e790 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2e7a0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2e7b0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2e7c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2e7d0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2e7e0 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50 32  e: VFilter P1 P2
2e7f0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
2e800 70 73 69 73 3a 20 69 50 6c 61 6e 3d 72 5b 50 33  psis: iPlan=r[P3
2e810 5d 20 7a 50 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a  ] zPlan='P4'.**.
2e820 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f  ** P1 is a curso
2e830 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56  r opened using V
2e840 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20  Open.  P2 is an 
2e850 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20  address to jump 
2e860 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c  to if.** the fil
2e870 74 65 72 65 64 20 72 65 73 75 6c 74 20 73 65 74  tered result set
2e880 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a   is empty..**.**
2e890 20 50 34 20 69 73 20 65 69 74 68 65 72 20 4e 55   P4 is either NU
2e8a0 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74  LL or a string t
2e8b0 68 61 74 20 77 61 73 20 67 65 6e 65 72 61 74 65  hat was generate
2e8c0 64 20 62 79 20 74 68 65 20 78 42 65 73 74 49 6e  d by the xBestIn
2e8d0 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66  dex.** method of
2e8e0 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68   the module.  Th
2e8f0 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  e interpretation
2e900 20 6f 66 20 74 68 65 20 50 34 20 73 74 72 69 6e   of the P4 strin
2e910 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20  g is left.** to 
2e920 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65  the module imple
2e930 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  mentation..**.**
2e940 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
2e950 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65 72  okes the xFilter
2e960 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76   method on the v
2e970 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65  irtual table spe
2e980 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e  cified.** by P1.
2e990 20 20 54 68 65 20 69 6e 74 65 67 65 72 20 71 75    The integer qu
2e9a0 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74  ery plan paramet
2e9b0 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73  er to xFilter is
2e9c0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
2e9d0 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73  ter.** P3. Regis
2e9e0 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20  ter P3+1 stores 
2e9f0 74 68 65 20 61 72 67 63 20 70 61 72 61 6d 65 74  the argc paramet
2ea00 65 72 20 74 6f 20 62 65 20 70 61 73 73 65 64 20  er to be passed 
2ea10 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65  to the.** xFilte
2ea20 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74  r method. Regist
2ea30 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61  ers P3+2..P3+1+a
2ea40 72 67 63 20 61 72 65 20 74 68 65 20 61 72 67 63  rgc are the argc
2ea50 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70  .** additional p
2ea60 61 72 61 6d 65 74 65 72 73 20 77 68 69 63 68 20  arameters which 
2ea70 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a  are passed to.**
2ea80 20 78 46 69 6c 74 65 72 20 61 73 20 61 72 67 76   xFilter as argv
2ea90 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 32 20  . Register P3+2 
2eaa0 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20  becomes argv[0] 
2eab0 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78  when passed to x
2eac0 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20  Filter..**.** A 
2ead0 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20  jump is made to 
2eae0 50 32 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  P2 if the result
2eaf0 20 73 65 74 20 61 66 74 65 72 20 66 69 6c 74 65   set after filte
2eb00 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d  ring would be em
2eb10 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  pty..*/.case OP_
2eb20 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20  VFilter: {   /* 
2eb30 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  jump */.  int nA
2eb40 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79  rg;.  int iQuery
2eb50 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
2eb60 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
2eb70 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79  e;.  Mem *pQuery
2eb80 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a  ;.  Mem *pArgc;.
2eb90 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63    sqlite3_vtab_c
2eba0 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73  ursor *pVtabCurs
2ebb0 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  or;.  sqlite3_vt
2ebc0 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56 64 62  ab *pVtab;.  Vdb
2ebd0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
2ebe0 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20   int res;.  int 
2ebf0 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67  i;.  Mem **apArg
2ec00 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20 26 61  ;..  pQuery = &a
2ec10 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
2ec20 70 41 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b  pArgc = &pQuery[
2ec30 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e  1];.  pCur = p->
2ec40 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2ec50 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
2ec60 61 6c 69 64 28 70 51 75 65 72 79 29 20 29 3b 0a  alid(pQuery) );.
2ec70 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
2ec80 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79  (pOp->p3, pQuery
2ec90 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  );.  assert( pCu
2eca0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  r->pVtabCursor )
2ecb0 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20  ;.  pVtabCursor 
2ecc0 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
2ecd0 73 6f 72 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  sor;.  pVtab = p
2ece0 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
2ecf0 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
2ed00 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a  Vtab->pModule;..
2ed10 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e    /* Grab the in
2ed20 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61  dex number and a
2ed30 72 67 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a  rgc parameters *
2ed40 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 51 75  /.  assert( (pQu
2ed50 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  ery->flags&MEM_I
2ed60 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d  nt)!=0 && pArgc-
2ed70 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20  >flags==MEM_Int 
2ed80 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74  );.  nArg = (int
2ed90 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69  )pArgc->u.i;.  i
2eda0 51 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75  Query = (int)pQu
2edb0 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20  ery->u.i;..  /* 
2edc0 49 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74  Invoke the xFilt
2edd0 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b  er method */.  {
2ede0 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  .    res = 0;.  
2edf0 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41    apArg = p->apA
2ee00 72 67 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d 20  rg;.    for(i = 
2ee10 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
2ee20 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20  .      apArg[i] 
2ee30 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20  = &pArgc[i+1];. 
2ee40 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
2ee50 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 61 70 41  MemStoreType(apA
2ee60 72 67 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 0a 20  rg[i]);.    }.. 
2ee70 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68     p->inVtabMeth
2ee80 6f 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d  od = 1;.    rc =
2ee90 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65   pModule->xFilte
2eea0 72 28 70 56 74 61 62 43 75 72 73 6f 72 2c 20 69  r(pVtabCursor, i
2eeb0 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a  Query, pOp->p4.z
2eec0 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a  , nArg, apArg);.
2eed0 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74      p->inVtabMet
2eee0 68 6f 64 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c  hod = 0;.    sql
2eef0 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
2ef00 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
2ef10 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2ef20 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
2ef30 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
2ef40 6f 66 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  of(pVtabCursor);
2ef50 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
2ef60 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  res ){.      pc 
2ef70 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
2ef80 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d     }.  }.  pCur-
2ef90 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20  >nullRow = 0;.. 
2efa0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2efb0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2efc0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2efd0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2efe0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2eff0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f  E./* Opcode: VCo
2f000 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20  lumn P1 P2 P3 * 
2f010 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
2f020 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32 29  [P3]=vcolumn(P2)
2f030 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  .**.** Store the
2f040 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32   value of the P2
2f050 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a  -th column of.**
2f060 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20   the row of the 
2f070 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68  virtual-table th
2f080 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75  at the .** P1 cu
2f090 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67  rsor is pointing
2f0a0 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65   to into registe
2f0b0 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P3..*/.case OP
2f0c0 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71  _VColumn: {.  sq
2f0d0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2f0e0 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
2f0f0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
2f100 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74  le;.  Mem *pDest
2f110 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
2f120 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20  ext sContext;.. 
2f130 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
2f140 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
2f150 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2f160 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2f170 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
2f180 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
2f190 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
2f1a0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
2f1b0 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f  pDest = &aMem[pO
2f1c0 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
2f1d0 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44  utToChange(p, pD
2f1e0 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72  est);.  if( pCur
2f1f0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
2f200 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2f210 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
2f220 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
2f230 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56  pVtab = pCur->pV
2f240 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
2f250 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
2f260 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
2f270 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
2f280 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65  >xColumn );.  me
2f290 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20  mset(&sContext, 
2f2a0 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65  0, sizeof(sConte
2f2b0 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  xt));..  /* The 
2f2c0 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20  output cell may 
2f2d0 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 62  already have a b
2f2e0 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e  uffer allocated.
2f2f0 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 63   Move.  ** the c
2f300 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73 20  urrent contents 
2f310 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20 73 6f  to sContext.s so
2f320 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73 65   in case the use
2f330 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a 2a  r-function .  **
2f340 20 63 61 6e 20 75 73 65 20 74 68 65 20 61 6c 72   can use the alr
2f350 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62  eady allocated b
2f360 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66  uffer instead of
2f370 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a 20   allocating a . 
2f380 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a   ** new one..  *
2f390 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  /.  sqlite3VdbeM
2f3a0 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78 74  emMove(&sContext
2f3b0 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d 65  .s, pDest);.  Me
2f3c0 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 73 43  mSetTypeFlag(&sC
2f3d0 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e 75  ontext.s, MEM_Nu
2f3e0 6c 6c 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4d 6f  ll);..  rc = pMo
2f3f0 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43  dule->xColumn(pC
2f400 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c  ur->pVtabCursor,
2f410 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d   &sContext, pOp-
2f420 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2);.  sqlite3V
2f430 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
2f440 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
2f450 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f   sContext.isErro
2f460 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 43  r ){.    rc = sC
2f470 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a  ontext.isError;.
2f480 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74    }..  /* Copy t
2f490 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
2f4a0 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65   function to the
2f4b0 20 50 33 20 72 65 67 69 73 74 65 72 2e 20 57 65   P3 register. We
2f4c0 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73 20 72 65  .  ** do this re
2f4d0 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
2f4e0 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 72  her or not an er
2f4f0 72 6f 72 20 6f 63 63 75 72 72 65 64 20 74 6f 20  ror occurred to 
2f500 65 6e 73 75 72 65 20 61 6e 79 0a 20 20 2a 2a 20  ensure any.  ** 
2f510 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61 74 69  dynamic allocati
2f520 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78 74 2e 73  on in sContext.s
2f530 20 28 61 20 4d 65 6d 20 73 74 72 75 63 74 29 20   (a Mem struct) 
2f540 69 73 20 20 72 65 6c 65 61 73 65 64 2e 0a 20 20  is  released..  
2f550 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
2f560 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26  ChangeEncoding(&
2f570 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65 6e 63 6f  sContext.s, enco
2f580 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33  ding);.  sqlite3
2f590 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 44 65 73  VdbeMemMove(pDes
2f5a0 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e 73 29 3b  t, &sContext.s);
2f5b0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
2f5c0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74  E(pOp->p3, pDest
2f5d0 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
2f5e0 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b  BLOBSIZE(pDest);
2f5f0 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ..  if( sqlite3V
2f600 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65  dbeMemTooBig(pDe
2f610 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  st) ){.    goto 
2f620 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62  too_big;.  }.  b
2f630 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2f640 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2f650 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2f660 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2f670 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2f680 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74  /* Opcode: VNext
2f690 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2f6a0 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74 75  ** Advance virtu
2f6b0 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74  al table P1 to t
2f6c0 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69  he next row in i
2f6d0 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e  ts result set an
2f6e0 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73  d.** jump to ins
2f6f0 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72  truction P2.  Or
2f700 2c 20 69 66 20 74 68 65 20 76 69 72 74 75 61 6c  , if the virtual
2f710 20 74 61 62 6c 65 20 68 61 73 20 72 65 61 63 68   table has reach
2f720 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66  ed.** the end of
2f730 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c   its result set,
2f740 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
2f750 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
2f760 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
2f770 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20  ase OP_VNext: { 
2f780 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73    /* jump */.  s
2f790 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
2f7a0 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
2f7b0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
2f7c0 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  ule;.  int res;.
2f7d0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2f7e0 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a  ur;..  res = 0;.
2f7f0 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73    pCur = p->apCs
2f800 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2f810 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61  sert( pCur->pVta
2f820 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  bCursor );.  if(
2f830 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29   pCur->nullRow )
2f840 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  {.    break;.  }
2f850 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d  .  pVtab = pCur-
2f860 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56  >pVtabCursor->pV
2f870 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2f880 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
2f890 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75  .  assert( pModu
2f8a0 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20  le->xNext );..  
2f8b0 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e  /* Invoke the xN
2f8c0 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20  ext() method of 
2f8d0 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72  the module. Ther
2f8e0 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20  e is no way for 
2f8f0 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79  the.  ** underly
2f900 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ing implementati
2f910 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20  on to return an 
2f920 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63  error if one occ
2f930 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20  urs during.  ** 
2f940 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64  xNext(). Instead
2f950 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  , if an error oc
2f960 63 75 72 73 2c 20 74 72 75 65 20 69 73 20 72 65  curs, true is re
2f970 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69  turned (indicati
2f980 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61  ng that .  ** da
2f990 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29  ta is available)
2f9a0 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63   and the error c
2f9b0 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77 68 65  ode returned whe
2f9c0 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a  n xColumn or.  *
2f9d0 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74  * some other met
2f9e0 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f  hod is next invo
2f9f0 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20  ked on the save 
2fa00 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75  virtual table cu
2fa10 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 70 2d 3e  rsor..  */.  p->
2fa20 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31  inVtabMethod = 1
2fa30 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
2fa40 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 70 56  ->xNext(pCur->pV
2fa50 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 70 2d  tabCursor);.  p-
2fa60 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
2fa70 30 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  0;.  sqlite3Vtab
2fa80 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
2fa90 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63  pVtab);.  if( rc
2faa0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2fab0 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65     res = pModule
2fac0 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70 56 74  ->xEof(pCur->pVt
2fad0 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 0a  abCursor);.  }..
2fae0 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20    if( !res ){.  
2faf0 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
2fb00 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50   data, jump to P
2fb10 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f  2 */.    pc = pO
2fb20 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
2fb30 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f   goto check_for_
2fb40 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 23 65 6e  interrupt;.}.#en
2fb50 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2fb60 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2fb70 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2fb80 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2fb90 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2fba0 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50  VRename P1 * * P
2fbb0 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
2fbc0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
2fbd0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
2fbe0 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
2fbf0 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
2fc00 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2fc10 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
2fc20 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65  sponding xRename
2fc30 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c   method. The val
2fc40 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65  ue.** in registe
2fc50 72 20 50 31 20 69 73 20 70 61 73 73 65 64 20 61  r P1 is passed a
2fc60 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75  s the zName argu
2fc70 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e  ment to the xRen
2fc80 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63  ame method..*/.c
2fc90 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20  ase OP_VRename: 
2fca0 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
2fcb0 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a   *pVtab;.  Mem *
2fcc0 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20  pName;..  pVtab 
2fcd0 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
2fce0 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20  >pVtab;.  pName 
2fcf0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2fd00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56 74 61  ;.  assert( pVta
2fd10 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e  b->pModule->xRen
2fd20 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ame );.  assert(
2fd30 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d   memIsValid(pNam
2fd40 65 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  e) );.  assert( 
2fd50 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2fd60 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
2fd70 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d  CE(pOp->p1, pNam
2fd80 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4e  e);.  assert( pN
2fd90 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ame->flags & MEM
2fda0 5f 53 74 72 20 29 3b 0a 20 20 74 65 73 74 63 61  _Str );.  testca
2fdb0 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d  se( pName->enc==
2fdc0 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20  SQLITE_UTF8 );. 
2fdd0 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65   testcase( pName
2fde0 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ->enc==SQLITE_UT
2fdf0 46 31 36 42 45 20 29 3b 0a 20 20 74 65 73 74 63  F16BE );.  testc
2fe00 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d  ase( pName->enc=
2fe10 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20  =SQLITE_UTF16LE 
2fe20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2fe30 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2fe40 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54  ing(pName, SQLIT
2fe50 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20 72  E_UTF8);.  if( r
2fe60 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2fe70 20 20 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e      rc = pVtab->
2fe80 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
2fe90 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a  (pVtab, pName->z
2fea0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  );.    sqlite3Vt
2feb0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
2fec0 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 70 2d  , pVtab);.    p-
2fed0 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20  >expired = 0;.  
2fee0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2fef0 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
2ff00 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2ff10 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
2ff20 20 56 55 70 64 61 74 65 20 50 31 20 50 32 20 50   VUpdate P1 P2 P
2ff30 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
2ff40 69 73 3a 20 64 61 74 61 3d 72 5b 50 33 40 50 32  is: data=r[P3@P2
2ff50 5d 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ].**.** P4 is a 
2ff60 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
2ff70 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
2ff80 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
2ff90 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
2ffa0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
2ffb0 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70  okes the corresp
2ffc0 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d  onding xUpdate m
2ffd0 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73  ethod. P2 values
2ffe0 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f  .** are contiguo
2fff0 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  us memory cells 
30000 73 74 61 72 74 69 6e 67 20 61 74 20 50 33 20 74  starting at P3 t
30010 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20 78 55  o pass to the xU
30020 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61  pdate .** invoca
30030 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20  tion. The value 
30040 69 6e 20 72 65 67 69 73 74 65 72 20 28 50 33 2b  in register (P3+
30050 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64  P2-1) correspond
30060 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74  s to the .** p2t
30070 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  h element of the
30080 20 61 72 67 76 20 61 72 72 61 79 20 70 61 73 73   argv array pass
30090 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a  ed to xUpdate..*
300a0 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65  *.** The xUpdate
300b0 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20   method will do 
300c0 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49  a DELETE or an I
300d0 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a  NSERT or both..*
300e0 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c  * The argv[0] el
300f0 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72  ement (which cor
30100 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f  responds to memo
30110 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69  ry cell P3).** i
30120 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61  s the rowid of a
30130 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20   row to delete. 
30140 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e   If argv[0] is N
30150 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20  ULL then no .** 
30160 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e  deletion occurs.
30170 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c    The argv[1] el
30180 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77  ement is the row
30190 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a  id of the new .*
301a0 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e  * row.  This can
301b0 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65   be NULL to have
301c0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
301d0 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65  le select the ne
301e0 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20  w .** rowid for 
301f0 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62  itself.  The sub
30200 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73  sequent elements
30210 20 69 6e 20 74 68 65 20 61 72 72 61 79 20 61 72   in the array ar
30220 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73  e .** the values
30230 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
30240 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a  he new row..**.*
30250 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20  * If P2==1 then 
30260 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70 65 72  no insert is per
30270 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d  formed.  argv[0]
30280 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
30290 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c  .** a row to del
302a0 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ete..**.** P1 is
302b0 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e   a boolean flag.
302c0 20 49 66 20 69 74 20 69 73 20 73 65 74 20 74 6f   If it is set to
302d0 20 74 72 75 65 20 61 6e 64 20 74 68 65 20 78 55   true and the xU
302e0 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73  pdate call.** is
302f0 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65   successful, the
30300 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65 74 75  n the value retu
30310 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
30320 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
30330 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74  d() .** is set t
30340 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
30350 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65  he rowid for the
30360 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74   row just insert
30370 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ed..*/.case OP_V
30380 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69  Update: {.  sqli
30390 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
303a0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  .  sqlite3_modul
303b0 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e  e *pModule;.  in
303c0 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b  t nArg;.  int i;
303d0 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  .  sqlite_int64 
303e0 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61  rowid;.  Mem **a
303f0 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b  pArg;.  Mem *pX;
30400 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
30410 3e 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c  >p2==1        ||
30420 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69   pOp->p5==OE_Fai
30430 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  l   || pOp->p5==
30440 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20  OE_Rollback .   
30450 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d      || pOp->p5==
30460 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d  OE_Abort || pOp-
30470 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c  >p5==OE_Ignore |
30480 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65  | pOp->p5==OE_Re
30490 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73  place.  );.  ass
304a0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
304b0 3d 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d  ==0 );.  pVtab =
304c0 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
304d0 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
304e0 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75   = (sqlite3_modu
304f0 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64  le *)pVtab->pMod
30500 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f  ule;.  nArg = pO
30510 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
30520 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
30530 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41  _VTAB );.  if( A
30540 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78  LWAYS(pModule->x
30550 55 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20 75  Update) ){.    u
30560 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  8 vtabOnConflict
30570 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e   = db->vtabOnCon
30580 66 6c 69 63 74 3b 0a 20 20 20 20 61 70 41 72 67  flict;.    apArg
30590 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20   = p->apArg;.   
305a0 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d   pX = &aMem[pOp-
305b0 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d  >p3];.    for(i=
305c0 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
305d0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
305e0 65 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b  emIsValid(pX) );
305f0 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  .      memAboutT
30600 6f 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a  oChange(p, pX);.
30610 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
30620 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 58  eMemStoreType(pX
30630 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69  );.      apArg[i
30640 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58  ] = pX;.      pX
30650 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62  ++;.    }.    db
30660 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  ->vtabOnConflict
30670 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20   = pOp->p5;.    
30680 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55  rc = pModule->xU
30690 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72  pdate(pVtab, nAr
306a0 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64  g, apArg, &rowid
306b0 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f  );.    db->vtabO
306c0 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61 62  nConflict = vtab
306d0 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20  OnConflict;.    
306e0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
306f0 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
30700 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
30710 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d  QLITE_OK && pOp-
30720 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73  >p1 ){.      ass
30730 65 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61  ert( nArg>1 && a
30740 70 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72  pArg[0] && (apAr
30750 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  g[0]->flags&MEM_
30760 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64  Null) );.      d
30770 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  b->lastRowid = l
30780 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64  astRowid = rowid
30790 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
307a0 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  (rc&0xff)==SQLIT
307b0 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 26 26 20  E_CONSTRAINT && 
307c0 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62  pOp->p4.pVtab->b
307d0 43 6f 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20 20  Constraint ){.  
307e0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d      if( pOp->p5=
307f0 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20  =OE_Ignore ){.  
30800 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
30810 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73  E_OK;.      }els
30820 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 65 72  e{.        p->er
30830 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f  rorAction = ((pO
30840 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63  p->p5==OE_Replac
30850 65 29 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20  e) ? OE_Abort : 
30860 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20  pOp->p5);.      
30870 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
30880 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b     p->nChange++;
30890 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
308a0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
308b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
308c0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
308d0 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49  ndef  SQLITE_OMI
308e0 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
308f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63  /* Opcode: Pagec
30900 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
30910 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
30920 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20   current number 
30930 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61  of pages in data
30940 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72  base P1 to memor
30950 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61  y cell P2..*/.ca
30960 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a  se OP_Pagecount:
30970 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
30980 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
30990 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   */.  pOut->u.i 
309a0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
309b0 73 74 50 61 67 65 28 64 62 2d 3e 61 44 62 5b 70  stPage(db->aDb[p
309c0 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20  Op->p1].pBt);.  
309d0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
309e0 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54  ..#ifndef  SQLIT
309f0 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
30a00 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GMAS./* Opcode: 
30a10 4d 61 78 50 67 63 6e 74 20 50 31 20 50 32 20 50  MaxPgcnt P1 P2 P
30a20 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20  3 * *.**.** Try 
30a30 74 6f 20 73 65 74 20 74 68 65 20 6d 61 78 69 6d  to set the maxim
30a40 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 6f  um page count fo
30a50 72 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f  r database P1 to
30a60 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 33   the value in P3
30a70 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20  ..** Do not let 
30a80 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65  the maximum page
30a90 20 63 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f   count fall belo
30aa0 77 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 61  w the current pa
30ab0 67 65 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20  ge count and.** 
30ac0 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68  do not change th
30ad0 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
30ae0 6f 75 6e 74 20 76 61 6c 75 65 20 69 66 20 50 33  ount value if P3
30af0 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  ==0..**.** Store
30b00 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
30b10 65 20 63 6f 75 6e 74 20 61 66 74 65 72 20 74 68  e count after th
30b20 65 20 63 68 61 6e 67 65 20 69 6e 20 72 65 67 69  e change in regi
30b30 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
30b40 20 4f 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20   OP_MaxPgcnt: { 
30b50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
30b60 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
30b70 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
30b80 6e 65 77 4d 61 78 3b 0a 20 20 42 74 72 65 65 20  newMax;.  Btree 
30b90 2a 70 42 74 3b 0a 0a 20 20 70 42 74 20 3d 20 64  *pBt;..  pBt = d
30ba0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
30bb0 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78 20 3d 20  pBt;.  newMax = 
30bc0 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  0;.  if( pOp->p3
30bd0 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61 78 20 3d   ){.    newMax =
30be0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
30bf0 74 50 61 67 65 28 70 42 74 29 3b 0a 20 20 20 20  tPage(pBt);.    
30c00 69 66 28 20 6e 65 77 4d 61 78 20 3c 20 28 75 6e  if( newMax < (un
30c10 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 20 29  signed)pOp->p3 )
30c20 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e 73 69 67   newMax = (unsig
30c30 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  ned)pOp->p3;.  }
30c40 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73  .  pOut->u.i = s
30c50 71 6c 69 74 65 33 42 74 72 65 65 4d 61 78 50 61  qlite3BtreeMaxPa
30c60 67 65 43 6f 75 6e 74 28 70 42 74 2c 20 6e 65 77  geCount(pBt, new
30c70 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Max);.  break;.}
30c80 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65  .#endif...#ifnde
30c90 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
30ca0 41 43 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  ACE./* Opcode: T
30cb0 72 61 63 65 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  race * * * P4 *.
30cc0 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67  **.** If tracing
30cd0 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20   is enabled (by 
30ce0 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63  the sqlite3_trac
30cf0 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20  e()) interface, 
30d00 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d  then.** the UTF-
30d10 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  8 string contain
30d20 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74  ed in P4 is emit
30d30 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65  ted on the trace
30d40 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63 61   callback..*/.ca
30d50 73 65 20 4f 50 5f 54 72 61 63 65 3a 20 7b 0a 20  se OP_Trace: {. 
30d60 20 63 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a 20   char *zTrace;. 
30d70 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20 69 66 28   char *z;..  if(
30d80 20 64 62 2d 3e 78 54 72 61 63 65 0a 20 20 20 26   db->xTrace.   &
30d90 26 20 21 70 2d 3e 64 6f 69 6e 67 52 65 72 75 6e  & !p->doingRerun
30da0 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d  .   && (zTrace =
30db0 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f   (pOp->p4.z ? pO
30dc0 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71  p->p4.z : p->zSq
30dd0 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20  l))!=0.  ){.    
30de0 7a 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45  z = sqlite3VdbeE
30df0 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61  xpandSql(p, zTra
30e00 63 65 29 3b 0a 20 20 20 20 64 62 2d 3e 78 54 72  ce);.    db->xTr
30e10 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72  ace(db->pTraceAr
30e20 67 2c 20 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74  g, z);.    sqlit
30e30 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 29 3b  e3DbFree(db, z);
30e40 0a 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49  .  }.#ifdef SQLI
30e50 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41  TE_USE_FCNTL_TRA
30e60 43 45 0a 20 20 7a 54 72 61 63 65 20 3d 20 28 70  CE.  zTrace = (p
30e70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e  Op->p4.z ? pOp->
30e80 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b  p4.z : p->zSql);
30e90 0a 20 20 69 66 28 20 7a 54 72 61 63 65 20 29 7b  .  if( zTrace ){
30ea0 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
30eb0 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e  for(i=0; i<db->n
30ec0 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Db; i++){.      
30ed0 69 66 28 20 28 28 31 3c 3c 69 29 20 26 20 70 2d  if( ((1<<i) & p-
30ee0 3e 62 74 72 65 65 4d 61 73 6b 29 3d 3d 30 20 29  >btreeMask)==0 )
30ef0 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
30f00 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f   sqlite3_file_co
30f10 6e 74 72 6f 6c 28 64 62 2c 20 64 62 2d 3e 61 44  ntrol(db, db->aD
30f20 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49  b[i].zName, SQLI
30f30 54 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 2c 20  TE_FCNTL_TRACE, 
30f40 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 20  zTrace);.    }. 
30f50 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
30f60 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52  ITE_USE_FCNTL_TR
30f70 41 43 45 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ACE */.#ifdef SQ
30f80 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
30f90 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
30fa0 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d  LITE_SqlTrace)!=
30fb0 30 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65 20  0.   && (zTrace 
30fc0 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70  = (pOp->p4.z ? p
30fd0 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53  Op->p4.z : p->zS
30fe0 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20  ql))!=0.  ){.   
30ff0 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
31000 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20  ntf("SQL-trace: 
31010 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a  %s\n", zTrace);.
31020 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
31030 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20  LITE_DEBUG */.  
31040 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
31050 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f  ../* Opcode: Noo
31060 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  p * * * * *.**.*
31070 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54  * Do nothing.  T
31080 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
31090 69 73 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20  is often useful 
310a0 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73  as a jump.** des
310b0 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a  tination..*/./*.
310c0 2a 2a 20 54 68 65 20 6d 61 67 69 63 20 45 78 70  ** The magic Exp
310d0 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20  lain opcode are 
310e0 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68  only inserted wh
310f0 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77  en explain==2 (w
31100 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61  hich.** is to sa
31110 79 20 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41  y when the EXPLA
31120 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79  IN QUERY PLAN sy
31130 6e 74 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a  ntax is used.).*
31140 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65  * This opcode re
31150 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  cords informatio
31160 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d  n from the optim
31170 69 7a 65 72 2e 20 20 49 74 20 69 73 20 74 68 65  izer.  It is the
31180 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20  .** the same as 
31190 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f  a no-op.  This o
311a0 70 63 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65  pcodesnever appe
311b0 61 72 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d  ars in a real VM
311c0 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66   program..*/.def
311d0 61 75 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ault: {         
311e0 20 2f 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c   /* This is real
311f0 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f  ly OP_Noop and O
31200 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61  P_Explain */.  a
31210 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
31220 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70  de==OP_Noop || p
31230 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
31240 78 70 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61  xplain );.  brea
31250 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  k;.}../*********
31260 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31270 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31280 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31290 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
312a0 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65  ****.** The case
312b0 73 20 6f 66 20 74 68 65 20 73 77 69 74 63 68 20  s of the switch 
312c0 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20  statement above 
312d0 74 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64  this line should
312e0 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64   all be indented
312f0 0a 2a 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e  .** by 6 spaces.
31300 20 20 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d    But the left-m
31310 6f 73 74 20 36 20 73 70 61 63 65 73 20 68 61 76  ost 6 spaces hav
31320 65 20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74  e been removed t
31330 6f 20 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a  o improve the.**
31340 20 72 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46   readability.  F
31350 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f  rom this point o
31360 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d  n down, the norm
31370 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72  al indentation r
31380 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74  ules are.** rest
31390 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ored..**********
313a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
313b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
313c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
313d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
313e0 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64  ***/.    }..#ifd
313f0 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
31400 20 20 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20      {.      u64 
31410 65 6c 61 70 73 65 64 20 3d 20 73 71 6c 69 74 65  elapsed = sqlite
31420 33 48 77 74 69 6d 65 28 29 20 2d 20 73 74 61 72  3Hwtime() - star
31430 74 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 79  t;.      pOp->cy
31440 63 6c 65 73 20 2b 3d 20 65 6c 61 70 73 65 64 3b  cles += elapsed;
31450 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b  .      pOp->cnt+
31460 2b 3b 0a 23 69 66 20 30 0a 20 20 20 20 20 20 20  +;.#if 0.       
31470 20 66 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c   fprintf(stdout,
31480 20 22 25 31 30 6c 6c 75 20 22 2c 20 65 6c 61 70   "%10llu ", elap
31490 73 65 64 29 3b 0a 20 20 20 20 20 20 20 20 73 71  sed);.        sq
314a0 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
314b0 28 73 74 64 6f 75 74 2c 20 6f 72 69 67 50 63 2c  (stdout, origPc,
314c0 20 26 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b 0a   &aOp[origPc]);.
314d0 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e  #endif.    }.#en
314e0 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20  dif..    /* The 
314f0 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61  following code a
31500 64 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74  dds nothing to t
31510 68 65 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69  he actual functi
31520 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f  onality.    ** o
31530 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20  f the program.  
31540 49 74 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20  It is only here 
31550 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20  for testing and 
31560 64 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a  debugging..    *
31570 2a 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68  * On the other h
31580 61 6e 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72  and, it does bur
31590 6e 20 43 50 55 20 63 79 63 6c 65 73 20 65 76 65  n CPU cycles eve
315a0 72 79 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a  ry time through.
315b0 20 20 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75      ** the evalu
315c0 61 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77  ator loop.  So w
315d0 65 20 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f  e can leave it o
315e0 75 74 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69  ut when NDEBUG i
315f0 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a  s defined..    *
31600 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47  /.#ifndef NDEBUG
31610 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e  .    assert( pc>
31620 3d 2d 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70  =-1 && pc<p->nOp
31630 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   );..#ifdef SQLI
31640 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
31650 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c   db->flags & SQL
31660 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b  ITE_VdbeTrace ){
31670 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 30  .      if( rc!=0
31680 20 29 20 70 72 69 6e 74 66 28 22 72 63 3d 25 64   ) printf("rc=%d
31690 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20 20 69  \n",rc);.      i
316a0 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  f( pOp->opflags 
316b0 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52  & (OPFLG_OUT2_PR
316c0 45 52 45 4c 45 41 53 45 7c 4f 50 46 4c 47 5f 4f  ERELEASE|OPFLG_O
316d0 55 54 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20  UT2) ){.        
316e0 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70 4f  registerTrace(pO
316f0 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p2, &aMem[pOp
31700 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  ->p2]);.      }.
31710 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f        if( pOp->o
31720 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
31730 55 54 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72  UT3 ){.        r
31740 65 67 69 73 74 65 72 54 72 61 63 65 28 70 4f 70  egisterTrace(pOp
31750 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p3, &aMem[pOp-
31760 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p3]);.      }. 
31770 20 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20     }.#endif  /* 
31780 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
31790 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55  #endif  /* NDEBU
317a0 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65  G */.  }  /* The
317b0 20 65 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28   end of the for(
317c0 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f  ;;) loop the loo
317d0 70 73 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64  ps through opcod
317e0 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77  es */..  /* If w
317f0 65 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69  e reach this poi
31800 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  nt, it means tha
31810 74 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66  t execution is f
31820 69 6e 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a  inished with.  *
31830 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f  * an error of so
31840 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64  me kind..  */.vd
31850 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20  be_error_halt:. 
31860 20 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20   assert( rc );. 
31870 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 74   p->rc = rc;.  t
31880 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33  estcase( sqlite3
31890 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f  GlobalConfig.xLo
318a0 67 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65  g!=0 );.  sqlite
318b0 33 5f 6c 6f 67 28 72 63 2c 20 22 73 74 61 74 65  3_log(rc, "state
318c0 6d 65 6e 74 20 61 62 6f 72 74 73 20 61 74 20 25  ment aborts at %
318d0 64 3a 20 5b 25 73 5d 20 25 73 22 2c 20 0a 20 20  d: [%s] %s", .  
318e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318f0 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d   pc, p->zSql, p-
31900 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c  >zErrMsg);.  sql
31910 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
31920 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
31930 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20  E_IOERR_NOMEM ) 
31940 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
31950 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c   = 1;.  rc = SQL
31960 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  ITE_ERROR;.  if(
31970 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
31980 75 6c 74 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c  ult>0 ){.    sql
31990 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
319a0 6d 61 28 64 62 2c 20 72 65 73 65 74 53 63 68 65  ma(db, resetSche
319b0 6d 61 4f 6e 46 61 75 6c 74 2d 31 29 3b 0a 20 20  maOnFault-1);.  
319c0 7d 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69 73 20  }..  /* This is 
319d0 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74  the only way out
319e0 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64 75   of this procedu
319f0 72 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f 0a  re.  We have to.
31a00 20 20 2a 2a 20 72 65 6c 65 61 73 65 20 74 68 65    ** release the
31a10 20 6d 75 74 65 78 65 73 20 6f 6e 20 62 74 72 65   mutexes on btre
31a20 65 73 20 74 68 61 74 20 77 65 72 65 20 61 63 71  es that were acq
31a30 75 69 72 65 64 20 61 74 20 74 68 65 0a 20 20 2a  uired at the.  *
31a40 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72  * top. */.vdbe_r
31a50 65 74 75 72 6e 3a 0a 20 20 64 62 2d 3e 6c 61 73  eturn:.  db->las
31a60 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
31a70 69 64 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20  id;.  testcase( 
31a80 6e 56 6d 53 74 65 70 3e 30 20 29 3b 0a 20 20 70  nVmStep>0 );.  p
31a90 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54  ->aCounter[SQLIT
31aa0 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f  E_STMTSTATUS_VM_
31ab0 53 54 45 50 5d 20 2b 3d 20 28 69 6e 74 29 6e 56  STEP] += (int)nV
31ac0 6d 53 74 65 70 3b 0a 20 20 73 71 6c 69 74 65 33  mStep;.  sqlite3
31ad0 56 64 62 65 4c 65 61 76 65 28 70 29 3b 0a 20 20  VdbeLeave(p);.  
31ae0 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a  return rc;..  /*
31af0 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66   Jump to here if
31b00 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
31b10 62 20 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51  b larger than SQ
31b20 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a  LITE_MAX_LENGTH.
31b30 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65    ** is encounte
31b40 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69  red..  */.too_bi
31b50 67 3a 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  g:.  sqlite3SetS
31b60 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
31b70 67 2c 20 64 62 2c 20 22 73 74 72 69 6e 67 20 6f  g, db, "string o
31b80 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29  r blob too big")
31b90 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
31ba0 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76  TOOBIG;.  goto v
31bb0 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
31bc0 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
31bd0 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  re if a malloc()
31be0 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f   fails..  */.no_
31bf0 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f  mem:.  db->mallo
31c00 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73  cFailed = 1;.  s
31c10 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
31c20 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
31c30 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22   "out of memory"
31c40 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
31c50 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76  _NOMEM;.  goto v
31c60 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
31c70 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
31c80 72 65 20 66 6f 72 20 61 6e 79 20 6f 74 68 65 72  re for any other
31c90 20 6b 69 6e 64 20 6f 66 20 66 61 74 61 6c 20 65   kind of fatal e
31ca0 72 72 6f 72 2e 20 20 54 68 65 20 22 72 63 22 20  rror.  The "rc" 
31cb0 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68  variable.  ** sh
31cc0 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65 20 65 72  ould hold the er
31cd0 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f  ror number..  */
31ce0 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72  .abort_due_to_er
31cf0 72 6f 72 3a 0a 20 20 61 73 73 65 72 74 28 20 70  ror:.  assert( p
31d00 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a  ->zErrMsg==0 );.
31d10 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
31d20 46 61 69 6c 65 64 20 29 20 72 63 20 3d 20 53 51  Failed ) rc = SQ
31d30 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66  LITE_NOMEM;.  if
31d40 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45  ( rc!=SQLITE_IOE
31d50 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  RR_NOMEM ){.    
31d60 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
31d70 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
31d80 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45  , "%s", sqlite3E
31d90 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a  rrStr(rc));.  }.
31da0 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
31db0 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
31dc0 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 74 68  mp to here if th
31dd0 65 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  e sqlite3_interr
31de0 75 70 74 28 29 20 41 50 49 20 73 65 74 73 20 74  upt() API sets t
31df0 68 65 20 69 6e 74 65 72 72 75 70 74 0a 20 20 2a  he interrupt.  *
31e00 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f  * flag..  */.abo
31e10 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72  rt_due_to_interr
31e20 75 70 74 3a 0a 20 20 61 73 73 65 72 74 28 20 64  upt:.  assert( d
31e30 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
31e40 74 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 53 51  ted );.  rc = SQ
31e50 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a  LITE_INTERRUPT;.
31e60 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20    p->rc = rc;.  
31e70 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
31e80 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
31e90 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45  , "%s", sqlite3E
31ea0 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 67 6f  rrStr(rc));.  go
31eb0 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
31ec0 6c 74 3b 0a 7d 0a                                lt;.}.