/ Hex Artifact Content
Login

Artifact 42b14547868f65b6d2d534287dc8cea56e3685f7:


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 54 68 65 20 66 6f 6c 6c  ../*.** The foll
0870: 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20 76 61 72  owing global var
0880: 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d 65  iable is increme
0890: 6e 74 65 64 20 65 76 65 72 79 20 74 69 6d 65 20  nted every time 
08a0: 61 20 63 75 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65  a cursor.** move
08b0: 73 2c 20 65 69 74 68 65 72 20 62 79 20 74 68 65  s, either by the
08c0: 20 4f 50 5f 53 65 65 6b 58 58 2c 20 4f 50 5f 4e   OP_SeekXX, OP_N
08d0: 65 78 74 2c 20 6f 72 20 4f 50 5f 50 72 65 76 20  ext, or OP_Prev 
08e0: 6f 70 63 6f 64 65 73 2e 20 20 54 68 65 20 74 65  opcodes.  The te
08f0: 73 74 0a 2a 2a 20 70 72 6f 63 65 64 75 72 65 73  st.** procedures
0900: 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d   use this inform
0910: 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75  ation to make su
0920: 72 65 20 74 68 61 74 20 69 6e 64 69 63 65 73 20  re that indices 
0930: 61 72 65 0a 2a 2a 20 77 6f 72 6b 69 6e 67 20 63  are.** working c
0940: 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20  orrectly.  This 
0950: 76 61 72 69 61 62 6c 65 20 68 61 73 20 6e 6f 20  variable has no 
0960: 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74  function other t
0970: 68 61 6e 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76  han to.** help v
0980: 65 72 69 66 79 20 74 68 65 20 63 6f 72 72 65 63  erify the correc
0990: 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  t operation of t
09a0: 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23  he library..*/.#
09b0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
09c0: 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 65  T.int sqlite3_se
09d0: 61 72 63 68 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a  arch_count = 0;.
09e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68  #endif../*.** Wh
09f0: 65 6e 20 74 68 69 73 20 67 6c 6f 62 61 6c 20 76  en this global v
0a00: 61 72 69 61 62 6c 65 20 69 73 20 70 6f 73 69 74  ariable is posit
0a10: 69 76 65 2c 20 69 74 20 67 65 74 73 20 64 65 63  ive, it gets dec
0a20: 72 65 6d 65 6e 74 65 64 20 6f 6e 63 65 20 62 65  remented once be
0a30: 66 6f 72 65 0a 2a 2a 20 65 61 63 68 20 69 6e 73  fore.** each ins
0a40: 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  truction in the 
0a50: 56 44 42 45 2e 20 20 57 68 65 6e 20 72 65 61 63  VDBE.  When reac
0a60: 68 65 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31  hes zero, the u1
0a70: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a  .isInterrupted.*
0a80: 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73  * field of the s
0a90: 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
0aa0: 20 69 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72   is set in order
0ab0: 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 64   to simulate and
0ac0: 20 69 6e 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a   interrupt..**.*
0ad0: 2a 20 54 68 69 73 20 66 61 63 69 6c 69 74 79 20  * This facility 
0ae0: 69 73 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  is used for test
0af0: 69 6e 67 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c  ing purposes onl
0b00: 79 2e 20 20 49 74 20 64 6f 65 73 20 6e 6f 74 20  y.  It does not 
0b10: 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61  function.** in a
0b20: 6e 20 6f 72 64 69 6e 61 72 79 20 62 75 69 6c 64  n ordinary build
0b30: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
0b40: 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69  TE_TEST.int sqli
0b50: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
0b60: 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  unt = 0;.#endif.
0b70: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  ./*.** The next 
0b80: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
0b90: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65  is incremented e
0ba0: 61 63 68 20 74 79 70 65 20 74 68 65 20 4f 50 5f  ach type the OP_
0bb0: 53 6f 72 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  Sort opcode.** i
0bc0: 73 20 65 78 65 63 75 74 65 64 2e 20 20 54 68 65  s executed.  The
0bd0: 20 74 65 73 74 20 70 72 6f 63 65 64 75 72 65 73   test procedures
0be0: 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d   use this inform
0bf0: 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75  ation to make su
0c00: 72 65 20 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69  re that.** sorti
0c10: 6e 67 20 69 73 20 6f 63 63 75 72 72 69 6e 67 20  ng is occurring 
0c20: 6f 72 20 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67  or not occurring
0c30: 20 61 74 20 61 70 70 72 6f 70 72 69 61 74 65 20   at appropriate 
0c40: 74 69 6d 65 73 2e 20 20 20 54 68 69 73 20 76 61  times.   This va
0c50: 72 69 61 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f  riable.** has no
0c60: 20 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20   function other 
0c70: 74 68 61 6e 20 74 6f 20 68 65 6c 70 20 76 65 72  than to help ver
0c80: 69 66 79 20 74 68 65 20 63 6f 72 72 65 63 74 20  ify the correct 
0c90: 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  operation of the
0ca0: 0a 2a 2a 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a  .** library..*/.
0cb0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
0cc0: 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73  ST.int sqlite3_s
0cd0: 6f 72 74 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23  ort_count = 0;.#
0ce0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
0cf0: 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61 72   next global var
0d00: 69 61 62 6c 65 20 72 65 63 6f 72 64 73 20 74 68  iable records th
0d10: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6c 61  e size of the la
0d20: 72 67 65 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a  rgest MEM_Blob.*
0d30: 2a 20 6f 72 20 4d 45 4d 5f 53 74 72 20 74 68 61  * or MEM_Str tha
0d40: 74 20 68 61 73 20 62 65 65 6e 20 75 73 65 64 20  t has been used 
0d50: 62 79 20 61 20 56 44 42 45 20 6f 70 63 6f 64 65  by a VDBE opcode
0d60: 2e 20 20 54 68 65 20 74 65 73 74 20 70 72 6f 63  .  The test proc
0d70: 65 64 75 72 65 73 0a 2a 2a 20 75 73 65 20 74 68  edures.** use th
0d80: 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  is information t
0d90: 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  o make sure that
0da0: 20 74 68 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66   the zero-blob f
0db0: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20  unctionality.** 
0dc0: 69 73 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  is working corre
0dd0: 63 74 6c 79 2e 20 20 20 54 68 69 73 20 76 61 72  ctly.   This var
0de0: 69 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e  iable has no fun
0df0: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0e00: 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69   to.** help veri
0e10: 66 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f  fy the correct o
0e20: 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  peration of the 
0e30: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0e40: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0e50: 6e 74 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62  nt sqlite3_max_b
0e60: 6c 6f 62 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61  lobsize = 0;.sta
0e70: 74 69 63 20 76 6f 69 64 20 75 70 64 61 74 65 4d  tic void updateM
0e80: 61 78 42 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a  axBlobsize(Mem *
0e90: 70 29 7b 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c  p){.  if( (p->fl
0ea0: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
0eb0: 45 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 26 26 20  EM_Blob))!=0 && 
0ec0: 70 2d 3e 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78  p->n>sqlite3_max
0ed0: 5f 62 6c 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20  _blobsize ){.   
0ee0: 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f   sqlite3_max_blo
0ef0: 62 73 69 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20  bsize = p->n;.  
0f00: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  }.}.#endif../*.*
0f10: 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62 61  * The next globa
0f20: 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69 6e  l variable is in
0f30: 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20 74  cremented each t
0f40: 79 70 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64  ype the OP_Found
0f50: 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78   opcode.** is ex
0f60: 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73 20  ecuted. This is 
0f70: 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68 65  used to test whe
0f80: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
0f90: 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f  foreign key.** o
0fa0: 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  peration impleme
0fb0: 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b  nted using OP_Fk
0fc0: 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e  IsZero is workin
0fd0: 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c 65  g. This variable
0fe0: 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  .** has no funct
0ff0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
1000: 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74 68  o help verify th
1010: 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74  e correct operat
1020: 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69  ion of the.** li
1030: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
1040: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
1050: 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63   sqlite3_found_c
1060: 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66  ount = 0;.#endif
1070: 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72  ../*.** Test a r
1080: 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20 69  egister to see i
1090: 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68 65  f it exceeds the
10a0: 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d   current maximum
10b0: 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49   blob size..** I
10c0: 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f 72  f it does, recor
10d0: 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d 75  d the new maximu
10e0: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a  m blob size..*/.
10f0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1100: 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65 66  TE_TEST) && !def
1110: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1120: 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23  _BUILTIN_TEST).#
1130: 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d   define UPDATE_M
1140: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 20 20  AX_BLOBSIZE(P)  
1150: 75 70 64 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a  updateMaxBlobsiz
1160: 65 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  e(P).#else.# def
1170: 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ine UPDATE_MAX_B
1180: 4c 4f 42 53 49 5a 45 28 50 29 0a 23 65 6e 64 69  LOBSIZE(P).#endi
1190: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  f../*.** Convert
11a0: 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69 73   the given regis
11b0: 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ter into a strin
11c0: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
11d0: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
11e0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
11f0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
1200: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
1210: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
1220: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
1230: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
1240: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
1250: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
1260: 6e 67 69 66 79 28 50 2c 65 6e 63 29 29 20 5c 0a  ngify(P,enc)) \.
1270: 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d       { goto no_m
1280: 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  em; }../*.** An 
1290: 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67  ephemeral string
12a0: 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66 69 65   value (signifie
12b0: 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45 70 68  d by the MEM_Eph
12c0: 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61 69 6e  em flag) contain
12d0: 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74  s.** a pointer t
12e0: 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20  o a dynamically 
12f0: 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69 6e 67  allocated string
1300: 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74 68 65   where some othe
1310: 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73 20 72  r entity.** is r
1320: 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 64  esponsible for d
1330: 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 61 74  eallocating that
1340: 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61 75 73   string.  Becaus
1350: 65 20 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a  e the register.*
1360: 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 72  * does not contr
1370: 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c 20 69  ol the string, i
1380: 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c 65 74  t might be delet
1390: 65 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 72  ed without the r
13a0: 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69  egister.** knowi
13b0: 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ng it..**.** Thi
13c0: 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76 65 72  s routine conver
13d0: 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20  ts an ephemeral 
13e0: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 64 79  string into a dy
13f0: 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
1400: 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20 74 68  ted.** string th
1410: 61 74 20 74 68 65 20 72 65 67 69 73 74 65 72 20  at the register 
1420: 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e  itself controls.
1430: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1440: 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72 74 73  , it.** converts
1450: 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20 73 74   an MEM_Ephem st
1460: 72 69 6e 67 20 69 6e 74 6f 20 61 6e 20 4d 45 4d  ring into an MEM
1470: 5f 44 79 6e 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a  _Dyn string..*/.
1480: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1490: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
14a0: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
14b0: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
14c0: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
14d0: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
14e0: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
14f0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 0a 2a 2a 20  no_mem;}../*.** 
1500: 43 61 6c 6c 20 73 71 6c 69 74 65 33 56 64 62 65  Call sqlite3Vdbe
1510: 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 29 20  MemExpandBlob() 
1520: 6f 6e 20 74 68 65 20 73 75 70 70 6c 69 65 64 20  on the supplied 
1530: 76 61 6c 75 65 20 28 74 79 70 65 20 4d 65 6d 2a  value (type Mem*
1540: 29 0a 2a 2a 20 50 20 69 66 20 72 65 71 75 69 72  ).** P if requir
1550: 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ed..*/.#define E
1560: 78 70 61 6e 64 42 6c 6f 62 28 50 29 20 28 28 28  xpandBlob(P) (((
1570: 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65  P)->flags&MEM_Ze
1580: 72 6f 29 3f 73 71 6c 69 74 65 33 56 64 62 65 4d  ro)?sqlite3VdbeM
1590: 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 50 29 3a  emExpandBlob(P):
15a0: 30 29 0a 0a 2f 2a 0a 2a 2a 20 41 72 67 75 6d 65  0)../*.** Argume
15b0: 6e 74 20 70 4d 65 6d 20 70 6f 69 6e 74 73 20 61  nt pMem points a
15c0: 74 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  t a register tha
15d0: 74 20 77 69 6c 6c 20 62 65 20 70 61 73 73 65 64  t will be passed
15e0: 20 74 6f 20 61 0a 2a 2a 20 75 73 65 72 2d 64 65   to a.** user-de
15f0: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 6f  fined function o
1600: 72 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  r returned to th
1610: 65 20 75 73 65 72 20 61 73 20 74 68 65 20 72 65  e user as the re
1620: 73 75 6c 74 20 6f 66 20 61 20 71 75 65 72 79 2e  sult of a query.
1630: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
1640: 20 73 65 74 73 20 74 68 65 20 70 4d 65 6d 2d 3e   sets the pMem->
1650: 74 79 70 65 20 76 61 72 69 61 62 6c 65 20 75 73  type variable us
1660: 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65  ed by the sqlite
1670: 33 5f 76 61 6c 75 65 5f 2a 28 29 20 0a 2a 2a 20  3_value_*() .** 
1680: 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 76 6f 69  routines..*/.voi
1690: 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  d sqlite3VdbeMem
16a0: 53 74 6f 72 65 54 79 70 65 28 4d 65 6d 20 2a 70  StoreType(Mem *p
16b0: 4d 65 6d 29 7b 0a 20 20 69 6e 74 20 66 6c 61 67  Mem){.  int flag
16c0: 73 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b  s = pMem->flags;
16d0: 0a 20 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d  .  if( flags & M
16e0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70  EM_Null ){.    p
16f0: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
1700: 54 45 5f 4e 55 4c 4c 3b 0a 20 20 7d 0a 20 20 65  TE_NULL;.  }.  e
1710: 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26 20  lse if( flags & 
1720: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70  MEM_Int ){.    p
1730: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
1740: 54 45 5f 49 4e 54 45 47 45 52 3b 0a 20 20 7d 0a  TE_INTEGER;.  }.
1750: 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73    else if( flags
1760: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
1770: 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20     pMem->type = 
1780: 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3b 0a 20 20  SQLITE_FLOAT;.  
1790: 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61  }.  else if( fla
17a0: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a  gs & MEM_Str ){.
17b0: 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d      pMem->type =
17c0: 20 53 51 4c 49 54 45 5f 54 45 58 54 3b 0a 20 20   SQLITE_TEXT;.  
17d0: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4d 65 6d 2d  }else{.    pMem-
17e0: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 42  >type = SQLITE_B
17f0: 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  LOB;.  }.}../*.*
1800: 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
1810: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
1820: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1830: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1840: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1850: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1860: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
1870: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
1880: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
1890: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
18a0: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
18b0: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
18c0: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
18d0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
18e0: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
18f0: 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  sor */.  int nFi
1900: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
1910: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
1920: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1930: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1940: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1950: 20 20 20 20 2f 2a 20 57 68 65 6e 20 64 61 74 61      /* When data
1960: 62 61 73 65 20 74 68 65 20 63 75 72 73 6f 72 20  base the cursor 
1970: 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d  belongs to, or -
1980: 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42 74 72  1 */.  int isBtr
1990: 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f 2a 20  eeCursor     /* 
19a0: 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65 65 2e  True for B-Tree.
19b0: 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73 65 75    False for pseu
19c0: 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74 61 62  do-table or vtab
19d0: 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64   */.){.  /* Find
19e0: 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
19f0: 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73   that will be us
1a00: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
1a10: 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20  blob of memory. 
1a20: 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72   ** required for
1a30: 20 74 68 69 73 20 56 64 62 65 43 75 72 73 6f 72   this VdbeCursor
1a40: 20 73 74 72 75 63 74 75 72 65 2e 20 49 74 20 69   structure. It i
1a50: 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20  s convenient to 
1a60: 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62 65  use a .  ** vdbe
1a70: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20   memory cell to 
1a80: 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f 72  manage the memor
1a90: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
1aa0: 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a  uired for a.  **
1ab0: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1ac0: 63 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f  cture for the fo
1ad0: 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a  llowing reasons:
1ae0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53  .  **.  **   * S
1af0: 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20  ometimes cursor 
1b00: 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64  numbers are used
1b10: 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66   for a couple of
1b20: 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20   different.  ** 
1b30: 20 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20      purposes in 
1b40: 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20  a vdbe program. 
1b50: 54 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73  The different us
1b60: 65 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65  es might require
1b70: 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72  .  **     differ
1b80: 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61  ent sized alloca
1b90: 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65  tions. Memory ce
1ba0: 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77  lls provide grow
1bb0: 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c  able.  **     al
1bc0: 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a  locations..  **.
1bd0: 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73    **   * When us
1be0: 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52  ing ENABLE_MEMOR
1bf0: 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65  Y_MANAGEMENT, me
1c00: 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72  mory cell buffer
1c10: 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62  s can.  **     b
1c20: 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76  e freed lazily v
1c30: 69 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72  ia the sqlite3_r
1c40: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20  elease_memory() 
1c50: 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20  API. This.  **  
1c60: 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65     minimizes the
1c70: 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f   number of mallo
1c80: 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20  c calls made by 
1c90: 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a  the system..  **
1ca0: 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c  .  ** Memory cel
1cb0: 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61  ls for cursors a
1cc0: 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20  re allocated at 
1cd0: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61  the top of the a
1ce0: 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63  ddress.  ** spac
1cf0: 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  e. Memory cell (
1d00: 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70  p->nMem) corresp
1d10: 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30  onds to cursor 0
1d20: 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a  . Space for.  **
1d30: 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e   cursor 1 is man
1d40: 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63  aged by memory c
1d50: 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c  ell (p->nMem-1),
1d60: 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d   etc..  */.  Mem
1d70: 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65   *pMem = &p->aMe
1d80: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b  m[p->nMem-iCur];
1d90: 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20  ..  int nByte;. 
1da0: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1db0: 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20   = 0;.  nByte = 
1dc0: 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73 69  .      ROUND8(si
1dd0: 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29  zeof(VdbeCursor)
1de0: 29 20 2b 20 0a 20 20 20 20 20 20 28 69 73 42 74  ) + .      (isBt
1df0: 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69 74 65  reeCursor?sqlite
1e00: 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65  3BtreeCursorSize
1e10: 28 29 3a 30 29 20 2b 20 0a 20 20 20 20 20 20 32  ():0) + .      2
1e20: 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75  *nField*sizeof(u
1e30: 33 32 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  32);..  assert( 
1e40: 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  iCur<p->nCursor 
1e50: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73  );.  if( p->apCs
1e60: 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20 20 73  r[iCur] ){.    s
1e70: 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75  qlite3VdbeFreeCu
1e80: 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72  rsor(p, p->apCsr
1e90: 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70 2d 3e  [iCur]);.    p->
1ea0: 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 30 3b  apCsr[iCur] = 0;
1eb0: 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c 49 54  .  }.  if( SQLIT
1ec0: 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56 64 62  E_OK==sqlite3Vdb
1ed0: 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e  eMemGrow(pMem, n
1ee0: 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20  Byte, 0) ){.    
1ef0: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
1f00: 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72 73   pCx = (VdbeCurs
1f10: 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20  or*)pMem->z;.   
1f20: 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c 20   memset(pCx, 0, 
1f30: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
1f40: 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e 69 44  r));.    pCx->iD
1f50: 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70 43 78  b = iDb;.    pCx
1f60: 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c  ->nField = nFiel
1f70: 64 3b 0a 20 20 20 20 69 66 28 20 6e 46 69 65 6c  d;.    if( nFiel
1f80: 64 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  d ){.      pCx->
1f90: 61 54 79 70 65 20 3d 20 28 75 33 32 20 2a 29 26  aType = (u32 *)&
1fa0: 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73  pMem->z[ROUND8(s
1fb0: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
1fc0: 29 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ))];.    }.    i
1fd0: 66 28 20 69 73 42 74 72 65 65 43 75 72 73 6f 72  f( isBtreeCursor
1fe0: 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 70   ){.      pCx->p
1ff0: 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72 73  Cursor = (BtCurs
2000: 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20 26  or*).          &
2010: 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73  pMem->z[ROUND8(s
2020: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
2030: 29 29 2b 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65  ))+2*nField*size
2040: 6f 66 28 75 33 32 29 5d 3b 0a 20 20 20 20 20 20  of(u32)];.      
2050: 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
2060: 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43 75 72  orZero(pCx->pCur
2070: 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
2080: 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a    return pCx;.}.
2090: 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f  ./*.** Try to co
20a0: 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20 69 6e  nvert a value in
20b0: 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70  to a numeric rep
20c0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 77  resentation if w
20d0: 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77  e can.** do so w
20e0: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69  ithout loss of i
20f0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20  nformation.  In 
2100: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
2110: 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f  the string.** lo
2120: 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65  oks like a numbe
2130: 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e  r, convert it in
2140: 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66  to a number.  If
2150: 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20   it does not.** 
2160: 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62  look like a numb
2170: 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61 6c 6f  er, leave it alo
2180: 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ne..*/.static vo
2190: 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  id applyNumericA
21a0: 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52 65  ffinity(Mem *pRe
21b0: 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65 63 2d  c){.  if( (pRec-
21c0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 52 65  >flags & (MEM_Re
21d0: 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30 20  al|MEM_Int))==0 
21e0: 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 61 6c 6e  ){.    int realn
21f0: 75 6d 3b 0a 20 20 20 20 75 38 20 65 6e 63 20 3d  um;.    u8 enc =
2200: 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 20 20   pRec->enc;.    
2210: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
2220: 6c 54 65 72 6d 69 6e 61 74 65 28 70 52 65 63 29  lTerminate(pRec)
2230: 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d  ;.    if( (pRec-
2240: 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20  >flags&MEM_Str) 
2250: 26 26 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 62  && sqlite3IsNumb
2260: 65 72 28 70 52 65 63 2d 3e 7a 2c 20 26 72 65 61  er(pRec->z, &rea
2270: 6c 6e 75 6d 2c 20 65 6e 63 29 20 29 7b 0a 20 20  lnum, enc) ){.  
2280: 20 20 20 20 69 36 34 20 76 61 6c 75 65 3b 0a 20      i64 value;. 
2290: 20 20 20 20 20 63 68 61 72 20 2a 7a 55 74 66 38       char *zUtf8
22a0: 20 3d 20 70 52 65 63 2d 3e 7a 3b 0a 23 69 66 6e   = pRec->z;.#ifn
22b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
22c0: 55 54 46 31 36 0a 20 20 20 20 20 20 69 66 28 20  UTF16.      if( 
22d0: 65 6e 63 21 3d 53 51 4c 49 54 45 5f 55 54 46 38  enc!=SQLITE_UTF8
22e0: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
22f0: 72 74 28 20 70 52 65 63 2d 3e 64 62 20 29 3b 0a  rt( pRec->db );.
2300: 20 20 20 20 20 20 20 20 7a 55 74 66 38 20 3d 20          zUtf8 = 
2310: 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28  sqlite3Utf16to8(
2320: 70 52 65 63 2d 3e 64 62 2c 20 70 52 65 63 2d 3e  pRec->db, pRec->
2330: 7a 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29  z, pRec->n, enc)
2340: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 7a  ;.        if( !z
2350: 55 74 66 38 20 29 20 72 65 74 75 72 6e 3b 0a 20  Utf8 ) return;. 
2360: 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20       }.#endif.  
2370: 20 20 20 20 69 66 28 20 21 72 65 61 6c 6e 75 6d      if( !realnum
2380: 20 26 26 20 73 71 6c 69 74 65 33 41 74 6f 69 36   && sqlite3Atoi6
2390: 34 28 7a 55 74 66 38 2c 20 26 76 61 6c 75 65 29  4(zUtf8, &value)
23a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 52 65 63   ){.        pRec
23b0: 2d 3e 75 2e 69 20 3d 20 76 61 6c 75 65 3b 0a 20  ->u.i = value;. 
23c0: 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70         MemSetTyp
23d0: 65 46 6c 61 67 28 70 52 65 63 2c 20 4d 45 4d 5f  eFlag(pRec, MEM_
23e0: 49 6e 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Int);.      }els
23f0: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
2400: 65 33 41 74 6f 46 28 7a 55 74 66 38 2c 20 26 70  e3AtoF(zUtf8, &p
2410: 52 65 63 2d 3e 72 29 3b 0a 20 20 20 20 20 20 20  Rec->r);.       
2420: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
2430: 70 52 65 63 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b  pRec, MEM_Real);
2440: 0a 20 20 20 20 20 20 7d 0a 23 69 66 6e 64 65 66  .      }.#ifndef
2450: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
2460: 31 36 0a 20 20 20 20 20 20 69 66 28 20 65 6e 63  16.      if( enc
2470: 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b  !=SQLITE_UTF8 ){
2480: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2490: 44 62 46 72 65 65 28 70 52 65 63 2d 3e 64 62 2c  DbFree(pRec->db,
24a0: 20 7a 55 74 66 38 29 3b 0a 20 20 20 20 20 20 7d   zUtf8);.      }
24b0: 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20  .#endif.    }.  
24c0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65  }.}../*.** Proce
24d0: 73 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69  ssing is determi
24e0: 6e 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69  ne by the affini
24f0: 74 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a  ty parameter:.**
2500: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  .** SQLITE_AFF_I
2510: 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54  NTEGER:.** SQLIT
2520: 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53  E_AFF_REAL:.** S
2530: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
2540: 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20  C:.**    Try to 
2550: 63 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  convert pRec to 
2560: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2570: 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a  sentation or a .
2580: 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70  **    floating-p
2590: 6f 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74  oint representat
25a0: 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65  ion if an intege
25b0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
25c0: 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f  .**    is not po
25d0: 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68  ssible.  Note th
25e0: 61 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72  at the integer r
25f0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2600: 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72  .**    always pr
2610: 65 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66  eferred, even if
2620: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73   the affinity is
2630: 20 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a   REAL, because.*
2640: 2a 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20  *    an integer 
2650: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2660: 73 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66  s more space eff
2670: 69 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a  icient on disk..
2680: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
2690: 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e  _TEXT:.**    Con
26a0: 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74  vert pRec to a t
26b0: 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  ext representati
26c0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  on..**.** SQLITE
26d0: 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20  _AFF_NONE:.**   
26e0: 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73   No-op.  pRec is
26f0: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73   unchanged..*/.s
2700: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
2710: 41 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20  Affinity(.  Mem 
2720: 2a 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20  *pRec,          
2730: 2f 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20  /* The value to 
2740: 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74  apply affinity t
2750: 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  o */.  char affi
2760: 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68  nity,      /* Th
2770: 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
2780: 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38   applied */.  u8
2790: 20 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20   enc            
27a0: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65    /* Use this te
27b0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29  xt encoding */.)
27c0: 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79  {.  if( affinity
27d0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  ==SQLITE_AFF_TEX
27e0: 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79  T ){.    /* Only
27f0: 20 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e   attempt the con
2800: 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20  version to TEXT 
2810: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69  if there is an i
2820: 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20  nteger or real. 
2830: 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61     ** representa
2840: 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e  tion (blob and N
2850: 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63  ULL do not get c
2860: 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f  onverted) but no
2870: 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72   string.    ** r
2880: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20  epresentation.. 
2890: 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d     */.    if( 0=
28a0: 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45  =(pRec->flags&ME
28b0: 4d 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d  M_Str) && (pRec-
28c0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c  >flags&(MEM_Real
28d0: 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20  |MEM_Int)) ){.  
28e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
28f0: 65 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63  emStringify(pRec
2900: 2c 20 65 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20  , enc);.    }.  
2910: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d    pRec->flags &=
2920: 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f   ~(MEM_Real|MEM_
2930: 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  Int);.  }else if
2940: 28 20 61 66 66 69 6e 69 74 79 21 3d 53 51 4c 49  ( affinity!=SQLI
2950: 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20  TE_AFF_NONE ){. 
2960: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
2970: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2980: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
2990: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
29a0: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
29b0: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
29c0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
29d0: 43 20 29 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75  C );.    applyNu
29e0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52  mericAffinity(pR
29f0: 65 63 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65  ec);.    if( pRe
2a00: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  c->flags & MEM_R
2a10: 65 61 6c 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  eal ){.      sql
2a20: 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41  ite3VdbeIntegerA
2a30: 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20  ffinity(pRec);. 
2a40: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a     }.  }.}../*.*
2a50: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2a60: 20 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66   the type of a f
2a70: 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
2a80: 20 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c   or a result col
2a90: 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75  umn.** into a nu
2aa0: 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61  meric representa
2ab0: 74 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65  tion.  Use eithe
2ac0: 72 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41  r INTEGER or REA
2ad0: 4c 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69  L whichever.** i
2ae0: 73 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20  s appropriate.  
2af0: 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20  But only do the 
2b00: 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74  conversion if it
2b10: 20 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74   is possible wit
2b20: 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20  hout.** loss of 
2b30: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20  information and 
2b40: 72 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73  return the revis
2b50: 65 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61  ed type of the a
2b60: 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54  rgument..**.** T
2b70: 68 69 73 20 69 73 20 61 6e 20 45 58 50 45 52 49  his is an EXPERI
2b80: 4d 45 4e 54 41 4c 20 61 70 69 20 61 6e 64 20 69  MENTAL api and i
2b90: 73 20 73 75 62 6a 65 63 74 20 74 6f 20 63 68 61  s subject to cha
2ba0: 6e 67 65 20 6f 72 20 72 65 6d 6f 76 61 6c 2e 0a  nge or removal..
2bb0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76  */.int sqlite3_v
2bc0: 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70  alue_numeric_typ
2bd0: 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  e(sqlite3_value 
2be0: 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70  *pVal){.  Mem *p
2bf0: 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c  Mem = (Mem*)pVal
2c00: 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  ;.  applyNumeric
2c10: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a  Affinity(pMem);.
2c20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2c30: 53 74 6f 72 65 54 79 70 65 28 70 4d 65 6d 29 3b  StoreType(pMem);
2c40: 0a 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d 3e  .  return pMem->
2c50: 74 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45  type;.}../*.** E
2c60: 78 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 20  xported version 
2c70: 6f 66 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  of applyAffinity
2c80: 28 29 2e 20 54 68 69 73 20 6f 6e 65 20 77 6f 72  (). This one wor
2c90: 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f 76 61  ks on sqlite3_va
2ca0: 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68  lue*, .** not th
2cb0: 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d 2a 20  e internal Mem* 
2cc0: 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  type..*/.void sq
2cd0: 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41  lite3ValueApplyA
2ce0: 66 66 69 6e 69 74 79 28 0a 20 20 73 71 6c 69 74  ffinity(.  sqlit
2cf0: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 2c 20  e3_value *pVal, 
2d00: 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79 2c 20  .  u8 affinity, 
2d10: 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20 20 61  .  u8 enc.){.  a
2d20: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28 4d 65  pplyAffinity((Me
2d30: 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69 6e 69  m *)pVal, affini
2d40: 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66  ty, enc);.}..#if
2d50: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2d60: 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e  ./*.** Write a n
2d70: 69 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65  ice string repre
2d80: 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
2d90: 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c   contents of cel
2da0: 6c 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62  l pMem.** into b
2db0: 75 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67  uffer zBuf, leng
2dc0: 74 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64  th nBuf..*/.void
2dd0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50   sqlite3VdbeMemP
2de0: 72 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a  rettyPrint(Mem *
2df0: 70 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66  pMem, char *zBuf
2e00: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20  ){.  char *zCsr 
2e10: 3d 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20  = zBuf;.  int f 
2e20: 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a  = pMem->flags;..
2e30: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
2e40: 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61  har *const encna
2e50: 6d 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20  mes[] = {"(X)", 
2e60: 22 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c  "(8)", "(16LE)",
2e70: 20 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69   "(16BE)"};..  i
2e80: 66 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b  f( f&MEM_Blob ){
2e90: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
2ea0: 63 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20  char c;.    if( 
2eb0: 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20  f & MEM_Dyn ){. 
2ec0: 20 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20       c = 'z';.  
2ed0: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
2ee0: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
2ef0: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
2f00: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
2f10: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
2f20: 20 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20       c = 't';.  
2f30: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
2f40: 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70   (MEM_Dyn|MEM_Ep
2f50: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
2f60: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
2f70: 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20  M_Ephem ){.     
2f80: 20 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20   c = 'e';.      
2f90: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2fa0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e  M_Static|MEM_Dyn
2fb0: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
2fc0: 73 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73  se{.      c = 's
2fd0: 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71  ';.    }..    sq
2fe0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
2ff0: 30 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20  00, zCsr, "%c", 
3000: 63 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  c);.    zCsr += 
3010: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3020: 7a 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74  zCsr);.    sqlit
3030: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3040: 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d   zCsr, "%d[", pM
3050: 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72  em->n);.    zCsr
3060: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3070: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66  n30(zCsr);.    f
3080: 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20  or(i=0; i<16 && 
3090: 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b  i<pMem->n; i++){
30a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
30b0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
30c0: 72 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74  r, "%02X", ((int
30d0: 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78  )pMem->z[i] & 0x
30e0: 46 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  FF));.      zCsr
30f0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3100: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
3110: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
3120: 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b  16 && i<pMem->n;
3130: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61   i++){.      cha
3140: 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d  r z = pMem->z[i]
3150: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32  ;.      if( z<32
3160: 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73   || z>126 ) *zCs
3170: 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  r++ = '.';.     
3180: 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20   else *zCsr++ = 
3190: 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71  z;.    }..    sq
31a0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
31b0: 30 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c  00, zCsr, "]%s",
31c0: 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e   encnames[pMem->
31d0: 65 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20  enc]);.    zCsr 
31e0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
31f0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66  30(zCsr);.    if
3200: 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ( f & MEM_Zero )
3210: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
3220: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3230: 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e  sr,"+%dz",pMem->
3240: 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20  u.nZero);.      
3250: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3260: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
3270: 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d     }.    *zCsr =
3280: 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69   '\0';.  }else i
3290: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29  f( f & MEM_Str )
32a0: 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a  {.    int j, k;.
32b0: 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20      zBuf[0] = ' 
32c0: 27 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  ';.    if( f & M
32d0: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
32e0: 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20  zBuf[1] = 'z';. 
32f0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
3300: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
3310: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
3320: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
3330: 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a  & MEM_Static ){.
3340: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3350: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
3360: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
3370: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
3380: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
3390: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
33a0: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
33b0: 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'e';.      ass
33c0: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
33d0: 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d  tatic|MEM_Dyn))=
33e0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
33f0: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3400: 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20   's';.    }.    
3410: 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74  k = 2;.    sqlit
3420: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3430: 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c   &zBuf[k], "%d",
3440: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b   pMem->n);.    k
3450: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3460: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
3470: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27     zBuf[k++] = '
3480: 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b  [';.    for(j=0;
3490: 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d   j<15 && j<pMem-
34a0: 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; j++){.      
34b0: 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a  u8 c = pMem->z[j
34c0: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d  ];.      if( c>=
34d0: 30 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29  0x20 && c<0x7f )
34e0: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
34f0: 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d  ++] = c;.      }
3500: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42  else{.        zB
3510: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20  uf[k++] = '.';. 
3520: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
3530: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27   zBuf[k++] = ']'
3540: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3550: 70 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66  printf(100,&zBuf
3560: 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d  [k], encnames[pM
3570: 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b  em->enc]);.    k
3580: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3590: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
35a0: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30     zBuf[k++] = 0
35b0: 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a  ;.  }.}.#endif..
35c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
35d0: 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  BUG./*.** Print 
35e0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72  the value of a r
35f0: 65 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63  egister for trac
3600: 69 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f  ing purposes:.*/
3610: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d  .static void mem
3620: 54 72 61 63 65 50 72 69 6e 74 28 46 49 4c 45 20  TracePrint(FILE 
3630: 2a 6f 75 74 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20  *out, Mem *p){. 
3640: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3650: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
3660: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 4e  fprintf(out, " N
3670: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3680: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3690: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
36a0: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
36b0: 53 74 72 29 20 29 7b 0a 20 20 20 20 66 70 72 69  Str) ){.    fpri
36c0: 6e 74 66 28 6f 75 74 2c 20 22 20 73 69 3a 25 6c  ntf(out, " si:%l
36d0: 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20  ld", p->u.i);.  
36e0: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
36f0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
3700: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
3710: 20 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75   " i:%lld", p->u
3720: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
3730: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
3740: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
3750: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3760: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 66  EM_Real ){.    f
3770: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 72 3a  printf(out, " r:
3780: 25 67 22 2c 20 70 2d 3e 72 29 3b 0a 23 65 6e 64  %g", p->r);.#end
3790: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
37a0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
37b0: 77 53 65 74 20 29 7b 0a 20 20 20 20 66 70 72 69  wSet ){.    fpri
37c0: 6e 74 66 28 6f 75 74 2c 20 22 20 28 72 6f 77 73  ntf(out, " (rows
37d0: 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  et)");.  }else{.
37e0: 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30      char zBuf[20
37f0: 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  0];.    sqlite3V
3800: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
3810: 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20  t(p, zBuf);.    
3820: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 22  fprintf(out, " "
3830: 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  );.    fprintf(o
3840: 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66 29 3b  ut, "%s", zBuf);
3850: 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f  .  }.}.static vo
3860: 69 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65  id registerTrace
3870: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 69 6e 74 20  (FILE *out, int 
3880: 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20  iReg, Mem *p){. 
3890: 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 52   fprintf(out, "R
38a0: 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67  EG[%d] = ", iReg
38b0: 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69  );.  memTracePri
38c0: 6e 74 28 6f 75 74 2c 20 70 29 3b 0a 20 20 66 70  nt(out, p);.  fp
38d0: 72 69 6e 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29  rintf(out, "\n")
38e0: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ;.}.#endif..#ifd
38f0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3900: 23 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54  #  define REGIST
3910: 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66  ER_TRACE(R,M) if
3920: 28 70 2d 3e 74 72 61 63 65 29 72 65 67 69 73 74  (p->trace)regist
3930: 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65  erTrace(p->trace
3940: 2c 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64  ,R,M).#else.#  d
3950: 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54  efine REGISTER_T
3960: 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66  RACE(R,M).#endif
3970: 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  ...#ifdef VDBE_P
3980: 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68  ROFILE../* .** h
3990: 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73  wtime.h contains
39a0: 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65   inline assemble
39b0: 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65  r code for imple
39c0: 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68  menting .** high
39d0: 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d  -performance tim
39e0: 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f  ing routines..*/
39f0: 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d  .#include "hwtim
3a00: 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a  e.h"..#endif../*
3a10: 0a 2a 2a 20 54 68 65 20 43 48 45 43 4b 5f 46 4f  .** The CHECK_FO
3a20: 52 5f 49 4e 54 45 52 52 55 50 54 20 6d 61 63 72  R_INTERRUPT macr
3a30: 6f 20 64 65 66 69 6e 65 64 20 68 65 72 65 20 6c  o defined here l
3a40: 6f 6f 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ooks to see if t
3a50: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e  he.** sqlite3_in
3a60: 74 65 72 72 75 70 74 28 29 20 72 6f 75 74 69 6e  terrupt() routin
3a70: 65 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  e has been calle
3a80: 64 2e 20 20 49 66 20 69 74 20 68 61 73 20 62 65  d.  If it has be
3a90: 65 6e 2c 20 74 68 65 6e 0a 2a 2a 20 70 72 6f 63  en, then.** proc
3aa0: 65 73 73 69 6e 67 20 6f 66 20 74 68 65 20 56 44  essing of the VD
3ab0: 42 45 20 70 72 6f 67 72 61 6d 20 69 73 20 69 6e  BE program is in
3ac0: 74 65 72 72 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a  terrupted..**.**
3ad0: 20 54 68 69 73 20 6d 61 63 72 6f 20 61 64 64 65   This macro adde
3ae0: 64 20 74 6f 20 65 76 65 72 79 20 69 6e 73 74 72  d to every instr
3af0: 75 63 74 69 6f 6e 20 74 68 61 74 20 64 6f 65 73  uction that does
3b00: 20 61 20 6a 75 6d 70 20 69 6e 20 6f 72 64 65 72   a jump in order
3b10: 20 74 6f 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74   to.** implement
3b20: 20 61 20 6c 6f 6f 70 2e 20 20 54 68 69 73 20 74   a loop.  This t
3b30: 65 73 74 20 75 73 65 64 20 74 6f 20 62 65 20 6f  est used to be o
3b40: 6e 20 65 76 65 72 79 20 73 69 6e 67 6c 65 20 69  n every single i
3b50: 6e 73 74 72 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62  nstruction,.** b
3b60: 75 74 20 74 68 61 74 20 6d 65 61 6e 74 20 77 65  ut that meant we
3b70: 20 6d 6f 72 65 20 74 65 73 74 69 6e 67 20 74 68   more testing th
3b80: 61 74 20 77 65 20 6e 65 65 64 65 64 2e 20 20 42  at we needed.  B
3b90: 79 20 6f 6e 6c 79 20 74 65 73 74 69 6e 67 20 74  y only testing t
3ba0: 68 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 6a 75  he.** flag on ju
3bb0: 6d 70 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c  mp instructions,
3bc0: 20 77 65 20 67 65 74 20 61 20 28 73 6d 61 6c 6c   we get a (small
3bd0: 29 20 73 70 65 65 64 20 69 6d 70 72 6f 76 65 6d  ) speed improvem
3be0: 65 6e 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ent..*/.#define 
3bf0: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
3c00: 55 50 54 20 5c 0a 20 20 20 69 66 28 20 64 62 2d  UPT \.   if( db-
3c10: 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
3c20: 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  d ) goto abort_d
3c30: 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b  ue_to_interrupt;
3c40: 0a 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  ...#ifndef NDEBU
3c50: 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  G./*.** This fun
3c60: 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61  ction is only ca
3c70: 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
3c80: 20 61 6e 20 61 73 73 65 72 74 28 29 20 65 78 70   an assert() exp
3c90: 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63  ression. It.** c
3ca0: 68 65 63 6b 73 20 74 68 61 74 20 74 68 65 20 73  hecks that the s
3cb0: 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61 63 74  qlite3.nTransact
3cc0: 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20  ion variable is 
3cd0: 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20 74 6f  correctly set to
3ce0: 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
3cf0: 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f  f non-transactio
3d00: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63 75 72  n savepoints cur
3d10: 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a  rently in the .*
3d20: 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  * linked list st
3d30: 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69 74 65  arting at sqlite
3d40: 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a  3.pSavepoint..**
3d50: 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a   .** Usage:.**.*
3d60: 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 63 68  *     assert( ch
3d70: 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
3d80: 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74  t(db) );.*/.stat
3d90: 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61 76 65  ic int checkSave
3da0: 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74  pointCount(sqlit
3db0: 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e  e3 *db){.  int n
3dc0: 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e   = 0;.  Savepoin
3dd0: 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62  t *p;.  for(p=db
3de0: 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b  ->pSavepoint; p;
3df0: 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b   p=p->pNext) n++
3e00: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 28  ;.  assert( n==(
3e10: 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b  db->nSavepoint +
3e20: 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
3e30: 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a  onSavepoint) );.
3e40: 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65    return 1;.}.#e
3e50: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 72 61 6e  ndif../*.** Tran
3e60: 73 66 65 72 20 65 72 72 6f 72 20 6d 65 73 73 61  sfer error messa
3e70: 67 65 20 74 65 78 74 20 66 72 6f 6d 20 61 6e 20  ge text from an 
3e80: 73 71 6c 69 74 65 33 5f 76 74 61 62 2e 7a 45 72  sqlite3_vtab.zEr
3e90: 72 4d 73 67 20 28 74 65 78 74 20 73 74 6f 72 65  rMsg (text store
3ea0: 64 0a 2a 2a 20 69 6e 20 6d 65 6d 6f 72 79 20 6f  d.** in memory o
3eb0: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
3ec0: 69 74 65 33 5f 6d 61 6c 6c 6f 63 29 20 69 6e 74  ite3_malloc) int
3ed0: 6f 20 61 20 56 64 62 65 2e 7a 45 72 72 4d 73 67  o a Vdbe.zErrMsg
3ee0: 20 28 74 65 78 74 20 73 74 6f 72 65 64 0a 2a 2a   (text stored.**
3ef0: 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69   in memory obtai
3f00: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
3f10: 44 62 4d 61 6c 6c 6f 63 29 2e 0a 2a 2f 0a 73 74  DbMalloc)..*/.st
3f20: 61 74 69 63 20 76 6f 69 64 20 69 6d 70 6f 72 74  atic void import
3f30: 56 74 61 62 45 72 72 4d 73 67 28 56 64 62 65 20  VtabErrMsg(Vdbe 
3f40: 2a 70 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62  *p, sqlite3_vtab
3f50: 20 2a 70 56 74 61 62 29 7b 0a 20 20 73 71 6c 69   *pVtab){.  sqli
3f60: 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b  te3 *db = p->db;
3f70: 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
3f80: 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
3f90: 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d  ;.  p->zErrMsg =
3fa0: 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70   sqlite3DbStrDup
3fb0: 28 64 62 2c 20 70 56 74 61 62 2d 3e 7a 45 72 72  (db, pVtab->zErr
3fc0: 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Msg);.  sqlite3_
3fd0: 66 72 65 65 28 70 56 74 61 62 2d 3e 7a 45 72 72  free(pVtab->zErr
3fe0: 4d 73 67 29 3b 0a 20 20 70 56 74 61 62 2d 3e 7a  Msg);.  pVtab->z
3ff0: 45 72 72 4d 73 67 20 3d 20 30 3b 0a 7d 0a 0a 0a  ErrMsg = 0;.}...
4000: 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73  /*.** Execute as
4010: 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45 20   much of a VDBE 
4020: 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61  program as we ca
4030: 6e 20 74 68 65 6e 20 72 65 74 75 72 6e 2e 0a 2a  n then return..*
4040: 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65  *.** sqlite3Vdbe
4050: 4d 61 6b 65 52 65 61 64 79 28 29 20 6d 75 73 74  MakeReady() must
4060: 20 62 65 20 63 61 6c 6c 65 64 20 62 65 66 6f 72   be called befor
4070: 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69  e this routine i
4080: 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 6c  n order to.** cl
4090: 6f 73 65 20 74 68 65 20 70 72 6f 67 72 61 6d 20  ose the program 
40a0: 77 69 74 68 20 61 20 66 69 6e 61 6c 20 4f 50 5f  with a final OP_
40b0: 48 61 6c 74 20 61 6e 64 20 74 6f 20 73 65 74 20  Halt and to set 
40c0: 75 70 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 73  up the callbacks
40d0: 0a 2a 2a 20 61 6e 64 20 74 68 65 20 65 72 72 6f  .** and the erro
40e0: 72 20 6d 65 73 73 61 67 65 20 70 6f 69 6e 74 65  r message pointe
40f0: 72 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 65 76 65  r..**.** Wheneve
4100: 72 20 61 20 72 6f 77 20 6f 72 20 72 65 73 75 6c  r a row or resul
4110: 74 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61  t data is availa
4120: 62 6c 65 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  ble, this routin
4130: 65 20 77 69 6c 6c 20 65 69 74 68 65 72 0a 2a 2a  e will either.**
4140: 20 69 6e 76 6f 6b 65 20 74 68 65 20 72 65 73 75   invoke the resu
4150: 6c 74 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20  lt callback (if 
4160: 74 68 65 72 65 20 69 73 20 6f 6e 65 29 20 6f 72  there is one) or
4170: 20 72 65 74 75 72 6e 20 77 69 74 68 0a 2a 2a 20   return with.** 
4180: 53 51 4c 49 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a  SQLITE_ROW..**.*
4190: 2a 20 49 66 20 61 6e 20 61 74 74 65 6d 70 74 20  * If an attempt 
41a0: 69 73 20 6d 61 64 65 20 74 6f 20 6f 70 65 6e 20  is made to open 
41b0: 61 20 6c 6f 63 6b 65 64 20 64 61 74 61 62 61 73  a locked databas
41c0: 65 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75  e, then this rou
41d0: 74 69 6e 65 0a 2a 2a 20 77 69 6c 6c 20 65 69 74  tine.** will eit
41e0: 68 65 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 62  her invoke the b
41f0: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 28 69 66  usy callback (if
4200: 20 74 68 65 72 65 20 69 73 20 6f 6e 65 29 20 6f   there is one) o
4210: 72 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 72 65 74  r it will.** ret
4220: 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 2e  urn SQLITE_BUSY.
4230: 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 65 72 72  .**.** If an err
4240: 6f 72 20 6f 63 63 75 72 73 2c 20 61 6e 20 65 72  or occurs, an er
4250: 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20 77  ror message is w
4260: 72 69 74 74 65 6e 20 74 6f 20 6d 65 6d 6f 72 79  ritten to memory
4270: 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 66 72 6f   obtained.** fro
4280: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
4290: 28 29 20 61 6e 64 20 70 2d 3e 7a 45 72 72 4d 73  () and p->zErrMs
42a0: 67 20 69 73 20 6d 61 64 65 20 74 6f 20 70 6f 69  g is made to poi
42b0: 6e 74 20 74 6f 20 74 68 61 74 20 6d 65 6d 6f 72  nt to that memor
42c0: 79 2e 0a 2a 2a 20 54 68 65 20 65 72 72 6f 72 20  y..** The error 
42d0: 63 6f 64 65 20 69 73 20 73 74 6f 72 65 64 20 69  code is stored i
42e0: 6e 20 70 2d 3e 72 63 20 61 6e 64 20 74 68 69 73  n p->rc and this
42f0: 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
4300: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a   SQLITE_ERROR..*
4310: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 61 6c 6c  *.** If the call
4320: 62 61 63 6b 20 65 76 65 72 20 72 65 74 75 72 6e  back ever return
4330: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
4340: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 65 78 69   the program exi
4350: 74 73 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  ts.** immediatel
4360: 79 2e 20 20 54 68 65 72 65 20 77 69 6c 6c 20 62  y.  There will b
4370: 65 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61  e no error messa
4380: 67 65 20 62 75 74 20 74 68 65 20 70 2d 3e 72 63  ge but the p->rc
4390: 20 66 69 65 6c 64 20 69 73 0a 2a 2a 20 73 65 74   field is.** set
43a0: 20 74 6f 20 53 51 4c 49 54 45 5f 41 42 4f 52 54   to SQLITE_ABORT
43b0: 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74 69 6e   and this routin
43c0: 65 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 53 51  e will return SQ
43d0: 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a  LITE_ERROR..**.*
43e0: 2a 20 41 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  * A memory alloc
43f0: 61 74 69 6f 6e 20 65 72 72 6f 72 20 63 61 75 73  ation error caus
4400: 65 73 20 70 2d 3e 72 63 20 74 6f 20 62 65 20 73  es p->rc to be s
4410: 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d  et to SQLITE_NOM
4420: 45 4d 20 61 6e 64 20 74 68 69 73 0a 2a 2a 20 72  EM and this.** r
4430: 6f 75 74 69 6e 65 20 74 6f 20 72 65 74 75 72 6e  outine to return
4440: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a   SQLITE_ERROR..*
4450: 2a 0a 2a 2a 20 4f 74 68 65 72 20 66 61 74 61 6c  *.** Other fatal
4460: 20 65 72 72 6f 72 73 20 72 65 74 75 72 6e 20 53   errors return S
4470: 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a  QLITE_ERROR..**.
4480: 2a 2a 20 41 66 74 65 72 20 74 68 69 73 20 72 6f  ** After this ro
4490: 75 74 69 6e 65 20 68 61 73 20 66 69 6e 69 73 68  utine has finish
44a0: 65 64 2c 20 73 71 6c 69 74 65 33 56 64 62 65 46  ed, sqlite3VdbeF
44b0: 69 6e 61 6c 69 7a 65 28 29 20 73 68 6f 75 6c 64  inalize() should
44c0: 20 62 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63   be.** used to c
44d0: 6c 65 61 6e 20 75 70 20 74 68 65 20 6d 65 73 73  lean up the mess
44e0: 20 74 68 61 74 20 77 61 73 20 6c 65 66 74 20 62   that was left b
44f0: 65 68 69 6e 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ehind..*/.int sq
4500: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 0a 20  lite3VdbeExec(. 
4510: 20 56 64 62 65 20 2a 70 20 20 20 20 20 20 20 20   Vdbe *p        
4520: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
4530: 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20  he VDBE */.){.  
4540: 69 6e 74 20 70 63 3d 30 3b 20 20 20 20 20 20 20  int pc=0;       
4550: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
4560: 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  e program counte
4570: 72 20 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d  r */.  Op *aOp =
4580: 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20   p->aOp;        
4590: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e    /* Copy of p->
45a0: 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70  aOp */.  Op *pOp
45b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
45c0: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f      /* Current o
45d0: 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e  peration */.  in
45e0: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
45f0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  ;        /* Valu
4600: 65 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20  e to return */. 
4610: 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70   sqlite3 *db = p
4620: 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54  ->db;       /* T
4630: 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  he database */. 
4640: 20 75 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f   u8 resetSchemaO
4650: 6e 46 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52  nFault = 0; /* R
4660: 65 73 65 74 20 73 63 68 65 6d 61 20 61 66 74 65  eset schema afte
4670: 72 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 72  r an error if tr
4680: 75 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64  ue */.  u8 encod
4690: 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20  ing = ENC(db);  
46a0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
46b0: 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 23  se encoding */.#
46c0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
46d0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
46e0: 42 41 43 4b 0a 20 20 69 6e 74 20 63 68 65 63 6b  BACK.  int check
46f0: 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20  Progress;       
4700: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 72 6f    /* True if pro
4710: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 73 20  gress callbacks 
4720: 61 72 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  are enabled */. 
4730: 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f 70   int nProgressOp
4740: 73 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4f  s = 0;      /* O
4750: 70 63 6f 64 65 73 20 65 78 65 63 75 74 65 64 20  pcodes executed 
4760: 73 69 6e 63 65 20 70 72 6f 67 72 65 73 73 20 63  since progress c
4770: 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65 6e 64  allback. */.#end
4780: 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d  if.  Mem *aMem =
4790: 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20   p->aMem;       
47a0: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d  /* Copy of p->aM
47b0: 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  em */.  Mem *pIn
47c0: 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  1 = 0;          
47d0: 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74 20     /* 1st input 
47e0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
47f0: 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20 20   *pIn2 = 0;     
4800: 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20 69          /* 2nd i
4810: 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  nput operand */.
4820: 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b    Mem *pIn3 = 0;
4830: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4840: 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  3rd input operan
4850: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74  d */.  Mem *pOut
4860: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
4870: 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65 72    /* Output oper
4880: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f  and */.  int iCo
4890: 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20  mpare = 0;      
48a0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
48b0: 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65   last OP_Compare
48c0: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20   operation */.  
48d0: 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20  int *aPermute = 
48e0: 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65  0;         /* Pe
48f0: 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c  rmutation of col
4900: 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70  umns for OP_Comp
4910: 61 72 65 20 2a 2f 0a 23 69 66 64 65 66 20 56 44  are */.#ifdef VD
4920: 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36 34  BE_PROFILE.  u64
4930: 20 73 74 61 72 74 3b 20 20 20 20 20 20 20 20 20   start;         
4940: 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55 20 63          /* CPU c
4950: 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20 73 74  lock count at st
4960: 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f  art of opcode */
4970: 0a 20 20 69 6e 74 20 6f 72 69 67 50 63 3b 20 20  .  int origPc;  
4980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
4990: 20 50 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72   Program counter
49a0: 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63   at start of opc
49b0: 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
49c0: 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54 41 43  /*** INSERT STAC
49d0: 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a  K UNION HERE ***
49e0: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
49f0: 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49  magic==VDBE_MAGI
4a00: 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c  C_RUN );  /* sql
4a10: 69 74 65 33 5f 73 74 65 70 28 29 20 76 65 72 69  ite3_step() veri
4a20: 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 73  fies this */.  s
4a30: 71 6c 69 74 65 33 56 64 62 65 4d 75 74 65 78 41  qlite3VdbeMutexA
4a40: 72 72 61 79 45 6e 74 65 72 28 70 29 3b 0a 20 20  rrayEnter(p);.  
4a50: 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  if( p->rc==SQLIT
4a60: 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f  E_NOMEM ){.    /
4a70: 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 69  * This happens i
4a80: 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73  f a malloc() ins
4a90: 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71  ide a call to sq
4aa0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
4ab0: 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71  t() or.    ** sq
4ac0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
4ad0: 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a  t16() failed.  *
4ae0: 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  /.    goto no_me
4af0: 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  m;.  }.  assert(
4b00: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   p->rc==SQLITE_O
4b10: 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c 49  K || p->rc==SQLI
4b20: 54 45 5f 42 55 53 59 20 29 3b 0a 20 20 70 2d 3e  TE_BUSY );.  p->
4b30: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
4b40: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70    assert( p->exp
4b50: 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e  lain==0 );.  p->
4b60: 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a  pResultSet = 0;.
4b70: 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65    db->busyHandle
4b80: 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 43  r.nBusy = 0;.  C
4b90: 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
4ba0: 50 54 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  PT;.  sqlite3Vdb
4bb0: 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a  eIOTraceSql(p);.
4bc0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4bd0: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
4be0: 4c 42 41 43 4b 0a 20 20 63 68 65 63 6b 50 72 6f  LBACK.  checkPro
4bf0: 67 72 65 73 73 20 3d 20 64 62 2d 3e 78 50 72 6f  gress = db->xPro
4c00: 67 72 65 73 73 21 3d 30 3b 0a 23 65 6e 64 69 66  gress!=0;.#endif
4c10: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
4c20: 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65  EBUG.  sqlite3Be
4c30: 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
4c40: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d  );.  if( p->pc==
4c50: 30 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c  0  && (p->db->fl
4c60: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
4c70: 65 4c 69 73 74 69 6e 67 29 21 3d 30 20 29 7b 0a  eListing)!=0 ){.
4c80: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70      int i;.    p
4c90: 72 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67  rintf("VDBE Prog
4ca0: 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29  ram Listing:\n")
4cb0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
4cc0: 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20  ePrintSql(p);.  
4cd0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e    for(i=0; i<p->
4ce0: 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nOp; i++){.     
4cf0: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
4d00: 74 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26  tOp(stdout, i, &
4d10: 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20  aOp[i]);.    }. 
4d20: 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42   }.  sqlite3EndB
4d30: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23  enignMalloc();.#
4d40: 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 63 3d 70  endif.  for(pc=p
4d50: 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45  ->pc; rc==SQLITE
4d60: 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20  _OK; pc++){.    
4d70: 61 73 73 65 72 74 28 20 70 63 3e 3d 30 20 26 26  assert( pc>=0 &&
4d80: 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20   pc<p->nOp );.  
4d90: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
4da0: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
4db0: 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56 44 42  _mem;.#ifdef VDB
4dc0: 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 6f 72  E_PROFILE.    or
4dd0: 69 67 50 63 20 3d 20 70 63 3b 0a 20 20 20 20 73  igPc = pc;.    s
4de0: 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33 48 77  tart = sqlite3Hw
4df0: 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20  time();.#endif. 
4e00: 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63     pOp = &aOp[pc
4e10: 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20  ];..    /* Only 
4e20: 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66  allow tracing if
4e30: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73   SQLITE_DEBUG is
4e40: 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f   defined..    */
4e50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
4e60: 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e  EBUG.    if( p->
4e70: 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69  trace ){.      i
4e80: 66 28 20 70 63 3d 3d 30 20 29 7b 0a 20 20 20 20  f( pc==0 ){.    
4e90: 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45      printf("VDBE
4ea0: 20 45 78 65 63 75 74 69 6f 6e 20 54 72 61 63 65   Execution Trace
4eb0: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 73  :\n");.        s
4ec0: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53  qlite3VdbePrintS
4ed0: 71 6c 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ql(p);.      }. 
4ee0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4ef0: 50 72 69 6e 74 4f 70 28 70 2d 3e 74 72 61 63 65  PrintOp(p->trace
4f00: 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20 20 20 20  , pc, pOp);.    
4f10: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 0a  }.#endif.      .
4f20: 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f  .    /* Check to
4f30: 20 73 65 65 20 69 66 20 77 65 20 6e 65 65 64 20   see if we need 
4f40: 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69  to simulate an i
4f50: 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69 73 20  nterrupt.  This 
4f60: 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20 20  only happens.   
4f70: 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20 61   ** if we have a
4f80: 20 73 70 65 63 69 61 6c 20 74 65 73 74 20 62 75   special test bu
4f90: 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64  ild..    */.#ifd
4fa0: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
4fb0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
4fc0: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30  nterrupt_count>0
4fd0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
4fe0: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
4ff0: 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20 73  t--;.      if( s
5000: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5010: 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  _count==0 ){.   
5020: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74       sqlite3_int
5030: 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20 20  errupt(db);.    
5040: 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
5050: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
5060: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
5070: 41 4c 4c 42 41 43 4b 0a 20 20 20 20 2f 2a 20 43  ALLBACK.    /* C
5080: 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73  all the progress
5090: 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20   callback if it 
50a0: 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e  is configured an
50b0: 64 20 74 68 65 20 72 65 71 75 69 72 65 64 20 6e  d the required n
50c0: 75 6d 62 65 72 0a 20 20 20 20 2a 2a 20 6f 66 20  umber.    ** of 
50d0: 56 44 42 45 20 6f 70 73 20 68 61 76 65 20 62 65  VDBE ops have be
50e0: 65 6e 20 65 78 65 63 75 74 65 64 20 28 65 69 74  en executed (eit
50f0: 68 65 72 20 73 69 6e 63 65 20 74 68 69 73 20 69  her since this i
5100: 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 20  nvocation of.   
5110: 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45   ** sqlite3VdbeE
5120: 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c  xec() or since l
5130: 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f  ast time the pro
5140: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77  gress callback w
5150: 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 20 20  as called)..    
5160: 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72 65  ** If the progre
5170: 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75  ss callback retu
5180: 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78  rns non-zero, ex
5190: 69 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  it the virtual m
51a0: 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20 20 20  achine with.    
51b0: 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65  ** a return code
51c0: 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20   SQLITE_ABORT.. 
51d0: 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 63 68     */.    if( ch
51e0: 65 63 6b 50 72 6f 67 72 65 73 73 20 29 7b 0a 20  eckProgress ){. 
51f0: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 50 72       if( db->nPr
5200: 6f 67 72 65 73 73 4f 70 73 3d 3d 6e 50 72 6f 67  ogressOps==nProg
5210: 72 65 73 73 4f 70 73 20 29 7b 0a 20 20 20 20 20  ressOps ){.     
5220: 20 20 20 69 6e 74 20 70 72 63 3b 0a 20 20 20 20     int prc;.    
5230: 20 20 20 20 70 72 63 20 3d 20 64 62 2d 3e 78 50      prc = db->xP
5240: 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f  rogress(db->pPro
5250: 67 72 65 73 73 41 72 67 29 3b 0a 20 20 20 20 20  gressArg);.     
5260: 20 20 20 69 66 28 20 70 72 63 21 3d 30 20 29 7b     if( prc!=0 ){
5270: 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
5280: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
5290: 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
52a0: 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
52b0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
52c0: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f 70 73      nProgressOps
52d0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
52e0: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f 70 73      nProgressOps
52f0: 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ++;.    }.#endif
5300: 0a 0a 20 20 20 20 2f 2a 20 4f 6e 20 61 6e 79 20  ..    /* On any 
5310: 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20  opcode with the 
5320: 22 6f 75 74 32 2d 70 72 65 72 65 6c 61 73 65 22  "out2-prerelase"
5330: 20 74 61 67 2c 20 66 72 65 65 20 61 6e 79 0a 20   tag, free any. 
5340: 20 20 20 2a 2a 20 65 78 74 65 72 6e 61 6c 20 61     ** external a
5350: 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f 75 74 20 6f  llocations out o
5360: 66 20 6d 65 6d 5b 70 32 5d 20 61 6e 64 20 73 65  f mem[p2] and se
5370: 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 62 65 0a  t mem[p2] to be.
5380: 20 20 20 20 2a 2a 20 61 6e 20 75 6e 64 65 66 69      ** an undefi
5390: 6e 65 64 20 69 6e 74 65 67 65 72 2e 20 20 4f 70  ned integer.  Op
53a0: 63 6f 64 65 73 20 77 69 6c 6c 20 65 69 74 68 65  codes will eithe
53b0: 72 20 66 69 6c 6c 20 69 6e 20 74 68 65 20 69 6e  r fill in the in
53c0: 74 65 67 65 72 0a 20 20 20 20 2a 2a 20 76 61 6c  teger.    ** val
53d0: 75 65 20 6f 72 20 63 6f 6e 76 65 72 74 20 6d 65  ue or convert me
53e0: 6d 5b 70 32 5d 20 74 6f 20 61 20 64 69 66 66 65  m[p2] to a diffe
53f0: 72 65 6e 74 20 74 79 70 65 2e 0a 20 20 20 20 2a  rent type..    *
5400: 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  /.    assert( pO
5410: 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d 73 71 6c 69  p->opflags==sqli
5420: 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
5430: 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 20 29  y[pOp->opcode] )
5440: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  ;.    if( pOp->o
5450: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
5460: 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 20 29  UT2_PRERELEASE )
5470: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5480: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5490: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
54a0: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p2<=p->nMem );. 
54b0: 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65       pOut = &aMe
54c0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
54d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
54e0: 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61 6c 28  ReleaseExternal(
54f0: 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 70 4f 75  pOut);.      pOu
5500: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
5510: 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  nt;.    }..    /
5520: 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69 6e  * Sanity checkin
5530: 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72 61  g on other opera
5540: 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  nds */.#ifdef SQ
5550: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
5560: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
5570: 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30   & OPFLG_IN1)!=0
5580: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
5590: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
55a0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
55b0: 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p1<=p->nMem );
55c0: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
55d0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26  TRACE(pOp->p1, &
55e0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  aMem[pOp->p1]);.
55f0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
5600: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
5610: 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20  FLG_IN2)!=0 ){. 
5620: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5630: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
5640: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5650: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
5660: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5670: 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b  (pOp->p2, &aMem[
5680: 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d  pOp->p2]);.    }
5690: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
56a0: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49  pflags & OPFLG_I
56b0: 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N3)!=0 ){.      
56c0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
56d0: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
56e0: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  t( pOp->p3<=p->n
56f0: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 52 45 47  Mem );.      REG
5700: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5710: 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p3, &aMem[pOp->
5720: 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p3]);.    }.    
5730: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
5740: 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21  s & OPFLG_OUT2)!
5750: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
5760: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
5770: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5780: 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p2<=p->nMem 
5790: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
57a0: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
57b0: 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20   OPFLG_OUT3)!=0 
57c0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
57d0: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
57e0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
57f0: 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
5800: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a      }.#endif.  .
5810: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
5820: 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a  >opcode ){../***
5830: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5840: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5850: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5860: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5870: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68  **********.** Wh
5880: 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20  at follows is a 
5890: 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73  massive switch s
58a0: 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65  tatement where e
58b0: 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65  ach case impleme
58c0: 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74  nts a.** separat
58d0: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  e instruction in
58e0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
58f0: 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c  hine.  If we fol
5900: 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a  low the usual.**
5910: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e   indentation con
5920: 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63  ventions, each c
5930: 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ase should be in
5940: 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63  dented by 6 spac
5950: 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  es.  But.** that
5960: 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73   is a lot of was
5970: 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65  ted space on the
5980: 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53   left margin.  S
5990: 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69  o the code withi
59a0: 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20  n.** the switch 
59b0: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62  statement will b
59c0: 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e  reak with conven
59d0: 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73  tion and be flus
59e0: 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a  h-left. Another.
59f0: 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28  ** big comment (
5a00: 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20  similar to this 
5a10: 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74  one) will mark t
5a20: 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20  he point in the 
5a30: 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65  code where.** we
5a40: 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b   transition back
5a50: 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e   to normal inden
5a60: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
5a70: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20  e formatting of 
5a80: 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70  each case is imp
5a90: 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b  ortant.  The mak
5aa0: 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65  efile for SQLite
5ab0: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77  .** generates tw
5ac0: 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64  o C files "opcod
5ad0: 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64  es.h" and "opcod
5ae0: 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e  es.c" by scannin
5af0: 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c  g this.** file l
5b00: 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73  ooking for lines
5b10: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
5b20: 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68   "case OP_".  Th
5b30: 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65  e opcodes.h file
5b40: 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c  s.** will be fil
5b50: 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65  led with #define
5b60: 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71  s that give uniq
5b70: 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ue integer value
5b80: 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63  s to each.** opc
5b90: 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f  ode and the opco
5ba0: 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69  des.c file is fi
5bb0: 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72  lled with an arr
5bc0: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68  ay of strings wh
5bd0: 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69  ere.** each stri
5be0: 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c  ng is the symbol
5bf0: 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ic name for the 
5c00: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70  corresponding op
5c10: 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a  code.  If the.**
5c20: 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20   case statement 
5c30: 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
5c40: 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20   comment of the 
5c50: 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73  form "/# same as
5c60: 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74   ... #/".** that
5c70: 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64   comment is used
5c80: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
5c90: 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c  e particular val
5ca0: 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ue of the opcode
5cb0: 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65  ..**.** Other ke
5cc0: 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f  ywords in the co
5cd0: 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f  mment that follo
5ce0: 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65  ws each case are
5cf0: 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73   used to.** cons
5d00: 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f  truct the OPFLG_
5d10: 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75  INITIALIZER valu
5d20: 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a  e that initializ
5d30: 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74  es opcodePropert
5d40: 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73  y[]..** Keywords
5d50: 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69   include: in1, i
5d60: 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72  n2, in3, out2_pr
5d70: 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20  erelease, out2, 
5d80: 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68  out3.  See.** th
5d90: 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20  e mkopcodeh.awk 
5da0: 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74  script for addit
5db0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
5dc0: 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e  n..**.** Documen
5dd0: 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42  tation about VDB
5de0: 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e  E opcodes is gen
5df0: 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69  erated by scanni
5e00: 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20  ng this file.** 
5e10: 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61  for lines of tha
5e20: 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64  t contain "Opcod
5e30: 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20  e:".  That line 
5e40: 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65  and all subseque
5e50: 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69  nt.** comment li
5e60: 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20  nes are used in 
5e70: 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
5e80: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d  f the opcode.htm
5e90: 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a  l documentation.
5ea0: 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  ** file..**.** S
5eb0: 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20  UMMARY:.**.**   
5ec0: 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20    Formatting is 
5ed0: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72  important to scr
5ee0: 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74  ipts that scan t
5ef0: 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20  his file..**    
5f00: 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20   Do not deviate 
5f10: 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74  from the formatt
5f20: 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e  ing style curren
5f30: 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a  tly in use..**.*
5f40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f  ************/../
5f90: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20  * Opcode:  Goto 
5fa0: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
5fb0: 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61   An unconditiona
5fc0: 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  l jump to addres
5fd0: 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78  s P2..** The nex
5fe0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78  t instruction ex
5ff0: 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a  ecuted will be .
6000: 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e  ** the one at in
6010: 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20  dex P2 from the 
6020: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20  beginning of.** 
6030: 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
6040: 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20  case OP_Goto: { 
6050: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
6060: 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46  ump */.  CHECK_F
6070: 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
6080: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
6090: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
60a0: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20   Opcode:  Gosub 
60b0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
60c0: 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
60d0: 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f  ent address onto
60e0: 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
60f0: 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  and then jump to
6100: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a   address P2..*/.
6110: 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b  case OP_Gosub: {
6120: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
6130: 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
6140: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
6150: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p1];.  assert( (
6160: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
6170: 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 70  M_Dyn)==0 );.  p
6180: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6190: 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  _Int;.  pIn1->u.
61a0: 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54  i = pc;.  REGIST
61b0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
61c0: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20  , pIn1);.  pc = 
61d0: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62  pOp->p2 - 1;.  b
61e0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
61f0: 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a  de:  Return P1 *
6200: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d   * * *.**.** Jum
6210: 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  p to the next in
6220: 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20  struction after 
6230: 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72  the address in r
6240: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63  egister P1..*/.c
6250: 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b  ase OP_Return: {
6260: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
6270: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
6280: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6290: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
62a0: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
62b0: 0a 20 20 70 63 20 3d 20 28 69 6e 74 29 70 49 6e  .  pc = (int)pIn
62c0: 31 2d 3e 75 2e 69 3b 0a 20 20 62 72 65 61 6b 3b  1->u.i;.  break;
62d0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
62e0: 59 69 65 6c 64 20 50 31 20 2a 20 2a 20 2a 20 2a  Yield P1 * * * *
62f0: 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20  .**.** Swap the 
6300: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
6310: 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 69  with the value i
6320: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
6330: 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a  /.case OP_Yield:
6340: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
6350: 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 70 63   in1 */.  int pc
6360: 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26  Dest;.  pIn1 = &
6370: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
6380: 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e   assert( (pIn1->
6390: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
63a0: 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  ==0 );.  pIn1->f
63b0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
63c0: 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29    pcDest = (int)
63d0: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e  pIn1->u.i;.  pIn
63e0: 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52  1->u.i = pc;.  R
63f0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
6400: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
6410: 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62  pc = pcDest;.  b
6420: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6430: 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20  de:  HaltIfNull 
6440: 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
6450: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76  *.** Check the v
6460: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
6470: 20 50 33 2e 20 20 49 66 20 69 73 20 69 73 20 4e   P3.  If is is N
6480: 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73  ULL then Halt us
6490: 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  ing.** parameter
64a0: 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20   P1, P2, and P4 
64b0: 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65 20  as if this were 
64c0: 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69  a Halt instructi
64d0: 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76  on.  If the.** v
64e0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
64f0: 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P3 is not NULL,
6500: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
6510: 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  ne is a no-op..*
6520: 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66  /.case OP_HaltIf
6530: 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20  Null: {      /* 
6540: 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20  in3 */.  pIn3 = 
6550: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
6560: 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
6570: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
6580: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20  0 ) break;.  /* 
6590: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
65a0: 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a  o OP_Halt */.}..
65b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74  /* Opcode:  Halt
65c0: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
65d0: 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61  .** Exit immedia
65e0: 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20  tely.  All open 
65f0: 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65  cursors, etc are
6600: 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d   closed.** autom
6610: 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20  atically..**.** 
6620: 50 31 20 69 73 20 74 68 65 20 72 65 73 75 6c 74  P1 is the result
6630: 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62   code returned b
6640: 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  y sqlite3_exec()
6650: 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28  , sqlite3_reset(
6660: 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33  ),.** or sqlite3
6670: 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f  _finalize().  Fo
6680: 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c  r a normal halt,
6690: 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20   this should be 
66a0: 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a  SQLITE_OK (0)..*
66b0: 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74  * For errors, it
66c0: 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68   can be some oth
66d0: 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31  er value.  If P1
66e0: 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c  !=0 then P2 will
66f0: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
6700: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20  ether or not to 
6710: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72  rollback the cur
6720: 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
6730: 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61  .  Do not rollba
6740: 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f  ck.** if P2==OE_
6750: 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c  Fail. Do the rol
6760: 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f  lback if P2==OE_
6770: 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32  Rollback.  If P2
6780: 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74  ==OE_Abort,.** t
6790: 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c  hen back out all
67a0: 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68 61   changes that ha
67b0: 76 65 20 6f 63 63 75 72 72 65 64 20 64 75 72 69  ve occurred duri
67c0: 6e 67 20 74 68 69 73 20 65 78 65 63 75 74 69 6f  ng this executio
67d0: 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45  n of the.** VDBE
67e0: 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c  , but do not rol
67f0: 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
6800: 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  ction. .**.** If
6810: 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20   P4 is not null 
6820: 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72  then it is an er
6830: 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69  ror message stri
6840: 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  ng..**.** There 
6850: 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48  is an implied "H
6860: 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72  alt 0 0 0" instr
6870: 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20  uction inserted 
6880: 61 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20  at the very end 
6890: 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67  of.** every prog
68a0: 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20  ram.  So a jump 
68b0: 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e  past the last in
68c0: 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65  struction of the
68d0: 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74   program.** is t
68e0: 68 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75  he same as execu
68f0: 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61  ting Halt..*/.ca
6900: 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20  se OP_Halt: {.  
6910: 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c  if( pOp->p1==SQL
6920: 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72  ITE_OK && p->pFr
6930: 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61  ame ){.    /* Ha
6940: 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  lt the sub-progr
6950: 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72  am. Return contr
6960: 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74  ol to the parent
6970: 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56   frame. */.    V
6980: 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
6990: 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
69a0: 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46    p->pFrame = pF
69b0: 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20  rame->pParent;. 
69c0: 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a     p->nFrame--;.
69d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
69e0: 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
69f0: 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70  >nChange);.    p
6a00: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46  c = sqlite3VdbeF
6a10: 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61  rameRestore(pFra
6a20: 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  me);.    if( pOp
6a30: 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20  ->p2==OE_Ignore 
6a40: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74  ){.      /* Inst
6a50: 72 75 63 74 69 6f 6e 20 70 63 20 69 73 20 74 68  ruction pc is th
6a60: 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61  e OP_Program tha
6a70: 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75  t invoked the su
6a80: 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20  b-program .     
6a90: 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65   ** currently be
6aa0: 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74  ing halted. If t
6ab0: 68 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f  he p2 instructio
6ac0: 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c  n of this OP_Hal
6ad0: 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72  t.      ** instr
6ae0: 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f  uction is set to
6af0: 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e   OE_Ignore, then
6b00: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
6b10: 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20   is throwing.   
6b20: 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20     ** an IGNORE 
6b30: 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68  exception. In th
6b40: 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20  is case jump to 
6b50: 74 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63  the address spec
6b60: 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61  ified.      ** a
6b70: 73 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20  s the p2 of the 
6b80: 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
6b90: 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63  am.  */.      pc
6ba0: 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32   = p->aOp[pc].p2
6bb0: 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f  -1;.    }.    aO
6bc0: 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20  p = p->aOp;.    
6bd0: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
6be0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
6bf0: 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70    p->rc = pOp->p
6c00: 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74  1;.  p->errorAct
6c10: 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70  ion = (u8)pOp->p
6c20: 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b  2;.  p->pc = pc;
6c30: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a  .  if( pOp->p4.z
6c40: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
6c50: 70 2d 3e 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  p->rc!=SQLITE_OK
6c60: 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   );.    sqlite3S
6c70: 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
6c80: 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
6c90: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
6ca0: 74 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65  testcase( sqlite
6cb0: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c  3GlobalConfig.xL
6cc0: 6f 67 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  og!=0 );.    sql
6cd0: 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31  ite3_log(pOp->p1
6ce0: 2c 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69  , "abort at %d i
6cf0: 6e 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 2c  n [%s]: %s", pc,
6d00: 20 70 2d 3e 7a 53 71 6c 2c 20 70 4f 70 2d 3e 70   p->zSql, pOp->p
6d10: 34 2e 7a 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  4.z);.  }else if
6d20: 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 74  ( p->rc ){.    t
6d30: 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33  estcase( sqlite3
6d40: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f  GlobalConfig.xLo
6d50: 67 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  g!=0 );.    sqli
6d60: 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c  te3_log(pOp->p1,
6d70: 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69   "constraint fai
6d80: 6c 65 64 20 61 74 20 25 64 20 69 6e 20 5b 25 73  led at %d in [%s
6d90: 5d 22 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 29  ]", pc, p->zSql)
6da0: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
6db0: 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
6dc0: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
6dd0: 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63  QLITE_BUSY || rc
6de0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
6df0: 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20  c==SQLITE_ERROR 
6e00: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
6e10: 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
6e20: 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
6e30: 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
6e40: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  e{.    assert( r
6e50: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
6e60: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 43 4f  p->rc==SQLITE_CO
6e70: 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20  NSTRAINT );.    
6e80: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
6e90: 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65  TE_OK || db->nDe
6ea0: 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 29 3b 0a  ferredCons>0 );.
6eb0: 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f      rc = p->rc ?
6ec0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20   SQLITE_ERROR : 
6ed0: 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d  SQLITE_DONE;.  }
6ee0: 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74  .  goto vdbe_ret
6ef0: 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  urn;.}../* Opcod
6f00: 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50 32  e: Integer P1 P2
6f10: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
6f20: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20   32-bit integer 
6f30: 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69 74  value P1 is writ
6f40: 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ten into registe
6f50: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
6f60: 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20  _Integer: {     
6f70: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
6f80: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74  elease */.  pOut
6f90: 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  ->u.i = pOp->p1;
6fa0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6fb0: 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20  Opcode: Int64 * 
6fc0: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
6fd0: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
6fe0: 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  to a 64-bit inte
6ff0: 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  ger value..** Wr
7000: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
7010: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
7020: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36  .*/.case OP_Int6
7030: 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  4: {           /
7040: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
7050: 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
7060: 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29  Op->p4.pI64!=0 )
7070: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
7080: 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20  *pOp->p4.pI64;. 
7090: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
70a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
70b0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a  LOATING_POINT./*
70c0: 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20   Opcode: Real * 
70d0: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
70e0: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
70f0: 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61  to a 64-bit floa
7100: 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
7110: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
7120: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
7130: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
7140: 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20  OP_Real: {      
7150: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
7160: 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d   TK_FLOAT, out2-
7170: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7180: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
7190: 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74  M_Real;.  assert
71a0: 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  ( !sqlite3IsNaN(
71b0: 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20  *pOp->p4.pReal) 
71c0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a  );.  pOut->r = *
71d0: 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20  pOp->p4.pReal;. 
71e0: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
71f0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72  ../* Opcode: Str
7200: 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a  ing8 * P2 * P4 *
7210: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
7220: 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e   to a nul termin
7230: 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e  ated UTF-8 strin
7240: 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  g. This opcode i
7250: 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a  s transformed .*
7260: 2a 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53 74 72  * into an OP_Str
7270: 69 6e 67 20 62 65 66 6f 72 65 20 69 74 20 69 73  ing before it is
7280: 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 74 68   executed for th
7290: 65 20 66 69 72 73 74 20 74 69 6d 65 2e 0a 2a 2f  e first time..*/
72a0: 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38  .case OP_String8
72b0: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73  : {         /* s
72c0: 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47  ame as TK_STRING
72d0: 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  , out2-prereleas
72e0: 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
72f0: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
7300: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f   pOp->opcode = O
7310: 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d  P_String;.  pOp-
7320: 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72  >p1 = sqlite3Str
7330: 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29  len30(pOp->p4.z)
7340: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
7350: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69  E_OMIT_UTF16.  i
7360: 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c  f( encoding!=SQL
7370: 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20  ITE_UTF8 ){.    
7380: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
7390: 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20  MemSetStr(pOut, 
73a0: 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53  pOp->p4.z, -1, S
73b0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
73c0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
73d0: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54  if( rc==SQLITE_T
73e0: 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74 6f 6f  OOBIG ) goto too
73f0: 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20 53 51  _big;.    if( SQ
7400: 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33  LITE_OK!=sqlite3
7410: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
7420: 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e  ng(pOut, encodin
7430: 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  g) ) goto no_mem
7440: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
7450: 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75  ut->zMalloc==pOu
7460: 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65  t->z );.    asse
7470: 72 74 28 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  rt( pOut->flags 
7480: 26 20 4d 45 4d 5f 44 79 6e 20 29 3b 0a 20 20 20  & MEM_Dyn );.   
7490: 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d   pOut->zMalloc =
74a0: 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   0;.    pOut->fl
74b0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69  ags |= MEM_Stati
74c0: 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  c;.    pOut->fla
74d0: 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a  gs &= ~MEM_Dyn;.
74e0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74      if( pOp->p4t
74f0: 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20  ype==P4_DYNAMIC 
7500: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
7510: 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e  DbFree(db, pOp->
7520: 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20  p4.z);.    }.   
7530: 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50   pOp->p4type = P
7540: 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70  4_DYNAMIC;.    p
7550: 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d  Op->p4.z = pOut-
7560: 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20  >z;.    pOp->p1 
7570: 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23  = pOut->n;.  }.#
7580: 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d  endif.  if( pOp-
7590: 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  >p1>db->aLimit[S
75a0: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
75b0: 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
75c0: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f  too_big;.  }.  /
75d0: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * Fall through t
75e0: 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c  o the next case,
75f0: 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a   OP_String */.}.
7600: 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74    ./* Opcode: St
7610: 72 69 6e 67 20 50 31 20 50 32 20 2a 20 50 34 20  ring P1 P2 * P4 
7620: 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69  *.**.** The stri
7630: 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c  ng value P4 of l
7640: 65 6e 67 74 68 20 50 31 20 28 62 79 74 65 73 29  ength P1 (bytes)
7650: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
7660: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
7670: 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20  se OP_String: { 
7680: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
7690: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
76a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
76b0: 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  .z!=0 );.  pOut-
76c0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72  >flags = MEM_Str
76d0: 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
76e0: 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20  Term;.  pOut->z 
76f0: 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70  = pOp->p4.z;.  p
7700: 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31  Out->n = pOp->p1
7710: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
7720: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
7730: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
7740: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
7750: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75  }../* Opcode: Nu
7760: 6c 6c 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  ll * P2 * * *.**
7770: 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c  .** Write a NULL
7780: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7790: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75  2..*/.case OP_Nu
77a0: 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
77b0: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
77c0: 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c  se */.  pOut->fl
77d0: 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
77e0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
77f0: 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20  Opcode: Blob P1 
7800: 50 32 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34  P2 * P4.**.** P4
7810: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f   points to a blo
7820: 62 20 6f 66 20 64 61 74 61 20 50 31 20 62 79 74  b of data P1 byt
7830: 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20  es long.  Store 
7840: 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20  this.** blob in 
7850: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
7860: 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20  case OP_Blob: { 
7870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7880: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
7890: 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
78a0: 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45  Op->p1 <= SQLITE
78b0: 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20  _MAX_LENGTH );. 
78c0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
78d0: 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d  etStr(pOut, pOp-
78e0: 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20  >p4.z, pOp->p1, 
78f0: 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65  0, 0);.  pOut->e
7900: 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
7910: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
7920: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
7930: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7940: 65 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20 50  e: Variable P1 P
7950: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 * P4 *.**.** T
7960: 72 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75  ransfer the valu
7970: 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61  es of bound para
7980: 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  meter P1 into re
7990: 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20  gister P2.**.** 
79a0: 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  If the parameter
79b0: 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20   is named, then 
79c0: 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73  its name appears
79d0: 20 69 6e 20 50 34 20 61 6e 64 20 50 33 3d 3d 31   in P4 and P3==1
79e0: 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  ..** The P4 valu
79f0: 65 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c  e is used by sql
7a00: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
7a10: 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63  ter_name()..*/.c
7a20: 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a  ase OP_Variable:
7a30: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
7a40: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7a50: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b   */.  Mem *pVar;
7a60: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
7a70: 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65  being transferre
7a80: 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  d */..  assert( 
7a90: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
7aa0: 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b  ->p1<=p->nVar );
7ab0: 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56  .  pVar = &p->aV
7ac0: 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b  ar[pOp->p1 - 1];
7ad0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
7ae0: 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72  beMemTooBig(pVar
7af0: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
7b00: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 73 71 6c  o_big;.  }.  sql
7b10: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
7b20: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61  owCopy(pOut, pVa
7b30: 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  r, MEM_Static);.
7b40: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
7b50: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
7b60: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
7b70: 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50  de: Move P1 P2 P
7b80: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  3 * *.**.** Move
7b90: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
7ba0: 65 67 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50  egister P1..P1+P
7bb0: 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a  3-1 over into.**
7bc0: 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50   registers P2..P
7bd0: 32 2b 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65  2+P3-1.  Registe
7be0: 72 73 20 50 31 2e 2e 50 31 2b 50 31 2d 31 20 61  rs P1..P1+P1-1 a
7bf0: 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69  re.** left holdi
7c00: 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69  ng a NULL.  It i
7c10: 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72  s an error for r
7c20: 65 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a  egister ranges.*
7c30: 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e  * P1..P1+P3-1 an
7c40: 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f  d P2..P2+P3-1 to
7c50: 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61 73   overlap..*/.cas
7c60: 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63  e OP_Move: {.  c
7c70: 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20 20 20  har *zMalloc;   
7c80: 2f 2a 20 48 6f 6c 64 69 6e 67 20 76 61 72 69 61  /* Holding varia
7c90: 62 6c 65 20 66 6f 72 20 61 6c 6c 6f 63 61 74 65  ble for allocate
7ca0: 64 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  d memory */.  in
7cb0: 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  t n;           /
7cc0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69  * Number of regi
7cd0: 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20 63 6f  sters left to co
7ce0: 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20  py */.  int p1; 
7cf0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
7d00: 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66 72 6f  ster to copy fro
7d10: 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20  m */.  int p2;  
7d20: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
7d30: 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a  ter to copy to *
7d40: 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33  /..  n = pOp->p3
7d50: 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ;.  p1 = pOp->p1
7d60: 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
7d70: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20  ;.  assert( n>0 
7d80: 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20  && p1>0 && p2>0 
7d90: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b  );.  assert( p1+
7da0: 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70  n<=p2 || p2+n<=p
7db0: 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  1 );..  pIn1 = &
7dc0: 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74  aMem[p1];.  pOut
7dd0: 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20   = &aMem[p2];.  
7de0: 77 68 69 6c 65 28 20 6e 2d 2d 20 29 7b 0a 20 20  while( n-- ){.  
7df0: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d    assert( pOut<=
7e00: 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29  &aMem[p->nMem] )
7e10: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
7e20: 6e 31 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65  n1<=&aMem[p->nMe
7e30: 6d 5d 20 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c 6f  m] );.    zMallo
7e40: 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f  c = pOut->zMallo
7e50: 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61  c;.    pOut->zMa
7e60: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 73 71  lloc = 0;.    sq
7e70: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
7e80: 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 20 20  (pOut, pIn1);.  
7e90: 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20    pIn1->zMalloc 
7ea0: 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 52  = zMalloc;.    R
7eb0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32  EGISTER_TRACE(p2
7ec0: 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70  ++, pOut);.    p
7ed0: 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b  In1++;.    pOut+
7ee0: 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  +;.  }.  break;.
7ef0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
7f00: 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  py P1 P2 * * *.*
7f10: 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79  *.** Make a copy
7f20: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
7f30: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
7f40: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
7f50: 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61  truction makes a
7f60: 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68   deep copy of th
7f70: 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c  e value.  A dupl
7f80: 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65  icate.** is made
7f90: 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f   of any string o
7fa0: 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e  r blob constant.
7fb0: 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43    See also OP_SC
7fc0: 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  opy..*/.case OP_
7fd0: 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20  Copy: {         
7fe0: 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32      /* in1, out2
7ff0: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
8000: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
8010: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
8020: 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
8030: 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20  pOut!=pIn1 );.  
8040: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
8050: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
8060: 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29  pIn1, MEM_Ephem)
8070: 3b 0a 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69  ;.  Deephemerali
8080: 7a 65 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49  ze(pOut);.  REGI
8090: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
80a0: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65  p2, pOut);.  bre
80b0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
80c0: 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20  : SCopy P1 P2 * 
80d0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61  * *.**.** Make a
80e0: 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66   shallow copy of
80f0: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74   register P1 int
8100: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
8110: 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
8120: 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68  ction makes a sh
8130: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68  allow copy of th
8140: 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65  e value.  If the
8150: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73   value.** is a s
8160: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74  tring or blob, t
8170: 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20  hen the copy is 
8180: 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74  only a pointer t
8190: 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  o the.** origina
81a0: 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74  l and hence if t
81b0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e  he original chan
81c0: 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20  ges so will the 
81d0: 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20  copy..** Worse, 
81e0: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
81f0: 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20  is deallocated, 
8200: 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73  the copy becomes
8210: 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75   invalid..** Thu
8220: 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75  s the program mu
8230: 73 74 20 67 75 61 72 61 6e 74 65 65 20 74 68 61  st guarantee tha
8240: 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77  t the original w
8250: 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a  ill not change.*
8260: 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66  * during the lif
8270: 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70  etime of the cop
8280: 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20  y.  Use OP_Copy 
8290: 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65  to make a comple
82a0: 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63  te.** copy..*/.c
82b0: 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20  ase OP_SCopy: { 
82c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
82d0: 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
82e0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
82f0: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
8300: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
8310: 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e  ssert( pOut!=pIn
8320: 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  1 );.  sqlite3Vd
8330: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
8340: 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d  (pOut, pIn1, MEM
8350: 5f 45 70 68 65 6d 29 3b 0a 20 20 52 45 47 49 53  _Ephem);.  REGIS
8360: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
8370: 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  2, pOut);.  brea
8380: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
8390: 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32   ResultRow P1 P2
83a0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
83b0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68   registers P1 th
83c0: 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f  rough P1+P2-1 co
83d0: 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72  ntain a single r
83e0: 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73  ow of.** results
83f0: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61  . This opcode ca
8400: 75 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33  uses the sqlite3
8410: 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20  _step() call to 
8420: 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74  terminate.** wit
8430: 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20  h an SQLITE_ROW 
8440: 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20  return code and 
8450: 69 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73  it sets up the s
8460: 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73  qlite3_stmt.** s
8470: 74 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76  tructure to prov
8480: 69 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68  ide access to th
8490: 65 20 74 6f 70 20 50 31 20 76 61 6c 75 65 73 20  e top P1 values 
84a0: 61 73 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  as the result.**
84b0: 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   row..*/.case OP
84c0: 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20  _ResultRow: {.  
84d0: 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74  Mem *pMem;.  int
84e0: 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   i;.  assert( p-
84f0: 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70  >nResColumn==pOp
8500: 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74  ->p2 );.  assert
8510: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
8520: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
8530: 2b 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65  +pOp->p2<=p->nMe
8540: 6d 2b 31 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20  m+1 );..  /* If 
8550: 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68  this statement h
8560: 61 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65  as violated imme
8570: 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
8580: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64  y constraints, d
8590: 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72  o.  ** not retur
85a0: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
85b0: 72 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41  rows modified. A
85c0: 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53  nd do not RELEAS
85d0: 45 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  E the statement.
85e0: 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
85f0: 2e 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65  . It needs to be
8600: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a   rolled back.  *
8610: 2f 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  /.  if( SQLITE_O
8620: 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33  K!=(rc = sqlite3
8630: 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30  VdbeCheckFk(p, 0
8640: 29 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  )) ){.    assert
8650: 28 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49  ( db->flags&SQLI
8660: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a  TE_CountRows );.
8670: 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75      assert( p->u
8680: 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29  sesStmtJournal )
8690: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
86a0: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51  ..  /* If the SQ
86b0: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66  LITE_CountRows f
86c0: 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 73 71  lag is set in sq
86d0: 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b  lite3.flags mask
86e0: 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c  , then .  ** DML
86f0: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f   statements invo
8700: 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74  ke this opcode t
8710: 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  o return the num
8720: 62 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a  ber of rows .  *
8730: 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68  * modified to th
8740: 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20  e user. This is 
8750: 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61  the only way tha
8760: 74 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a  t a VM that.  **
8770: 20 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65   opens a stateme
8780: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  nt transaction m
8790: 61 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f  ay invoke this o
87a0: 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  pcode..  **.  **
87b0: 20 49 6e 20 63 61 73 65 20 74 68 69 73 20 69 73   In case this is
87c0: 20 73 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e   such a statemen
87d0: 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61  t, close any sta
87e0: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
87f0: 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62  on.  ** opened b
8800: 79 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65  y this VM before
8810: 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72   returning contr
8820: 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ol to the user. 
8830: 54 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20  This is to.  ** 
8840: 65 6e 73 75 72 65 20 74 68 61 74 20 73 74 61 74  ensure that stat
8850: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
8860: 6e 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65  ns are always ne
8870: 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61  sted, not overla
8880: 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74  pping..  ** If t
8890: 68 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e  he open statemen
88a0: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t-transaction is
88b0: 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65   not closed here
88c0: 2c 20 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a  , then the user.
88d0: 20 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e    ** may step an
88e0: 6f 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70  other VM that op
88f0: 65 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74  ens its own stat
8900: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
8910: 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79  n. This.  ** may
8920: 20 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70   lead to overlap
8930: 70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74  ping statement t
8940: 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a  ransactions..  *
8950: 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65  *.  ** The state
8960: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
8970: 20 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d   is never a top-
8980: 6c 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f  level transactio
8990: 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74  n.  Hence.  ** t
89a0: 68 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20  he RELEASE call 
89b0: 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20  below can never 
89c0: 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  fail..  */.  ass
89d0: 65 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65  ert( p->iStateme
89e0: 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61  nt==0 || db->fla
89f0: 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  gs&SQLITE_CountR
8a00: 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ows );.  rc = sq
8a10: 6c 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74  lite3VdbeCloseSt
8a20: 61 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50  atement(p, SAVEP
8a30: 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20  OINT_RELEASE);. 
8a40: 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53   if( NEVER(rc!=S
8a50: 51 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20  QLITE_OK) ){.   
8a60: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
8a70: 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  * Invalidate all
8a80: 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f   ephemeral curso
8a90: 72 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a  r row caches */.
8aa0: 20 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20    p->cacheCtr = 
8ab0: 28 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32  (p->cacheCtr + 2
8ac0: 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  )|1;..  /* Make 
8ad0: 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73  sure the results
8ae0: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
8af0: 72 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72  row are \000 ter
8b00: 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64  minated.  ** and
8b10: 20 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65   have an assigne
8b20: 64 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73  d type.  The res
8b30: 75 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65  ults are de-ephe
8b40: 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a  meralized as.  *
8b50: 2a 20 61 73 20 73 69 64 65 20 65 66 66 65 63 74  * as side effect
8b60: 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20  ..  */.  pMem = 
8b70: 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20  p->pResultSet = 
8b80: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
8b90: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70    for(i=0; i<pOp
8ba0: 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  ->p2; i++){.    
8bb0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
8bc0: 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d  lTerminate(&pMem
8bd0: 5b 69 5d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  [i]);.    sqlite
8be0: 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
8bf0: 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20  e(&pMem[i]);.   
8c00: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
8c10: 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d  pOp->p1+i, &pMem
8c20: 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  [i]);.  }.  if( 
8c30: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
8c40: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
8c50: 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c  .  /* Return SQL
8c60: 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70  ITE_ROW.  */.  p
8c70: 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a 20  ->pc = pc + 1;. 
8c80: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57   rc = SQLITE_ROW
8c90: 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  ;.  goto vdbe_re
8ca0: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
8cb0: 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32  de: Concat P1 P2
8cc0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64   P3 * *.**.** Ad
8cd0: 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72 65  d the text in re
8ce0: 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74  gister P1 onto t
8cf0: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65  he end of the te
8d00: 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  xt in.** registe
8d10: 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74  r P2 and store t
8d20: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
8d30: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
8d40: 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f 72  either the P1 or
8d50: 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c   P2 text are NUL
8d60: 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c  L then store NUL
8d70: 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20  L in P3..**.**  
8d80: 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a   P3 = P2 || P1.*
8d90: 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
8da0: 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33  al for P1 and P3
8db0: 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20   to be the same 
8dc0: 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69  register. Someti
8dd0: 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73  mes,.** if P3 is
8de0: 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74   the same regist
8df0: 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d  er as P2, the im
8e00: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20  plementation is 
8e10: 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  able.** to avoid
8e20: 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a   a memcpy()..*/.
8e30: 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20  case OP_Concat: 
8e40: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
8e50: 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54  ame as TK_CONCAT
8e60: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
8e70: 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b   */.  i64 nByte;
8e80: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
8e90: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
8ea0: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
8eb0: 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2];.  pOut = &aM
8ec0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
8ed0: 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75  ssert( pIn1!=pOu
8ee0: 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  t );.  if( (pIn1
8ef0: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
8f00: 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c  flags) & MEM_Nul
8f10: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
8f20: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
8f30: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
8f40: 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e  .  }.  if( Expan
8f50: 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45  dBlob(pIn1) || E
8f60: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20  xpandBlob(pIn2) 
8f70: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
8f80: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c   Stringify(pIn1,
8f90: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74   encoding);.  St
8fa0: 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e  ringify(pIn2, en
8fb0: 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65  coding);.  nByte
8fc0: 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e   = pIn1->n + pIn
8fd0: 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74  2->n;.  if( nByt
8fe0: 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  e>db->aLimit[SQL
8ff0: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
9000: 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
9010: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 4d 65 6d  o_big;.  }.  Mem
9020: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
9030: 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66  , MEM_Str);.  if
9040: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
9050: 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29  Grow(pOut, (int)
9060: 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70  nByte+2, pOut==p
9070: 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  In2) ){.    goto
9080: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 69   no_mem;.  }.  i
9090: 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b  f( pOut!=pIn2 ){
90a0: 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74  .    memcpy(pOut
90b0: 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49  ->z, pIn2->z, pI
90c0: 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65  n2->n);.  }.  me
90d0: 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49  mcpy(&pOut->z[pI
90e0: 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c  n2->n], pIn1->z,
90f0: 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75   pIn1->n);.  pOu
9100: 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20 30 3b  t->z[nByte] = 0;
9110: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
9120: 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d  +1] = 0;.  pOut-
9130: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65  >flags |= MEM_Te
9140: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  rm;.  pOut->n = 
9150: 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f  (int)nByte;.  pO
9160: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
9170: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
9180: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
9190: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
91a0: 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50  Opcode: Add P1 P
91b0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  2 P3 * *.**.** A
91c0: 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  dd the value in 
91d0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74  register P1 to t
91e0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
91f0: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
9200: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
9210: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
9220: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
9230: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
9240: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
9250: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  */./* Opcode: Mu
9260: 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20  ltiply P1 P2 P3 
9270: 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c  * *.**.**.** Mul
9280: 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20  tiply the value 
9290: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
92a0: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
92b0: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
92c0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
92d0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
92e0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
92f0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
9300: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9310: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
9320: 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20   Subtract P1 P2 
9330: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 75 62  P3 * *.**.** Sub
9340: 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20  tract the value 
9350: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66  in register P1 f
9360: 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rom the value in
9370: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
9380: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
9390: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
93a0: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
93b0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
93c0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
93d0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
93e0: 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20  e: Divide P1 P2 
93f0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 69 76  P3 * *.**.** Div
9400: 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ide the value in
9410: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
9420: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9430: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
9440: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
9450: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
9460: 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74  (P3=P2/P1). If t
9470: 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20  he value in .** 
9480: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
9490: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65  ero, then the re
94a0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66  sult is NULL. If
94b0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
94c0: 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72   .** NULL, the r
94d0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
94e0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d  /./* Opcode: Rem
94f0: 61 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20  ainder P1 P2 P3 
9500: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74  * *.**.** Comput
9510: 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  e the remainder 
9520: 61 66 74 65 72 20 69 6e 74 65 67 65 72 20 64 69  after integer di
9530: 76 69 73 69 6f 6e 20 6f 66 20 74 68 65 20 76 61  vision of the va
9540: 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  lue in.** regist
9550: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
9560: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9570: 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  2 and store the 
9580: 72 65 73 75 6c 74 20 69 6e 20 50 33 2e 20 0a 2a  result in P3. .*
9590: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
95a0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  n register P2 is
95b0: 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74   zero the result
95c0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20   is NULL..** If 
95d0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
95e0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
95f0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  lt is NULL..*/.c
9600: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
9610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9620: 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53   same as TK_PLUS
9630: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
9640: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74   */.case OP_Subt
9650: 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20 20  ract:           
9660: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
9670: 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32  _MINUS, in1, in2
9680: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
9690: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20  P_Multiply:     
96a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
96b0: 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31   as TK_STAR, in1
96c0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
96d0: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20  ase OP_Divide:  
96e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
96f0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53   same as TK_SLAS
9700: 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  H, in1, in2, out
9710: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d  3 */.case OP_Rem
9720: 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20  ainder: {       
9730: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
9740: 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_REM, in1, in2,
9750: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 66   out3 */.  int f
9760: 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f  lags;      /* Co
9770: 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61  mbined MEM_* fla
9780: 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70  gs from both inp
9790: 75 74 73 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b  uts */.  i64 iA;
97a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
97b0: 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66  ger value of lef
97c0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
97d0: 36 34 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f  64 iB;         /
97e0: 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
97f0: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
9800: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b   */.  double rA;
9810: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
9820: 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72  lue of left oper
9830: 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  and */.  double 
9840: 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c  rB;      /* Real
9850: 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20   value of right 
9860: 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49  operand */..  pI
9870: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
9880: 70 31 5d 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65  p1];.  applyNume
9890: 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31  ricAffinity(pIn1
98a0: 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
98b0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70  m[pOp->p2];.  ap
98c0: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
98d0: 74 79 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74  ty(pIn2);.  pOut
98e0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
98f0: 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e  ];.  flags = pIn
9900: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
9910: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
9920: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
9930: 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  !=0 ) goto arith
9940: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
9950: 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 70 49 6e  null;.  if( (pIn
9960: 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 32 2d  1->flags & pIn2-
9970: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
9980: 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20  )==MEM_Int ){.  
9990: 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69    iA = pIn1->u.i
99a0: 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d  ;.    iB = pIn2-
99b0: 3e 75 2e 69 3b 0a 20 20 20 20 73 77 69 74 63 68  >u.i;.    switch
99c0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
99d0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
99e0: 64 64 3a 20 20 20 20 20 20 20 20 20 69 42 20 2b  dd:         iB +
99f0: 3d 20 69 41 3b 20 20 20 20 20 20 20 62 72 65 61  = iA;       brea
9a00: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
9a10: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 69 42  _Subtract:    iB
9a20: 20 2d 3d 20 69 41 3b 20 20 20 20 20 20 20 62 72   -= iA;       br
9a30: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
9a40: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20  OP_Multiply:    
9a50: 69 42 20 2a 3d 20 69 41 3b 20 20 20 20 20 20 20  iB *= iA;       
9a60: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
9a70: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20  e OP_Divide: {. 
9a80: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30         if( iA==0
9a90: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
9aa0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
9ab0: 6c 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 44 69  l;.        /* Di
9ac0: 76 69 64 69 6e 67 20 74 68 65 20 6c 61 72 67 65  viding the large
9ad0: 73 74 20 70 6f 73 73 69 62 6c 65 20 6e 65 67 61  st possible nega
9ae0: 74 69 76 65 20 36 34 2d 62 69 74 20 69 6e 74 65  tive 64-bit inte
9af0: 67 65 72 20 28 31 3c 3c 36 33 29 20 62 79 20 0a  ger (1<<63) by .
9b00: 20 20 20 20 20 20 20 20 2a 2a 20 2d 31 20 72 65          ** -1 re
9b10: 74 75 72 6e 73 20 61 6e 20 69 6e 74 65 67 65 72  turns an integer
9b20: 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 73 74   too large to st
9b30: 6f 72 65 20 69 6e 20 61 20 36 34 2d 62 69 74 20  ore in a 64-bit 
9b40: 64 61 74 61 2d 74 79 70 65 2e 20 4f 6e 0a 20 20  data-type. On.  
9b50: 20 20 20 20 20 20 2a 2a 20 73 6f 6d 65 20 61 72        ** some ar
9b60: 63 68 69 74 65 63 74 75 72 65 73 2c 20 74 68 65  chitectures, the
9b70: 20 76 61 6c 75 65 20 6f 76 65 72 66 6c 6f 77 73   value overflows
9b80: 20 74 6f 20 28 31 3c 3c 36 33 29 2e 20 4f 6e 20   to (1<<63). On 
9b90: 6f 74 68 65 72 73 2c 0a 20 20 20 20 20 20 20 20  others,.        
9ba0: 2a 2a 20 61 20 53 49 47 46 50 45 20 69 73 20 69  ** a SIGFPE is i
9bb0: 73 73 75 65 64 2e 20 54 68 65 20 66 6f 6c 6c 6f  ssued. The follo
9bc0: 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 6e  wing statement n
9bd0: 6f 72 6d 61 6c 69 7a 65 73 20 74 68 69 73 0a 20  ormalizes this. 
9be0: 20 20 20 20 20 20 20 2a 2a 20 62 65 68 61 76 69         ** behavi
9bf0: 6f 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 61  or so that all a
9c00: 72 63 68 69 74 65 63 74 75 72 65 73 20 62 65 68  rchitectures beh
9c10: 61 76 65 20 61 73 20 69 66 20 69 6e 74 65 67 65  ave as if intege
9c20: 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 76  r .        ** ov
9c30: 65 72 66 6c 6f 77 20 6f 63 63 75 72 72 65 64 2e  erflow occurred.
9c40: 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
9c50: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 26      if( iA==-1 &
9c60: 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49  & iB==SMALLEST_I
9c70: 4e 54 36 34 20 29 20 69 41 20 3d 20 31 3b 0a 20  NT64 ) iA = 1;. 
9c80: 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b         iB /= iA;
9c90: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
9ca0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
9cb0: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
9cc0: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
9cd0: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
9ce0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
9cf0: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
9d00: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
9d10: 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20    iB %= iA;.    
9d20: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9d30: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75   }.    }.    pOu
9d40: 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20  t->u.i = iB;.   
9d50: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
9d60: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
9d70: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 41 20    }else{.    rA 
9d80: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
9d90: 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  lValue(pIn1);.  
9da0: 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33 56 64    rB = sqlite3Vd
9db0: 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 32  beRealValue(pIn2
9dc0: 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70  );.    switch( p
9dd0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
9de0: 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a      case OP_Add:
9df0: 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d 20 72           rB += r
9e00: 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  A;       break;.
9e10: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75        case OP_Su
9e20: 62 74 72 61 63 74 3a 20 20 20 20 72 42 20 2d 3d  btract:    rB -=
9e30: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
9e40: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
9e50: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72 42 20  Multiply:    rB 
9e60: 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  *= rA;       bre
9e70: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
9e80: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
9e90: 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30      /* (double)0
9ea0: 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c 49   In case of SQLI
9eb0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
9ec0: 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20  _POINT... */.   
9ed0: 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28 64 6f       if( rA==(do
9ee0: 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20 61 72  uble)0 ) goto ar
9ef0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
9f00: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
9f10: 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20   rB /= rA;.     
9f20: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
9f30: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
9f40: 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20 3d 20   {.        iA = 
9f50: 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20 20 20  (i64)rA;.       
9f60: 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b 0a 20   iB = (i64)rB;. 
9f70: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30         if( iA==0
9f80: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
9f90: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
9fa0: 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  l;.        if( i
9fb0: 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a  A==-1 ) iA = 1;.
9fc0: 20 20 20 20 20 20 20 20 72 42 20 3d 20 28 64 6f          rB = (do
9fd0: 75 62 6c 65 29 28 69 42 20 25 20 69 41 29 3b 0a  uble)(iB % iA);.
9fe0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
9ff0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66       }.    }.#if
a000: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
a010: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
a020: 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72     pOut->u.i = r
a030: 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  B;.    MemSetTyp
a040: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
a050: 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20  Int);.#else.    
a060: 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  if( sqlite3IsNaN
a070: 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20 67 6f  (rB) ){.      go
a080: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
a090: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
a0a0: 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 72 20    }.    pOut->r 
a0b0: 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74  = rB;.    MemSet
a0c0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
a0d0: 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66  EM_Real);.    if
a0e0: 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  ( (flags & MEM_R
a0f0: 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
a100: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65   sqlite3VdbeInte
a110: 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74  gerAffinity(pOut
a120: 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
a130: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72    }.  break;..ar
a140: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
a150: 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74  is_null:.  sqlit
a160: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
a170: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
a180: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
a190: 6f 6c 6c 53 65 71 20 2a 20 2a 20 50 34 0a 2a 2a  ollSeq * * P4.**
a1a0: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
a1b0: 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71  ter to a CollSeq
a1c0: 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65 20   struct. If the 
a1d0: 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75  next call to a u
a1e0: 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20  ser function.** 
a1f0: 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c  or aggregate cal
a200: 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  ls sqlite3GetFun
a210: 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73  cCollSeq(), this
a220: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
a230: 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72  nce will.** be r
a240: 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73  eturned. This is
a250: 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69   used by the bui
a260: 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78  lt-in min(), max
a270: 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a  () and nullif().
a280: 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  ** functions..**
a290: 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
a2a0: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69 6d  e used by the im
a2b0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
a2c0: 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e  the aforemention
a2d0: 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20  ed functions.** 
a2e0: 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20  to retrieve the 
a2f0: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
a300: 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20 6f  ce set by this o
a310: 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61  pcode is not ava
a320: 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63  ilable.** public
a330: 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65 72  ly, only to user
a340: 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e   functions defin
a350: 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f  ed in func.c..*/
a360: 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71  .case OP_CollSeq
a370: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
a380: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
a390: 4c 4c 53 45 51 20 29 3b 0a 20 20 62 72 65 61 6b  LLSEQ );.  break
a3a0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
a3b0: 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20 50  Function P1 P2 P
a3c0: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e  3 P4 P5.**.** In
a3d0: 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63  voke a user func
a3e0: 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f  tion (P4 is a po
a3f0: 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63 74  inter to a Funct
a400: 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20 74 68  ion structure th
a410: 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74 68  at.** defines th
a420: 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74 68  e function) with
a430: 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61   P5 arguments ta
a440: 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
a450: 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63  r P2 and.** succ
a460: 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73  essors.  The res
a470: 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
a480: 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ion is stored in
a490: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
a4a0: 20 52 65 67 69 73 74 65 72 20 50 33 20 6d 75 73   Register P3 mus
a4b0: 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20  t not be one of 
a4c0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70  the function inp
a4d0: 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  uts..**.** P1 is
a4e0: 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73   a 32-bit bitmas
a4f0: 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65  k indicating whe
a500: 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68  ther or not each
a510: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
a520: 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61   .** function wa
a530: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20  s determined to 
a540: 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63  be constant at c
a550: 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20  ompile time. If 
a560: 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67  the first.** arg
a570: 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61  ument was consta
a580: 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66  nt then bit 0 of
a590: 20 50 31 20 69 73 20 73 65 74 2e 20 54 68 69 73   P1 is set. This
a5a0: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
a5b0: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
a5c0: 20 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f 63   meta data assoc
a5d0: 69 61 74 65 64 20 77 69 74 68 20 61 20 75 73 65  iated with a use
a5e0: 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  r function argum
a5f0: 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ent using the.**
a600: 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78   sqlite3_set_aux
a610: 64 61 74 61 28 29 20 41 50 49 20 6d 61 79 20 62  data() API may b
a620: 65 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65  e safely retaine
a630: 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74  d until the next
a640: 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  .** invocation o
a650: 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  f this opcode..*
a660: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 41  *.** See also: A
a670: 67 67 53 74 65 70 20 61 6e 64 20 41 67 67 46 69  ggStep and AggFi
a680: 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  nal.*/.case OP_F
a690: 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74  unction: {.  int
a6a0: 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 3b   i;.  Mem *pArg;
a6b0: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
a6c0: 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65  xt ctx;.  sqlite
a6d0: 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b  3_value **apVal;
a6e0: 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d  .  int n;..  n =
a6f0: 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 70 56 61   pOp->p5;.  apVa
a700: 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20  l = p->apArg;.  
a710: 61 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c  assert( apVal ||
a720: 20 6e 3d 3d 30 20 29 3b 0a 0a 20 20 61 73 73 65   n==0 );..  asse
a730: 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70  rt( n==0 || (pOp
a740: 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
a750: 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 29 20  2+n<=p->nMem+1) 
a760: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
a770: 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20  ->p3<pOp->p2 || 
a780: 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32  pOp->p3>=pOp->p2
a790: 2b 6e 20 29 3b 0a 20 20 70 41 72 67 20 3d 20 26  +n );.  pArg = &
a7a0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
a7b0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69   for(i=0; i<n; i
a7c0: 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20  ++, pArg++){.   
a7d0: 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67   apVal[i] = pArg
a7e0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
a7f0: 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 41  eMemStoreType(pA
a800: 72 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  rg);.    REGISTE
a810: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
a820: 69 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20  i, pArg);.  }.. 
a830: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
a840: 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46  type==P4_FUNCDEF
a850: 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d   || pOp->p4type=
a860: 3d 50 34 5f 56 44 42 45 46 55 4e 43 20 29 3b 0a  =P4_VDBEFUNC );.
a870: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
a880: 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 7b  e==P4_FUNCDEF ){
a890: 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d  .    ctx.pFunc =
a8a0: 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
a8b0: 20 20 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e      ctx.pVdbeFun
a8c0: 63 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  c = 0;.  }else{.
a8d0: 20 20 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e      ctx.pVdbeFun
a8e0: 63 20 3d 20 28 56 64 62 65 46 75 6e 63 2a 29 70  c = (VdbeFunc*)p
a8f0: 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63  Op->p4.pVdbeFunc
a900: 3b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20  ;.    ctx.pFunc 
a910: 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2d  = ctx.pVdbeFunc-
a920: 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20 20 61  >pFunc;.  }..  a
a930: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
a940: 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
a950: 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d  nMem );.  pOut =
a960: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
a970: 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d  .  ctx.s.flags =
a980: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78   MEM_Null;.  ctx
a990: 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74  .s.db = db;.  ct
a9a0: 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20  x.s.xDel = 0;.  
a9b0: 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20  ctx.s.zMalloc = 
a9c0: 30 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74  0;..  /* The out
a9d0: 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72  put cell may alr
a9e0: 65 61 64 79 20 68 61 76 65 20 61 20 62 75 66 66  eady have a buff
a9f0: 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f  er allocated. Mo
aa00: 76 65 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e  ve.  ** the poin
aa10: 74 65 72 20 74 6f 20 63 74 78 2e 73 20 73 6f 20  ter to ctx.s so 
aa20: 69 6e 20 63 61 73 65 20 74 68 65 20 75 73 65 72  in case the user
aa30: 2d 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73  -function can us
aa40: 65 0a 20 20 2a 2a 20 74 68 65 20 61 6c 72 65 61  e.  ** the alrea
aa50: 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  dy allocated buf
aa60: 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61  fer instead of a
aa70: 6c 6c 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20  llocating a new 
aa80: 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  one..  */.  sqli
aa90: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26  te3VdbeMemMove(&
aaa0: 63 74 78 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20  ctx.s, pOut);.  
aab0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26  MemSetTypeFlag(&
aac0: 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  ctx.s, MEM_Null)
aad0: 3b 0a 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72  ;..  ctx.isError
aae0: 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e   = 0;.  if( ctx.
aaf0: 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53  pFunc->flags & S
ab00: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
ab10: 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72  OLL ){.    asser
ab20: 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20  t( pOp>aOp );.  
ab30: 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
ab40: 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ].p4type==P4_COL
ab50: 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65  LSEQ );.    asse
ab60: 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
ab70: 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29  de==OP_CollSeq )
ab80: 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20  ;.    ctx.pColl 
ab90: 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f  = pOp[-1].p4.pCo
aba0: 6c 6c 3b 0a 20 20 7d 0a 20 20 28 2a 63 74 78 2e  ll;.  }.  (*ctx.
abb0: 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63  pFunc->xFunc)(&c
abc0: 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 0a 20  tx, n, apVal);. 
abd0: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
abe0: 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 2f 2a 20  ailed ){.    /* 
abf0: 45 76 65 6e 20 74 68 6f 75 67 68 20 61 20 6d 61  Even though a ma
ac00: 6c 6c 6f 63 28 29 20 68 61 73 20 66 61 69 6c 65  lloc() has faile
ac10: 64 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  d, the implement
ac20: 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 20  ation of the.   
ac30: 20 2a 2a 20 75 73 65 72 20 66 75 6e 63 74 69 6f   ** user functio
ac40: 6e 20 6d 61 79 20 68 61 76 65 20 63 61 6c 6c 65  n may have calle
ac50: 64 20 61 6e 20 73 71 6c 69 74 65 33 5f 72 65 73  d an sqlite3_res
ac60: 75 6c 74 5f 58 58 58 28 29 20 66 75 6e 63 74 69  ult_XXX() functi
ac70: 6f 6e 0a 20 20 20 20 2a 2a 20 74 6f 20 72 65 74  on.    ** to ret
ac80: 75 72 6e 20 61 20 76 61 6c 75 65 2e 20 54 68 65  urn a value. The
ac90: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20   following call 
aca0: 72 65 6c 65 61 73 65 73 20 61 6e 79 20 72 65 73  releases any res
acb0: 6f 75 72 63 65 73 0a 20 20 20 20 2a 2a 20 61 73  ources.    ** as
acc0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 73 75  sociated with su
acd0: 63 68 20 61 20 76 61 6c 75 65 2e 0a 20 20 20 20  ch a value..    
ace0: 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
acf0: 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74  beMemRelease(&ct
ad00: 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e  x.s);.    goto n
ad10: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  o_mem;.  }..  /*
ad20: 20 49 66 20 61 6e 79 20 61 75 78 69 6c 69 61 72   If any auxiliar
ad30: 79 20 64 61 74 61 20 66 75 6e 63 74 69 6f 6e 73  y data functions
ad40: 20 68 61 76 65 20 62 65 65 6e 20 63 61 6c 6c 65   have been calle
ad50: 64 20 62 79 20 74 68 69 73 20 75 73 65 72 20 66  d by this user f
ad60: 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20 69 6d  unction,.  ** im
ad70: 6d 65 64 69 61 74 65 6c 79 20 63 61 6c 6c 20 74  mediately call t
ad80: 68 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 6f  he destructor fo
ad90: 72 20 61 6e 79 20 6e 6f 6e 2d 73 74 61 74 69 63  r any non-static
ada0: 20 76 61 6c 75 65 73 2e 0a 20 20 2a 2f 0a 20 20   values..  */.  
adb0: 69 66 28 20 63 74 78 2e 70 56 64 62 65 46 75 6e  if( ctx.pVdbeFun
adc0: 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  c ){.    sqlite3
add0: 56 64 62 65 44 65 6c 65 74 65 41 75 78 44 61 74  VdbeDeleteAuxDat
ade0: 61 28 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2c  a(ctx.pVdbeFunc,
adf0: 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 70   pOp->p1);.    p
ae00: 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63  Op->p4.pVdbeFunc
ae10: 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63   = ctx.pVdbeFunc
ae20: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70  ;.    pOp->p4typ
ae30: 65 20 3d 20 50 34 5f 56 44 42 45 46 55 4e 43 3b  e = P4_VDBEFUNC;
ae40: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68  .  }..  /* If th
ae50: 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  e function retur
ae60: 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68  ned an error, th
ae70: 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  row an exception
ae80: 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73   */.  if( ctx.is
ae90: 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  Error ){.    sql
aea0: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
aeb0: 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
aec0: 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
aed0: 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29  ue_text(&ctx.s))
aee0: 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69  ;.    rc = ctx.i
aef0: 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  sError;.  }..  /
af00: 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
af10: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
af20: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
af30: 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  P3 */.  sqlite3V
af40: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
af50: 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69  g(&ctx.s, encodi
af60: 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ng);.  sqlite3Vd
af70: 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20  beMemMove(pOut, 
af80: 26 63 74 78 2e 73 29 3b 0a 20 20 69 66 28 20 73  &ctx.s);.  if( s
af90: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
afa0: 42 69 67 28 70 4f 75 74 29 20 29 7b 0a 20 20 20  Big(pOut) ){.   
afb0: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
afc0: 20 7d 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52   }.  REGISTER_TR
afd0: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ACE(pOp->p3, pOu
afe0: 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
aff0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
b000: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
b010: 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50  Opcode: BitAnd P
b020: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
b030: 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77  * Take the bit-w
b040: 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76  ise AND of the v
b050: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
b060: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
b070: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
b080: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b090: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b0a0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b0b0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b0c0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b0d0: 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33  : BitOr P1 P2 P3
b0e0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20   * *.**.** Take 
b0f0: 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20  the bit-wise OR 
b100: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
b110: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
b120: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
b130: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b140: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
b150: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
b160: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
b170: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b180: 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c  * Opcode: ShiftL
b190: 65 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  eft P1 P2 P3 * *
b1a0: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
b1b0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
b1c0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
b1d0: 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65   the left by the
b1e0: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
b1f0: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
b200: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
b210: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
b220: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b230: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b240: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
b250: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
b260: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b270: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
b280: 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50  iftRight P1 P2 P
b290: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66  3 * *.**.** Shif
b2a0: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
b2b0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b2c0: 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  P2 to the right 
b2d0: 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72  by the.** number
b2e0: 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69   of bits specifi
b2f0: 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65  ed by the intege
b300: 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  r in register P1
b310: 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72  ..** Store the r
b320: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b330: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
b340: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
b350: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b360: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
b370: 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20  _BitAnd:        
b380: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b390: 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69   as TK_BITAND, i
b3a0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b3b0: 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20  .case OP_BitOr: 
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3d0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
b3e0: 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  ITOR, in1, in2, 
b3f0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
b400: 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20  ShiftLeft:      
b410: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
b420: 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e  as TK_LSHIFT, in
b430: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b440: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67  case OP_ShiftRig
b450: 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ht: {           
b460: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53  /* same as TK_RS
b470: 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  HIFT, in1, in2, 
b480: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 61 3b  out3 */.  i64 a;
b490: 0a 20 20 69 36 34 20 62 3b 0a 0a 20 20 70 49 6e  .  i64 b;..  pIn
b4a0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
b4b0: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
b4c0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
b4d0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
b4e0: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
b4f0: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
b500: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
b510: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
b520: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
b530: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
b540: 3b 0a 20 20 7d 0a 20 20 61 20 3d 20 73 71 6c 69  ;.  }.  a = sqli
b550: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
b560: 70 49 6e 32 29 3b 0a 20 20 62 20 3d 20 73 71 6c  pIn2);.  b = sql
b570: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
b580: 28 70 49 6e 31 29 3b 0a 20 20 73 77 69 74 63 68  (pIn1);.  switch
b590: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
b5a0: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 42 69 74  .    case OP_Bit
b5b0: 41 6e 64 3a 20 20 20 20 20 20 61 20 26 3d 20 62  And:      a &= b
b5c0: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
b5d0: 20 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20   case OP_BitOr: 
b5e0: 20 20 20 20 20 20 61 20 7c 3d 20 62 3b 20 20 20        a |= b;   
b5f0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
b600: 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20  e OP_ShiftLeft: 
b610: 20 20 61 20 3c 3c 3d 20 62 3b 20 20 20 20 62 72    a <<= b;    br
b620: 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74  eak;.    default
b630: 3a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  :  assert( pOp->
b640: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 68 69 66 74  opcode==OP_Shift
b650: 52 69 67 68 74 20 29 3b 0a 20 20 20 20 20 20 20  Right );.       
b660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b670: 20 20 61 20 3e 3e 3d 20 62 3b 20 20 20 20 62 72    a >>= b;    br
b680: 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  eak;.  }.  pOut-
b690: 3e 75 2e 69 20 3d 20 61 3b 0a 20 20 4d 65 6d 53  >u.i = a;.  MemS
b6a0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
b6b0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65   MEM_Int);.  bre
b6c0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
b6d0: 3a 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20  : AddImm  P1 P2 
b6e0: 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 41 64 64  * * *.** .** Add
b6f0: 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32   the constant P2
b700: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
b710: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
b720: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
b730: 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72  lways an integer
b740: 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65  ..**.** To force
b750: 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f   any register to
b760: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   be an integer, 
b770: 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63  just add 0..*/.c
b780: 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b  ase OP_AddImm: {
b790: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
b7a0: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
b7b0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
b7c0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
b7d0: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
b7e0: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20  .  pIn1->u.i += 
b7f0: 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b  pOp->p2;.  break
b800: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
b810: 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20  MustBeInt P1 P2 
b820: 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72  * * *.** .** For
b830: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
b840: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
b850: 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  e an integer.  I
b860: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
b870: 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69  n P1 is not an i
b880: 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f  nteger and canno
b890: 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
b8a0: 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  nto an integer.*
b8b0: 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c  * without data l
b8c0: 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  oss, then jump i
b8d0: 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
b8e0: 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a  , or if P2==0.**
b8f0: 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
b900: 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74  _MISMATCH except
b910: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
b920: 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20  MustBeInt: {    
b930: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
b940: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
b950: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
b960: 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  .  applyAffinity
b970: 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn1, SQLITE_AF
b980: 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64  F_NUMERIC, encod
b990: 69 6e 67 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  ing);.  if( (pIn
b9a0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
b9b0: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66  nt)==0 ){.    if
b9c0: 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a  ( pOp->p2==0 ){.
b9d0: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
b9e0: 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20  E_MISMATCH;.    
b9f0: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
ba00: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
ba10: 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 63 20 3d  else{.      pc =
ba20: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
ba30: 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
ba40: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
ba50: 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pIn1, MEM_Int);.
ba60: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
ba70: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
ba80: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
ba90: 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  NT./* Opcode: Re
baa0: 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20  alAffinity P1 * 
bab0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72  * * *.**.** If r
bac0: 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73  egister P1 holds
bad0: 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76   an integer conv
bae0: 65 72 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c  ert it to a real
baf0: 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   value..**.** Th
bb00: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
bb10: 64 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e  d when extractin
bb20: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  g information fr
bb30: 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74  om a column that
bb40: 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66  .** has REAL aff
bb50: 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c  inity.  Such col
bb60: 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73  umn values may s
bb70: 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61  till be stored a
bb80: 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66  s.** integers, f
bb90: 6f 72 20 73 70 61 63 65 20 65 66 66 69 63 69 65  or space efficie
bba0: 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72 20 65  ncy, but after e
bbb0: 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e  xtraction we wan
bbc0: 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76  t them.** to hav
bbd0: 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61  e only a real va
bbe0: 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lue..*/.case OP_
bbf0: 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20  RealAffinity: { 
bc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc10: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
bc20: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
bc30: 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
bc40: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
bc50: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
bc60: 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e  beMemRealify(pIn
bc70: 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
bc80: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  .}.#endif..#ifnd
bc90: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
bca0: 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  AST./* Opcode: T
bcb0: 6f 54 65 78 74 20 50 31 20 2a 20 2a 20 2a 20 2a  oText P1 * * * *
bcc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
bcd0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
bce0: 65 72 20 50 31 20 74 6f 20 62 65 20 74 65 78 74  er P1 to be text
bcf0: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
bd00: 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f  e is numeric, co
bd10: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74  nvert it to a st
bd20: 72 69 6e 67 20 75 73 69 6e 67 20 74 68 65 0a 2a  ring using the.*
bd30: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
bd40: 70 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f 62 20  printf().  Blob 
bd50: 76 61 6c 75 65 73 20 61 72 65 20 75 6e 63 68 61  values are uncha
bd60: 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72 65 20  nged and.** are 
bd70: 61 66 74 65 72 77 61 72 64 73 20 73 69 6d 70 6c  afterwards simpl
bd80: 79 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  y interpreted as
bd90: 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e   text..**.** A N
bda0: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
bdb0: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
bdc0: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
bdd0: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
bde0: 61 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a 20 7b  ase OP_ToText: {
bdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be00: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
be10: 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20 2a 2f 0a  TO_TEXT, in1 */.
be20: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
be30: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
be40: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
be50: 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20  _Null ) break;. 
be60: 20 61 73 73 65 72 74 28 20 4d 45 4d 5f 53 74 72   assert( MEM_Str
be70: 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29 20  ==(MEM_Blob>>3) 
be80: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
be90: 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73   |= (pIn1->flags
bea0: 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20  &MEM_Blob)>>3;. 
beb0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
bec0: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
bed0: 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  TEXT, encoding);
bee0: 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
bef0: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61 73 73 65  ob(pIn1);.  asse
bf00: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  rt( pIn1->flags 
bf10: 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d  & MEM_Str || db-
bf20: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
bf30: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  .  pIn1->flags &
bf40: 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  = ~(MEM_Int|MEM_
bf50: 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  Real|MEM_Blob|ME
bf60: 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44 41 54  M_Zero);.  UPDAT
bf70: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
bf80: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
bf90: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 42  ../* Opcode: ToB
bfa0: 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  lob P1 * * * *.*
bfb0: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
bfc0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
bfd0: 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c 4f 42   P1 to be a BLOB
bfe0: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
bff0: 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f  e is numeric, co
c000: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74  nvert it to a st
c010: 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20 53  ring first..** S
c020: 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d 70 6c  trings are simpl
c030: 79 20 72 65 69 6e 74 65 72 70 72 65 74 65 64 20  y reinterpreted 
c040: 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20 6e 6f  as blobs with no
c050: 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74 68   change.** to th
c060: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74  e underlying dat
c070: 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  a..**.** A NULL 
c080: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
c090: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
c0a0: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
c0b0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
c0c0: 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20 20  OP_ToBlob: {    
c0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c0e0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 42   same as TK_TO_B
c0f0: 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  LOB, in1 */.  pI
c100: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
c110: 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
c120: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
c130: 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69 66 28  l ) break;.  if(
c140: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c150: 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a  MEM_Blob)==0 ){.
c160: 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
c170: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
c180: 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e  FF_TEXT, encodin
c190: 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  g);.    assert( 
c1a0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c1b0: 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c  M_Str || db->mal
c1c0: 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
c1d0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c1e0: 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b  pIn1, MEM_Blob);
c1f0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49  .  }else{.    pI
c200: 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  n1->flags &= ~(M
c210: 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d  EM_TypeMask&~MEM
c220: 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50  _Blob);.  }.  UP
c230: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
c240: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
c250: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c260: 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a  ToNumeric P1 * *
c270: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65   * *.**.** Force
c280: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
c290: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
c2a0: 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65 72 20  numeric (either 
c2b0: 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72  an.** integer or
c2c0: 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e   a floating-poin
c2d0: 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66  t number.).** If
c2e0: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65   the value is te
c2f0: 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20  xt or blob, try 
c300: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
c310: 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a   an using the.**
c320: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61   equivalent of a
c330: 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20  toi() or atof() 
c340: 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e  and store 0 if n
c350: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
c360: 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c  n .** is possibl
c370: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  e..**.** A NULL 
c380: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
c390: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
c3a0: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
c3b0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
c3c0: 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20  OP_ToNumeric: { 
c3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3e0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
c3f0: 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a  O_NUMERIC, in1 *
c400: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
c410: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
c420: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c430: 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 49 6e  (MEM_Null|MEM_In
c440: 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20  t|MEM_Real))==0 
c450: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
c460: 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70 49  beMemNumerify(pI
c470: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
c480: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
c490: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a  LITE_OMIT_CAST *
c4a0: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  /../* Opcode: To
c4b0: 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  Int P1 * * * *.*
c4c0: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
c4d0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
c4e0: 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74   P1 to be an int
c4f0: 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65  eger.  If.** The
c500: 20 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e   value is curren
c510: 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d 62 65  tly a real numbe
c520: 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72 61 63  r, drop its frac
c530: 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20  tional part..** 
c540: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
c550: 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72  text or blob, tr
c560: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20  y to convert it 
c570: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73  to an integer us
c580: 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76  ing the.** equiv
c590: 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20  alent of atoi() 
c5a0: 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e  and store 0 if n
c5b0: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
c5c0: 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  n is possible..*
c5d0: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
c5e0: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
c5f0: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
c600: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
c610: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
c620: 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  oInt: {         
c630: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
c640: 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69   as TK_TO_INT, i
c650: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
c660: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
c670: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
c680: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
c690: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
c6a0: 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
c6b0: 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
c6c0: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66  eak;.}..#if !def
c6d0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
c6e0: 5f 43 41 53 54 29 20 26 26 20 21 64 65 66 69 6e  _CAST) && !defin
c6f0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
c700: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 0a 2f  LOATING_POINT)./
c710: 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52 65 61 6c  * Opcode: ToReal
c720: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
c730: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
c740: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
c750: 20 74 6f 20 62 65 20 61 20 66 6c 6f 61 74 69 6e   to be a floatin
c760: 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a  g point number..
c770: 2a 2a 20 49 66 20 54 68 65 20 76 61 6c 75 65 20  ** If The value 
c780: 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6e 20  is currently an 
c790: 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76 65 72 74  integer, convert
c7a0: 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76   it..** If the v
c7b0: 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20  alue is text or 
c7c0: 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e  blob, try to con
c7d0: 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e  vert it to an in
c7e0: 74 65 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a  teger using the.
c7f0: 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66  ** equivalent of
c800: 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72   atoi() and stor
c810: 65 20 30 2e 30 20 69 66 20 6e 6f 20 73 75 63 68  e 0.0 if no such
c820: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70   conversion is p
c830: 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  ossible..**.** A
c840: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
c850: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
c860: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
c870: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
c880: 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65 61 6c 3a  .case OP_ToReal:
c890: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
c8a0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
c8b0: 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e 31 20 2a  K_TO_REAL, in1 *
c8c0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
c8d0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
c8e0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c8f0: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
c900: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
c910: 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b  emRealify(pIn1);
c920: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
c930: 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
c940: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ed(SQLITE_OMIT_C
c950: 41 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  AST) && !defined
c960: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f  (SQLITE_OMIT_FLO
c970: 41 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f 0a  ATING_POINT) */.
c980: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50  ./* Opcode: Lt P
c990: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
c9a0: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20  .** Compare the 
c9b0: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
c9c0: 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49  er P1 and P3.  I
c9d0: 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31  f reg(P3)<reg(P1
c9e0: 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74  ) then.** jump t
c9f0: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a  o address P2.  .
ca00: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
ca10: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
ca20: 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20  it of P5 is set 
ca30: 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50  and either reg(P
ca40: 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29  1) or.** reg(P3)
ca50: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
ca60: 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66  ke the jump.  If
ca70: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
ca80: 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69  IFNULL .** bit i
ca90: 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c  s clear then fal
caa0: 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65 69 74  l through if eit
cab0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
cac0: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53  ULL..**.** The S
cad0: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70  QLITE_AFF_MASK p
cae0: 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73  ortion of P5 mus
caf0: 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79  t be an affinity
cb00: 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20   character -.** 
cb10: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
cb20: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
cb30: 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  GER, and so fort
cb40: 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73  h. An attempt is
cb50: 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65   made .** to coe
cb60: 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20  rce both inputs 
cb70: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69  according to thi
cb80: 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72  s affinity befor
cb90: 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69  e the.** compari
cba0: 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20  son is made. If 
cbb0: 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  the SQLITE_AFF_M
cbc0: 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65  ASK is 0x00, the
cbd0: 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66  n numeric.** aff
cbe0: 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e  inity is used. N
cbf0: 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66  ote that the aff
cc00: 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e  inity conversion
cc10: 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20  s are stored.** 
cc20: 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e  back into the in
cc30: 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31  put registers P1
cc40: 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69   and P3.  So thi
cc50: 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75  s opcode can cau
cc60: 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74  se.** persistent
cc70: 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69   changes to regi
cc80: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
cc90: 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20  .**.** Once any 
cca0: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65  conversions have
ccb0: 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e   taken place, an
ccc0: 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20  d neither value 
ccd0: 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65  is NULL, .** the
cce0: 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70   values are comp
ccf0: 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61  ared. If both va
cd00: 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74  lues are blobs t
cd10: 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a  hen memcmp() is.
cd20: 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  ** used to deter
cd30: 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73  mine the results
cd40: 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
cd50: 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  on.  If both val
cd60: 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c  ues.** are text,
cd70: 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70   then the approp
cd80: 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20  riate collating 
cd90: 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69  function specifi
cda0: 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20  ed in.** P4 is  
cdb0: 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63  used to do the c
cdc0: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50  omparison.  If P
cdd0: 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69  4 is not specifi
cde0: 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d  ed then.** memcm
cdf0: 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63  p() is used to c
ce00: 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69  ompare text stri
ce10: 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  ng.  If both val
ce20: 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72  ues are.** numer
ce30: 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72  ic, then a numer
ce40: 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ic comparison is
ce50: 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77   used. If the tw
ce60: 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  o values.** are 
ce70: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70  of different typ
ce80: 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73  es, then numbers
ce90: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
cea0: 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72  less than.** str
ceb0: 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73  ings and strings
cec0: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
ced0: 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
cee0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  .**.** If the SQ
cef0: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69 74  LITE_STOREP2 bit
cf00: 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74   of P5 is set, t
cf10: 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e  hen do not jump.
cf20: 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74    Instead,.** st
cf30: 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65  ore a boolean re
cf40: 73 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c 20  sult (either 0, 
cf50: 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69  or 1, or NULL) i
cf60: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
cf70: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20  /./* Opcode: Ne 
cf80: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
cf90: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
cfa0: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
cfb0: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
cfc0: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
cfd0: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
cfe0: 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69  operands in regi
cff0: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20  sters P1 and P3 
d000: 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20  are not equal.  
d010: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
d020: 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f  e for.** additio
d030: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
d040: 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  .**.** If SQLITE
d050: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69  _NULLEQ is set i
d060: 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65  n P5 then the re
d070: 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73  sult of comparis
d080: 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74  on is always eit
d090: 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66  her.** true or f
d0a0: 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65  alse and is neve
d0b0: 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68  r NULL.  If both
d0c0: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
d0d0: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
d0e0: 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69  lt.** of compari
d0f0: 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49  son is false.  I
d100: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
d110: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   is NULL then th
d120: 65 20 72 65 73 75 6c 74 20 69 73 20 74 72 75 65  e result is true
d130: 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20  ..** If neither 
d140: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
d150: 74 68 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  the the result i
d160: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  s the same as it
d170: 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20   would be if.** 
d180: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
d190: 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74  Q flag were omit
d1a0: 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a  ted from P5..*/.
d1b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31  /* Opcode: Eq P1
d1c0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
d1d0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
d1e0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
d1f0: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
d200: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
d210: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
d220: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
d230: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
d240: 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20  e equal..** See 
d250: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
d260: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
d270: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
d280: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
d290: 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68   is set in P5 th
d2a0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
d2b0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
d2c0: 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20  lways either.** 
d2d0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e  true or false an
d2e0: 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e  d is never NULL.
d2f0: 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e    If both operan
d300: 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  ds are NULL then
d310: 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f   the result.** o
d320: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
d330: 74 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72  true.  If either
d340: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
d350: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
d360: 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66   is false..** If
d370: 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   neither operand
d380: 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 74 68 65   is NULL the the
d390: 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73   result is the s
d3a0: 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20  ame as it would 
d3b0: 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c  be if.** the SQL
d3c0: 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20  ITE_NULLEQ flag 
d3d0: 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f  were omitted fro
d3e0: 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  m P5..*/./* Opco
d3f0: 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20  de: Le P1 P2 P3 
d400: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
d410: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
d420: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
d430: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
d440: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
d450: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
d460: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
d470: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
d480: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
d490: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
d4a0: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
d4b0: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
d4c0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
d4d0: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
d4e0: 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50  e: Gt P1 P2 P3 P
d4f0: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
d500: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
d510: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
d520: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
d530: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
d540: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
d550: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
d560: 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
d570: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
d580: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
d590: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
d5a0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
d5b0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
d5c0: 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50   Opcode: Ge P1 P
d5d0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
d5e0: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
d5f0: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
d600: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
d610: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
d620: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
d630: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
d640: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
d650: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
d660: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
d670: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
d680: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
d690: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
d6a0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
d6b0: 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20  case OP_Eq:     
d6c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
d6d0: 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70  e as TK_EQ, jump
d6e0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
d6f0: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20  se OP_Ne:       
d700: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
d710: 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20  as TK_NE, jump, 
d720: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
d730: 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20   OP_Lt:         
d740: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
d750: 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_LT, jump, in
d760: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
d770: 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Le:           
d780: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
d790: 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_LE, jump, in1,
d7a0: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
d7b0: 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Gt:             
d7c0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
d7d0: 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  GT, jump, in1, i
d7e0: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65  n3 */.case OP_Ge
d7f0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
d800: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45  /* same as TK_GE
d810: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
d820: 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20   */.  int res;  
d830: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
d840: 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  ult of the compa
d850: 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67  rison of pIn1 ag
d860: 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20  ainst pIn3 */.  
d870: 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
d880: 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
d890: 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61  to use for compa
d8a0: 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66  rison */.  u16 f
d8b0: 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20 20 2f  lags1;         /
d8c0: 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61  * Copy of initia
d8d0: 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d  l value of pIn1-
d8e0: 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36 20  >flags */.  u16 
d8f0: 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20 20  flags3;         
d900: 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69  /* Copy of initi
d910: 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 33  al value of pIn3
d920: 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49  ->flags */..  pI
d930: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
d940: 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  p1];.  pIn3 = &a
d950: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
d960: 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66  flags1 = pIn1->f
d970: 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d  lags;.  flags3 =
d980: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn3->flags;.  
d990: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
d9a0: 20 7c 20 70 49 6e 33 2d 3e 66 6c 61 67 73 29 26   | pIn3->flags)&
d9b0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
d9c0: 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  /* One or both o
d9d0: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
d9e0: 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   */.    if( pOp-
d9f0: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c  >p5 & SQLITE_NUL
da00: 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  LEQ ){.      /* 
da10: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
da20: 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77   is set (which w
da30: 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20  ill only happen 
da40: 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20  if the operator 
da50: 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45  is.      ** OP_E
da60: 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e  q or OP_Ne) then
da70: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f   take the jump o
da80: 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20  r not depending 
da90: 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20  on whether.     
daa0: 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20   ** or not both 
dab0: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c  operands are nul
dac0: 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
dad0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
dae0: 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20  pcode==OP_Eq || 
daf0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
db00: 4e 65 20 29 3b 0a 20 20 20 20 20 20 72 65 73 20  Ne );.      res 
db10: 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  = (pIn1->flags &
db20: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
db30: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 3b 0a 20 20 20  EM_Null)==0;.   
db40: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
db50: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
db60: 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c  s clear and at l
db70: 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64  east one operand
db80: 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20   is NULL,.      
db90: 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  ** then the resu
dba0: 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c  lt is always NUL
dbb0: 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20  L..      ** The 
dbc0: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
dbd0: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
dbe0: 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65  IFNULL bit is se
dbf0: 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  t..      */.    
dc00: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
dc10: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
dc20: 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d  {.        pOut =
dc30: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
dc40: 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54  .        MemSetT
dc50: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
dc60: 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20  M_Null);.       
dc70: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
dc80: 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
dc90: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
dca0: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
dcb0: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20  _JUMPIFNULL ){. 
dcc0: 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
dcd0: 3e 70 32 2d 31 3b 0a 20 20 20 20 20 20 7d 0a 20  >p2-1;.      }. 
dce0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
dcf0: 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  }.  }else{.    /
dd00: 2a 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  * Neither operan
dd10: 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61  d is NULL.  Do a
dd20: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a   comparison. */.
dd30: 20 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70      affinity = p
dd40: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
dd50: 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66  AFF_MASK;.    if
dd60: 28 20 61 66 66 69 6e 69 74 79 20 29 7b 0a 20 20  ( affinity ){.  
dd70: 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
dd80: 79 28 70 49 6e 31 2c 20 61 66 66 69 6e 69 74 79  y(pIn1, affinity
dd90: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
dda0: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
ddb0: 28 70 49 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c  (pIn3, affinity,
ddc0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
ddd0: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
dde0: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
ddf0: 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  _mem;.    }..   
de00: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
de10: 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
de20: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c   || pOp->p4.pCol
de30: 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 45 78 70 61  l==0 );.    Expa
de40: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20  ndBlob(pIn1);.  
de50: 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e    ExpandBlob(pIn
de60: 33 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71  3);.    res = sq
de70: 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28  lite3MemCompare(
de80: 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d  pIn3, pIn1, pOp-
de90: 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a  >p4.pColl);.  }.
dea0: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
deb0: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73  pcode ){.    cas
dec0: 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 20  e OP_Eq:    res 
ded0: 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72  = res==0;     br
dee0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
def0: 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Ne:    res = re
df00: 73 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s!=0;     break;
df10: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a  .    case OP_Lt:
df20: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30 3b      res = res<0;
df30: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
df40: 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20   case OP_Le:    
df50: 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20  res = res<=0;   
df60: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
df70: 65 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 20  e OP_Gt:    res 
df80: 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72  = res>0;      br
df90: 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74  eak;.    default
dfa0: 3a 20 20 20 20 20 20 20 72 65 73 20 3d 20 72 65  :       res = re
dfb0: 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s>=0;     break;
dfc0: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d  .  }..  if( pOp-
dfd0: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
dfe0: 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74  REP2 ){.    pOut
dff0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
e000: 5d 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  ];.    MemSetTyp
e010: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
e020: 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Int);.    pOut->
e030: 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20 20 52  u.i = res;.    R
e040: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
e050: 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
e060: 7d 65 6c 73 65 20 69 66 28 20 72 65 73 20 29 7b  }else if( res ){
e070: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
e080: 32 2d 31 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55  2-1;.  }..  /* U
e090: 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ndo any changes 
e0a0: 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66 66  made by applyAff
e0b0: 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20 69  inity() to the i
e0c0: 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e 20  nput registers. 
e0d0: 2a 2f 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  */.  pIn1->flags
e0e0: 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26   = (pIn1->flags&
e0f0: 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
e100: 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 54 79 70   (flags1&MEM_Typ
e110: 65 4d 61 73 6b 29 3b 0a 20 20 70 49 6e 33 2d 3e  eMask);.  pIn3->
e120: 66 6c 61 67 73 20 3d 20 28 70 49 6e 33 2d 3e 66  flags = (pIn3->f
e130: 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61  lags&~MEM_TypeMa
e140: 73 6b 29 20 7c 20 28 66 6c 61 67 73 33 26 4d 45  sk) | (flags3&ME
e150: 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 62  M_TypeMask);.  b
e160: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
e170: 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20  de: Permutation 
e180: 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
e190: 20 53 65 74 20 74 68 65 20 70 65 72 6d 75 74 61   Set the permuta
e1a0: 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
e1b0: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72   OP_Compare oper
e1c0: 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61  ator to be the a
e1d0: 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67  rray.** of integ
e1e0: 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a  ers in P4..**.**
e1f0: 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
e200: 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75   is only valid u
e210: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50  ntil the next OP
e220: 5f 50 65 72 6d 75 74 61 74 69 6f 6e 2c 20 4f 50  _Permutation, OP
e230: 5f 43 6f 6d 70 61 72 65 2c 0a 2a 2a 20 4f 50 5f  _Compare,.** OP_
e240: 48 61 6c 74 2c 20 6f 72 20 4f 50 5f 52 65 73 75  Halt, or OP_Resu
e250: 6c 74 52 6f 77 2e 20 20 54 79 70 69 63 61 6c 6c  ltRow.  Typicall
e260: 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61  y the OP_Permuta
e270: 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6f 63 63 75  tion should occu
e280: 72 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79  r.** immediately
e290: 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50   prior to the OP
e2a0: 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73  _Compare..*/.cas
e2b0: 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
e2c0: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
e2d0: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
e2e0: 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65  TARRAY );.  asse
e2f0: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29  rt( pOp->p4.ai )
e300: 3b 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70  ;.  aPermute = p
e310: 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65  Op->p4.ai;.  bre
e320: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
e330: 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20  : Compare P1 P2 
e340: 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f  P3 P4 *.**.** Co
e350: 6d 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72  mpare two vector
e360: 73 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 69  s of registers i
e370: 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50  n reg(P1)..reg(P
e380: 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68  1+P3-1) (call th
e390: 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22  is.** vector "A"
e3a0: 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29  ) and in reg(P2)
e3b0: 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28  ..reg(P2+P3-1) (
e3c0: 22 42 22 29 2e 20 20 53 61 76 65 20 74 68 65 20  "B").  Save the 
e3d0: 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65  result of.** the
e3e0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20   comparison for 
e3f0: 75 73 65 20 62 79 20 74 68 65 20 6e 65 78 74 20  use by the next 
e400: 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74  OP_Jump instruct
e410: 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
e420: 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
e430: 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 63  e that defines c
e440: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
e450: 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f  es and sort.** o
e460: 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f  rders for the co
e470: 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70  mparison.  The p
e480: 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69  ermutation appli
e490: 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a  es to registers.
e4a0: 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65  ** only.  The Ke
e4b0: 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61  yInfo elements a
e4c0: 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74 69  re used sequenti
e4d0: 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ally..**.** The 
e4e0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20  comparison is a 
e4f0: 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c  sort comparison,
e500: 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72   so NULLs compar
e510: 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c  e equal,.** NULL
e520: 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
e530: 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73  numbers, numbers
e540: 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73   are less than s
e550: 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73  trings,.** and s
e560: 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20  trings are less 
e570: 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63  than blobs..*/.c
e580: 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20  ase OP_Compare: 
e590: 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74  {.  int n;.  int
e5a0: 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20   i;.  int p1;.  
e5b0: 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20  int p2;.  const 
e5c0: 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
e5d0: 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  o;.  int idx;.  
e5e0: 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20  CollSeq *pColl; 
e5f0: 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
e600: 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20  sequence to use 
e610: 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a  on this term */.
e620: 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20    int bRev;     
e630: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72       /* True for
e640: 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74   DESCENDING sort
e650: 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 6e 20 3d   order */..  n =
e660: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79   pOp->p3;.  pKey
e670: 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
e680: 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
e690: 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65  t( n>0 );.  asse
e6a0: 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20  rt( pKeyInfo!=0 
e6b0: 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  );.  p1 = pOp->p
e6c0: 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  1;.  p2 = pOp->p
e6d0: 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  2;.#if SQLITE_DE
e6e0: 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75  BUG.  if( aPermu
e6f0: 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c  te ){.    int k,
e700: 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72   mx = 0;.    for
e710: 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20  (k=0; k<n; k++) 
e720: 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e  if( aPermute[k]>
e730: 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75  mx ) mx = aPermu
e740: 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72  te[k];.    asser
e750: 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78  t( p1>0 && p1+mx
e760: 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20  <=p->nMem+1 );. 
e770: 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
e780: 26 26 20 70 32 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65  && p2+mx<=p->nMe
e790: 6d 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  m+1 );.  }else{.
e7a0: 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
e7b0: 20 26 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d 65   && p1+n<=p->nMe
e7c0: 6d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  m+1 );.    asser
e7d0: 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c  t( p2>0 && p2+n<
e7e0: 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20  =p->nMem+1 );.  
e7f0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
e800: 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f  TE_DEBUG */.  fo
e810: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29  r(i=0; i<n; i++)
e820: 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65 72  {.    idx = aPer
e830: 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b  mute ? aPermute[
e840: 69 5d 20 3a 20 69 3b 0a 20 20 20 20 52 45 47 49  i] : i;.    REGI
e850: 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64  STER_TRACE(p1+id
e860: 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  x, &aMem[p1+idx]
e870: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
e880: 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61  TRACE(p2+idx, &a
e890: 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p2+idx]);.  
e8a0: 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79    assert( i<pKey
e8b0: 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  Info->nField );.
e8c0: 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79      pColl = pKey
e8d0: 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a  Info->aColl[i];.
e8e0: 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49      bRev = pKeyI
e8f0: 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b  nfo->aSortOrder[
e900: 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65  i];.    iCompare
e910: 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
e920: 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64  pare(&aMem[p1+id
e930: 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  x], &aMem[p2+idx
e940: 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
e950: 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
e960: 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
e970: 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
e980: 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
e990: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  k;.    }.  }.  a
e9a0: 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62  Permute = 0;.  b
e9b0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
e9c0: 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
e9d0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
e9e0: 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
e9f0: 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
ea00: 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
ea10: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
ea20: 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
ea30: 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
ea40: 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
ea50: 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
ea60: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
ea70: 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
ea80: 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
ea90: 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
eaa0: 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
eab0: 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
eac0: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
ead0: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
eae0: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
eaf0: 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65  >p1 - 1;.  }else
eb00: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30   if( iCompare==0
eb10: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
eb20: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
eb30: 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  e{.    pc = pOp-
eb40: 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p3 - 1;.  }.  b
eb50: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
eb60: 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33  de: And P1 P2 P3
eb70: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20   * *.**.** Take 
eb80: 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20  the logical AND 
eb90: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
eba0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
ebb0: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74  d P2 and.** writ
ebc0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74  e the result int
ebd0: 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
ebe0: 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
ebf0: 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66 61  1 or P2 is 0 (fa
ec00: 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  lse) then the re
ec10: 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69  sult is 0 even i
ec20: 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69  f.** the other i
ec30: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
ec40: 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f   NULL and true o
ec50: 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65  r two NULLs give
ec60: 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  .** a NULL outpu
ec70: 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
ec80: 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a   Or P1 P2 P3 * *
ec90: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
eca0: 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68  logical OR of th
ecb0: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
ecc0: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
ecd0: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
ece0: 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74  answer in regist
ecf0: 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
ed00: 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
ed10: 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65  is nonzero (true
ed20: 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
ed30: 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a  t is 1 (true).**
ed40: 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68   even if the oth
ed50: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
ed60: 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61  .  A NULL and fa
ed70: 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  lse or two NULLs
ed80: 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20  .** give a NULL 
ed90: 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
eda0: 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20  OP_And:         
edb0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
edc0: 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  TK_AND, in1, in2
edd0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
ede0: 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Or: {         
edf0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ee00: 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  K_OR, in1, in2, 
ee10: 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31  out3 */.  int v1
ee20: 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65  ;    /* Left ope
ee30: 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c  rand:  0==FALSE,
ee40: 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
ee50: 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
ee60: 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20    int v2;    /* 
ee70: 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30  Right operand: 0
ee80: 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
ee90: 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
eea0: 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  NULL */..  pIn1 
eeb0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
eec0: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
eed0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
eee0: 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20  {.    v1 = 2;.  
eef0: 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20  }else{.    v1 = 
ef00: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
ef10: 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20  lue(pIn1)!=0;.  
ef20: 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  }.  pIn2 = &aMem
ef30: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
ef40: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn2->flags & M
ef50: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76  EM_Null ){.    v
ef60: 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  2 = 2;.  }else{.
ef70: 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33      v2 = sqlite3
ef80: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
ef90: 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28  2)!=0;.  }.  if(
efa0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
efb0: 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74  _And ){.    stat
efc0: 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  ic const unsigne
efd0: 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63  d char and_logic
efe0: 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20  [] = { 0, 0, 0, 
eff0: 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32  0, 1, 2, 0, 2, 2
f000: 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64   };.    v1 = and
f010: 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b  _logic[v1*3+v2];
f020: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74  .  }else{.    st
f030: 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67  atic const unsig
f040: 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69  ned char or_logi
f050: 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c  c[] = { 0, 1, 2,
f060: 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20   1, 1, 1, 2, 1, 
f070: 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72  2 };.    v1 = or
f080: 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b  _logic[v1*3+v2];
f090: 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61  .  }.  pOut = &a
f0a0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
f0b0: 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20  if( v1==2 ){.   
f0c0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
f0d0: 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
f0e0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f  .  }else{.    pO
f0f0: 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20  ut->u.i = v1;.  
f100: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
f110: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
f120: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
f130: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20  ./* Opcode: Not 
f140: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
f150: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
f160: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
f170: 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61  r P1 as a boolea
f180: 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20  n value.  Store 
f190: 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63  the.** boolean c
f1a0: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67  omplement in reg
f1b0: 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74 68  ister P2.  If th
f1c0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
f1d0: 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55  ter P1 is .** NU
f1e0: 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20  LL, then a NULL 
f1f0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e  is stored in P2.
f200: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a  .*/.case OP_Not:
f210: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
f220: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f230: 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a  NOT, in1, out2 *
f240: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
f250: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
f260: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
f270: 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2];.  if( pIn1->
f280: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
f290: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
f2a0: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
f2b0: 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ut);.  }else{.  
f2c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
f2d0: 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 21  SetInt64(pOut, !
f2e0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
f2f0: 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a  lue(pIn1));.  }.
f300: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
f310: 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31  pcode: BitNot P1
f320: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
f330: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 63 6f  Interpret the co
f340: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
f350: 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67  r P1 as an integ
f360: 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a  er.  Store the.*
f370: 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e  * ones-complemen
f380: 74 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75  t of the P1 valu
f390: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
f3a0: 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73  P2.  If P1 holds
f3b0: 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20  .** a NULL then 
f3c0: 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20  store a NULL in 
f3d0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  P2..*/.case OP_B
f3e0: 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  itNot: {        
f3f0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
f400: 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20  TK_BITNOT, in1, 
f410: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
f420: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
f430: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
f440: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20  pOp->p2];.  if( 
f450: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
f460: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
f470: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
f480: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  ull(pOut);.  }el
f490: 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
f4a0: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
f4b0: 4f 75 74 2c 20 7e 73 71 6c 69 74 65 33 56 64 62  Out, ~sqlite3Vdb
f4c0: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29  eIntValue(pIn1))
f4d0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
f4e0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20  ../* Opcode: If 
f4f0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
f500: 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
f510: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
f520: 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75  gister P1 is tru
f530: 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73  e.  The value is
f540: 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65  .** is considere
f550: 64 20 74 72 75 65 20 69 66 20 69 74 20 69 73 20  d true if it is 
f560: 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d  numeric and non-
f570: 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
f580: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
f590: 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
f5a0: 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73  he jump if P3 is
f5b0: 20 74 72 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   true..*/./* Opc
f5c0: 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32  ode: IfNot P1 P2
f5d0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
f5e0: 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
f5f0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
f600: 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20  r P1 is False.  
f610: 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20  The value is.** 
f620: 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72  is considered tr
f630: 75 65 20 69 66 20 69 74 20 68 61 73 20 61 20 6e  ue if it has a n
f640: 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20  umeric value of 
f650: 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
f660: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
f670: 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
f680: 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73  he jump if P3 is
f690: 20 74 72 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f   true..*/.case O
f6a0: 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20 20  P_If:           
f6b0: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
f6c0: 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  n1 */.case OP_If
f6d0: 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
f6e0: 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
f6f0: 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e  /.  int c;.  pIn
f700: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
f710: 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
f720: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
f730: 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d   ){.    c = pOp-
f740: 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69  >p3;.  }else{.#i
f750: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
f760: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
f770: 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
f780: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
f790: 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20  )!=0;.#else.    
f7a0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  c = sqlite3VdbeR
f7b0: 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  ealValue(pIn1)!=
f7c0: 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  0.0;.#endif.    
f7d0: 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
f7e0: 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20  =OP_IfNot ) c = 
f7f0: 21 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 20  !c;.  }.  if( c 
f800: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
f810: 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2-1;.  }.  bre
f820: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
f830: 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a  : IsNull P1 P2 *
f840: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
f850: 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
f860: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
f870: 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  1 is NULL..*/.ca
f880: 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20  se OP_IsNull: { 
f890: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
f8a0: 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c  me as TK_ISNULL,
f8b0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
f8c0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
f8d0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
f8e0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
f8f0: 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
f900: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
f910: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
f920: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
f930: 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
f940: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
f950: 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
f960: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
f970: 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a   not NULL.  .*/.
f980: 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a  case OP_NotNull:
f990: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
f9a0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e   same as TK_NOTN
f9b0: 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
f9c0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
f9d0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
f9e0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
f9f0: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
fa00: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
fa10: 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
fa20: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
fa30: 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33   Column P1 P2 P3
fa40: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 74   P4 P5.**.** Int
fa50: 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20  erpret the data 
fa60: 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70  that cursor P1 p
fa70: 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74  oints to as a st
fa80: 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73  ructure built us
fa90: 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52  ing.** the MakeR
faa0: 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
fab0: 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b  n.  (See the Mak
fac0: 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66  eRecord opcode f
fad0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  or additional.**
fae0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
faf0: 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  ut the format of
fb00: 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74   the data.)  Ext
fb10: 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63  ract the P2-th c
fb20: 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68  olumn.** from th
fb30: 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74  is record.  If t
fb40: 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68  here are less th
fb50: 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61  at (P2+1) .** va
fb60: 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  lues in the reco
fb70: 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55  rd, extract a NU
fb80: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61  LL..**.** The va
fb90: 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73  lue extracted is
fba0: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
fbb0: 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
fbc0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74   the column cont
fbd0: 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20  ains fewer than 
fbe0: 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20  P2 fields, then 
fbf0: 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20  extract a NULL. 
fc00: 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50   Or,.** if the P
fc10: 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  4 argument is a 
fc20: 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76  P4_MEM use the v
fc30: 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61  alue of the P4 a
fc40: 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68  rgument as.** th
fc50: 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20  e result..**.** 
fc60: 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c  If the OPFLAG_CL
fc70: 45 41 52 43 41 43 48 45 20 62 69 74 20 69 73 20  EARCACHE bit is 
fc80: 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31  set on P5 and P1
fc90: 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62   is a pseudo-tab
fca0: 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68  le cursor,.** th
fcb0: 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66 20  en the cache of 
fcc0: 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 72 65  the cursor is re
fcd0: 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74  set prior to ext
fce0: 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75  racting the colu
fcf0: 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74  mn..** The first
fd00: 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e   OP_Column again
fd10: 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  st a pseudo-tabl
fd20: 65 20 61 66 74 65 72 20 74 68 65 20 76 61 6c 75  e after the valu
fd30: 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  e of the content
fd40: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61 73  .** register has
fd50: 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20   changed should 
fd60: 68 61 76 65 20 74 68 69 73 20 62 69 74 20 73 65  have this bit se
fd70: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  t..*/.case OP_Co
fd80: 6c 75 6d 6e 3a 20 7b 0a 20 20 75 33 32 20 70 61  lumn: {.  u32 pa
fd90: 79 6c 6f 61 64 53 69 7a 65 3b 20 20 20 2f 2a 20  yloadSize;   /* 
fda0: 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
fdb0: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
fdc0: 0a 20 20 69 36 34 20 70 61 79 6c 6f 61 64 53 69  .  i64 payloadSi
fdd0: 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20  ze64; /* Number 
fde0: 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
fdf0: 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
fe00: 70 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  p1;            /
fe10: 2a 20 50 31 20 76 61 6c 75 65 20 6f 66 20 74 68  * P1 value of th
fe20: 65 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  e opcode */.  in
fe30: 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20  t p2;           
fe40: 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* column numbe
fe50: 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f  r to retrieve */
fe60: 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
fe70: 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42  C;    /* The VDB
fe80: 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 63 68  E cursor */.  ch
fe90: 61 72 20 2a 7a 52 65 63 3b 20 20 20 20 20 20 20  ar *zRec;       
fea0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 63   /* Pointer to c
feb0: 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 2d 64  omplete record-d
fec0: 61 74 61 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f  ata */.  BtCurso
fed0: 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54  r *pCrsr;   /* T
fee0: 68 65 20 42 54 72 65 65 20 63 75 72 73 6f 72 20  he BTree cursor 
fef0: 2a 2f 0a 20 20 75 33 32 20 2a 61 54 79 70 65 3b  */.  u32 *aType;
ff00: 20 20 20 20 20 20 20 20 2f 2a 20 61 54 79 70 65          /* aType
ff10: 5b 69 5d 20 68 6f 6c 64 73 20 74 68 65 20 6e 75  [i] holds the nu
ff20: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 74 68  meric type of th
ff30: 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f  e i-th column */
ff40: 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b  .  u32 *aOffset;
ff50: 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74        /* aOffset
ff60: 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f  [i] is offset to
ff70: 20 73 74 61 72 74 20 6f 66 20 64 61 74 61 20 66   start of data f
ff80: 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a  or i-th column *
ff90: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20  /.  int nField; 
ffa0: 20 20 20 20 20 20 20 2f 2a 20 6e 75 6d 62 65 72         /* number
ffb0: 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
ffc0: 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
ffd0: 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  t len;          
ffe0: 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f   /* The length o
fff0: 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64  f the serialized
10000 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f   data for the co
10010 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  lumn */.  int i;
10020 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10030 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
10040 20 20 63 68 61 72 20 2a 7a 44 61 74 61 3b 20 20    char *zData;  
10050 20 20 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20       /* Part of 
10060 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
10070 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 4d 65   decoded */.  Me
10080 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20  m *pDest;       
10090 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69   /* Where to wri
100a0 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64  te the extracted
100b0 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20   value */.  Mem 
100c0 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  sMem;          /
100d0 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68  * For storing th
100e0 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
100f0 65 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 2a  ecoded */.  u8 *
10100 7a 49 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f  zIdx;          /
10110 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 68 65 61  * Index into hea
10120 64 65 72 20 2a 2f 0a 20 20 75 38 20 2a 7a 45 6e  der */.  u8 *zEn
10130 64 48 64 72 3b 20 20 20 20 20 20 20 2f 2a 20 50  dHdr;       /* P
10140 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20  ointer to first 
10150 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68  byte after the h
10160 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f  eader */.  u32 o
10170 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 2f 2a  ffset;        /*
10180 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65   Offset into the
10190 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 73   data */.  u32 s
101a0 7a 46 69 65 6c 64 3b 20 20 20 20 20 20 20 2f 2a  zField;       /*
101b0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
101c0 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   in the content 
101d0 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 20 20  of a field */.  
101e0 69 6e 74 20 73 7a 48 64 72 3b 20 20 20 20 20 20  int szHdr;      
101f0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
10200 65 20 68 65 61 64 65 72 20 73 69 7a 65 20 66 69  e header size fi
10210 65 6c 64 20 61 74 20 73 74 61 72 74 20 6f 66 20  eld at start of 
10220 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
10230 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f  avail;         /
10240 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
10250 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64  s of available d
10260 61 74 61 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ata */.  Mem *pR
10270 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50  eg;         /* P
10280 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74  seudoTable input
10290 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 0a 20   register */... 
102a0 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
102b0 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
102c0 20 70 43 20 3d 20 30 3b 0a 20 20 6d 65 6d 73 65   pC = 0;.  memse
102d0 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65  t(&sMem, 0, size
102e0 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 61 73 73  of(sMem));.  ass
102f0 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43 75 72 73  ert( p1<p->nCurs
10300 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
10310 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
10320 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
10330 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d  .  pDest = &aMem
10340 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 4d 65 6d  [pOp->p3];.  Mem
10350 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73  SetTypeFlag(pDes
10360 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
10370 7a 52 65 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20  zRec = 0;..  /* 
10380 54 68 69 73 20 62 6c 6f 63 6b 20 73 65 74 73 20  This block sets 
10390 74 68 65 20 76 61 72 69 61 62 6c 65 20 70 61 79  the variable pay
103a0 6c 6f 61 64 53 69 7a 65 20 74 6f 20 62 65 20 74  loadSize to be t
103b0 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
103c0 6f 66 0a 20 20 2a 2a 20 62 79 74 65 73 20 69 6e  of.  ** bytes in
103d0 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 2a   the record..  *
103e0 2a 0a 20 20 2a 2a 20 7a 52 65 63 20 69 73 20 73  *.  ** zRec is s
103f0 65 74 20 74 6f 20 62 65 20 74 68 65 20 63 6f 6d  et to be the com
10400 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 74 68  plete text of th
10410 65 20 72 65 63 6f 72 64 20 69 66 20 69 74 20 69  e record if it i
10420 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 20 20 2a  s available..  *
10430 2a 20 54 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  * The complete r
10440 65 63 6f 72 64 20 74 65 78 74 20 69 73 20 61 6c  ecord text is al
10450 77 61 79 73 20 61 76 61 69 6c 61 62 6c 65 20 66  ways available f
10460 6f 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 73  or pseudo-tables
10470 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 72 65 63  .  ** If the rec
10480 6f 72 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ord is stored in
10490 20 61 20 63 75 72 73 6f 72 2c 20 74 68 65 20 63   a cursor, the c
104a0 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74  omplete record t
104b0 65 78 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 62  ext.  ** might b
104c0 65 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74  e available in t
104d0 68 65 20 20 70 43 2d 3e 61 52 6f 77 20 63 61 63  he  pC->aRow cac
104e0 68 65 2e 20 20 4f 72 20 69 74 20 6d 69 67 68 74  he.  Or it might
104f0 20 6e 6f 74 20 62 65 2e 0a 20 20 2a 2a 20 49 66   not be..  ** If
10500 20 74 68 65 20 64 61 74 61 20 69 73 20 75 6e 61   the data is una
10510 76 61 69 6c 61 62 6c 65 2c 20 20 7a 52 65 63 20  vailable,  zRec 
10520 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a  is set to NULL..
10530 20 20 2a 2a 0a 20 20 2a 2a 20 57 65 20 61 6c 73    **.  ** We als
10540 6f 20 63 6f 6d 70 75 74 65 20 74 68 65 20 6e 75  o compute the nu
10550 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
10560 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20  in the record.  
10570 46 6f 72 20 63 75 72 73 6f 72 73 2c 0a 20 20 2a  For cursors,.  *
10580 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
10590 63 6f 6c 75 6d 6e 73 20 69 73 20 73 74 6f 72 65  columns is store
105a0 64 20 69 6e 20 74 68 65 20 56 64 62 65 43 75 72  d in the VdbeCur
105b0 73 6f 72 2e 6e 46 69 65 6c 64 20 65 6c 65 6d 65  sor.nField eleme
105c0 6e 74 2e 0a 20 20 2a 2f 0a 20 20 70 43 20 3d 20  nt..  */.  pC = 
105d0 70 2d 3e 61 70 43 73 72 5b 70 31 5d 3b 0a 20 20  p->apCsr[p1];.  
105e0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
105f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
10600 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
10610 45 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  E.  assert( pC->
10620 70 56 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29  pVtabCursor==0 )
10630 3b 0a 23 65 6e 64 69 66 0a 20 20 70 43 72 73 72  ;.#endif.  pCrsr
10640 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
10650 20 20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29    if( pCrsr!=0 )
10660 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63  {.    /* The rec
10670 6f 72 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ord is stored in
10680 20 61 20 42 2d 54 72 65 65 20 2a 2f 0a 20 20 20   a B-Tree */.   
10690 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
106a0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
106b0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
106c0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
106d0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28  o_error;.    if(
106e0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
106f0 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a        payloadSiz
10700 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  e = 0;.    }else
10710 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74   if( pC->cacheSt
10720 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74  atus==p->cacheCt
10730 72 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f  r ){.      paylo
10740 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 70 61 79  adSize = pC->pay
10750 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20  loadSize;.      
10760 7a 52 65 63 20 3d 20 28 63 68 61 72 2a 29 70 43  zRec = (char*)pC
10770 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 7d 65 6c 73  ->aRow;.    }els
10780 65 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65  e if( pC->isInde
10790 78 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  x ){.      asser
107a0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
107b0 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
107c0 73 72 29 20 29 3b 0a 20 20 20 20 20 20 72 63 20  sr) );.      rc 
107d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
107e0 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61  ySize(pCrsr, &pa
107f0 79 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20  yloadSize64);.  
10800 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
10810 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f  SQLITE_OK );   /
10820 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f  * True because o
10830 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  f CursorMoveto()
10840 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20   call above */. 
10850 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 42       /* sqlite3B
10860 74 72 65 65 50 61 72 73 65 43 65 6c 6c 50 74 72  treeParseCellPtr
10870 28 29 20 75 73 65 73 20 67 65 74 56 61 72 69 6e  () uses getVarin
10880 74 33 32 28 29 20 74 6f 20 65 78 74 72 61 63 74  t32() to extract
10890 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 70 61   the.      ** pa
108a0 79 6c 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20 69  yload size, so i
108b0 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20  t is impossible 
108c0 66 6f 72 20 70 61 79 6c 6f 61 64 53 69 7a 65 36  for payloadSize6
108d0 34 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a  4 to be.      **
108e0 20 6c 61 72 67 65 72 20 74 68 61 6e 20 33 32 20   larger than 32 
108f0 62 69 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20 61  bits. */.      a
10900 73 73 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53  ssert( (payloadS
10910 69 7a 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d  ize64 & SQLITE_M
10920 41 58 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61  AX_U32)==(u64)pa
10930 79 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20  yloadSize64 );. 
10940 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65       payloadSize
10950 20 3d 20 28 75 33 32 29 70 61 79 6c 6f 61 64 53   = (u32)payloadS
10960 69 7a 65 36 34 3b 0a 20 20 20 20 7d 65 6c 73 65  ize64;.    }else
10970 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
10980 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
10990 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
109a0 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
109b0 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53  qlite3BtreeDataS
109c0 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c  ize(pCrsr, &payl
109d0 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20  oadSize);.      
109e0 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
109f0 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61  TE_OK );   /* Da
10a00 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20  taSize() cannot 
10a10 66 61 69 6c 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  fail */.    }.  
10a20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 73  }else if( pC->ps
10a30 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29  eudoTableReg>0 )
10a40 7b 0a 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d  {.    pReg = &aM
10a50 65 6d 5b 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  em[pC->pseudoTab
10a60 6c 65 52 65 67 5d 3b 0a 20 20 20 20 61 73 73 65  leReg];.    asse
10a70 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20  rt( pReg->flags 
10a80 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
10a90 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20    payloadSize = 
10aa0 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 7a 52 65  pReg->n;.    zRe
10ab0 63 20 3d 20 70 52 65 67 2d 3e 7a 3b 0a 20 20 20  c = pReg->z;.   
10ac0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
10ad0 20 3d 20 28 70 4f 70 2d 3e 70 35 26 4f 50 46 4c   = (pOp->p5&OPFL
10ae0 41 47 5f 43 4c 45 41 52 43 41 43 48 45 29 20 3f  AG_CLEARCACHE) ?
10af0 20 43 41 43 48 45 5f 53 54 41 4c 45 20 3a 20 70   CACHE_STALE : p
10b00 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20  ->cacheCtr;.    
10b10 61 73 73 65 72 74 28 20 70 61 79 6c 6f 61 64 53  assert( payloadS
10b20 69 7a 65 3d 3d 30 20 7c 7c 20 7a 52 65 63 21 3d  ize==0 || zRec!=
10b30 30 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  0 );.  }else{.  
10b40 20 20 2f 2a 20 43 6f 6e 73 69 64 65 72 20 74 68    /* Consider th
10b50 65 20 72 6f 77 20 74 6f 20 62 65 20 4e 55 4c 4c  e row to be NULL
10b60 20 2a 2f 0a 20 20 20 20 70 61 79 6c 6f 61 64 53   */.    payloadS
10b70 69 7a 65 20 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20  ize = 0;.  }..  
10b80 2f 2a 20 49 66 20 70 61 79 6c 6f 61 64 53 69 7a  /* If payloadSiz
10b90 65 20 69 73 20 30 2c 20 74 68 65 6e 20 6a 75 73  e is 0, then jus
10ba0 74 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 2a  t store a NULL *
10bb0 2f 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53  /.  if( payloadS
10bc0 69 7a 65 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73  ize==0 ){.    as
10bd0 73 65 72 74 28 20 70 44 65 73 74 2d 3e 66 6c 61  sert( pDest->fla
10be0 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20  gs&MEM_Null );. 
10bf0 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
10c00 6e 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 61 73 73  n_out;.  }.  ass
10c10 65 72 74 28 20 64 62 2d 3e 61 4c 69 6d 69 74 5b  ert( db->aLimit[
10c20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
10c30 47 54 48 5d 3e 3d 30 20 29 3b 0a 20 20 69 66 28  GTH]>=0 );.  if(
10c40 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28   payloadSize > (
10c50 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
10c60 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
10c70 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
10c80 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20  too_big;.  }..  
10c90 6e 46 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69  nField = pC->nFi
10ca0 65 6c 64 3b 0a 20 20 61 73 73 65 72 74 28 20 70  eld;.  assert( p
10cb0 32 3c 6e 46 69 65 6c 64 20 29 3b 0a 0a 20 20 2f  2<nField );..  /
10cc0 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65  * Read and parse
10cd0 20 74 68 65 20 74 61 62 6c 65 20 68 65 61 64 65   the table heade
10ce0 72 2e 20 20 53 74 6f 72 65 20 74 68 65 20 72 65  r.  Store the re
10cf0 73 75 6c 74 73 20 6f 66 20 74 68 65 20 70 61 72  sults of the par
10d00 73 65 0a 20 20 2a 2a 20 69 6e 74 6f 20 74 68 65  se.  ** into the
10d10 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 63   record header c
10d20 61 63 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74  ache fields of t
10d30 68 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a  he cursor..  */.
10d40 20 20 61 54 79 70 65 20 3d 20 70 43 2d 3e 61 54    aType = pC->aT
10d50 79 70 65 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63  ype;.  if( pC->c
10d60 61 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63  acheStatus==p->c
10d70 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20 61  acheCtr ){.    a
10d80 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66  Offset = pC->aOf
10d90 66 73 65 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  fset;.  }else{. 
10da0 20 20 20 61 73 73 65 72 74 28 61 54 79 70 65 29     assert(aType)
10db0 3b 0a 20 20 20 20 61 76 61 69 6c 20 3d 20 30 3b  ;.    avail = 0;
10dc0 0a 20 20 20 20 70 43 2d 3e 61 4f 66 66 73 65 74  .    pC->aOffset
10dd0 20 3d 20 61 4f 66 66 73 65 74 20 3d 20 26 61 54   = aOffset = &aT
10de0 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 20  ype[nField];.   
10df0 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
10e00 20 3d 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a   = payloadSize;.
10e10 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
10e20 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74  tus = p->cacheCt
10e30 72 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 67 75 72  r;..    /* Figur
10e40 65 20 6f 75 74 20 68 6f 77 20 6d 61 6e 79 20 62  e out how many b
10e50 79 74 65 73 20 61 72 65 20 69 6e 20 74 68 65 20  ytes are in the 
10e60 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 69 66  header */.    if
10e70 28 20 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20  ( zRec ){.      
10e80 7a 44 61 74 61 20 3d 20 7a 52 65 63 3b 0a 20 20  zData = zRec;.  
10e90 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
10ea0 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29  f( pC->isIndex )
10eb0 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  {.        zData 
10ec0 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33  = (char*)sqlite3
10ed0 42 74 72 65 65 4b 65 79 46 65 74 63 68 28 70 43  BtreeKeyFetch(pC
10ee0 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20  rsr, &avail);.  
10ef0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
10f00 20 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72     zData = (char
10f10 2a 29 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  *)sqlite3BtreeDa
10f20 74 61 46 65 74 63 68 28 70 43 72 73 72 2c 20 26  taFetch(pCrsr, &
10f30 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a  avail);.      }.
10f40 20 20 20 20 20 20 2f 2a 20 49 66 20 4b 65 79 46        /* If KeyF
10f50 65 74 63 68 28 29 2f 44 61 74 61 46 65 74 63 68  etch()/DataFetch
10f60 28 29 20 6d 61 6e 61 67 65 64 20 74 6f 20 67 65  () managed to ge
10f70 74 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 79  t the entire pay
10f80 6c 6f 61 64 2c 0a 20 20 20 20 20 20 2a 2a 20 73  load,.      ** s
10f90 61 76 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20  ave the payload 
10fa0 69 6e 20 74 68 65 20 70 43 2d 3e 61 52 6f 77 20  in the pC->aRow 
10fb0 63 61 63 68 65 2e 20 20 54 68 61 74 20 77 69 6c  cache.  That wil
10fc0 6c 20 73 61 76 65 20 75 73 20 66 72 6f 6d 0a 20  l save us from. 
10fd0 20 20 20 20 20 2a 2a 20 68 61 76 69 6e 67 20 74       ** having t
10fe0 6f 20 6d 61 6b 65 20 61 64 64 69 74 69 6f 6e 61  o make additiona
10ff0 6c 20 63 61 6c 6c 73 20 74 6f 20 66 65 74 63 68  l calls to fetch
11000 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 70 6f 72   the content por
11010 74 69 6f 6e 20 6f 66 0a 20 20 20 20 20 20 2a 2a  tion of.      **
11020 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20   the record..   
11030 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
11040 72 74 28 20 61 76 61 69 6c 3e 3d 30 20 29 3b 0a  rt( avail>=0 );.
11050 20 20 20 20 20 20 69 66 28 20 70 61 79 6c 6f 61        if( payloa
11060 64 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76  dSize <= (u32)av
11070 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  ail ){.        z
11080 52 65 63 20 3d 20 7a 44 61 74 61 3b 0a 20 20 20  Rec = zData;.   
11090 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
110a0 28 75 38 2a 29 7a 44 61 74 61 3b 0a 20 20 20 20  (u8*)zData;.    
110b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
110c0 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20   pC->aRow = 0;. 
110d0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
110e0 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
110f0 67 20 61 73 73 65 72 74 20 69 73 20 74 72 75 65  g assert is true
11100 20 69 6e 20 61 6c 6c 20 63 61 73 65 73 20 61 63   in all cases ac
11110 63 65 70 74 20 77 68 65 6e 0a 20 20 20 20 2a 2a  cept when.    **
11120 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
11130 6c 65 20 68 61 73 20 62 65 65 6e 20 63 6f 72 72  le has been corr
11140 75 70 74 65 64 20 65 78 74 65 72 6e 61 6c 6c 79  upted externally
11150 2e 0a 20 20 20 20 2a 2a 20 20 20 20 61 73 73 65  ..    **    asse
11160 72 74 28 20 7a 52 65 63 21 3d 30 20 7c 7c 20 61  rt( zRec!=0 || a
11170 76 61 69 6c 3e 3d 70 61 79 6c 6f 61 64 53 69 7a  vail>=payloadSiz
11180 65 20 7c 7c 20 61 76 61 69 6c 3e 3d 39 20 29 3b  e || avail>=9 );
11190 20 2a 2f 0a 20 20 20 20 73 7a 48 64 72 20 3d 20   */.    szHdr = 
111a0 67 65 74 56 61 72 69 6e 74 33 32 28 28 75 38 2a  getVarint32((u8*
111b0 29 7a 44 61 74 61 2c 20 6f 66 66 73 65 74 29 3b  )zData, offset);
111c0 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75  ..    /* Make su
111d0 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  re a corrupt dat
111e0 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69  abase has not gi
111f0 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69  ven us an oversi
11200 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 2a  ze header..    *
11210 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f  * Do this now to
11220 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69   avoid an oversi
11230 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ze memory alloca
11240 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  tion..    **.   
11250 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73   ** Type entries
11260 20 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20   can be between 
11270 31 20 61 6e 64 20 35 20 62 79 74 65 73 20 65 61  1 and 5 bytes ea
11280 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35  ch.  But 4 and 5
11290 20 62 79 74 65 0a 20 20 20 20 2a 2a 20 74 79 70   byte.    ** typ
112a0 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64  es use so much d
112b0 61 74 61 20 73 70 61 63 65 20 74 68 61 74 20 74  ata space that t
112c0 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  here can only be
112d0 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a   4096 and 32 of.
112e0 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73      ** them, res
112f0 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74  pectively.  So t
11300 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65  he maximum heade
11310 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73  r length results
11320 20 66 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33   from a.    ** 3
11330 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72 20 65  -byte type for e
11340 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d  ach of the maxim
11350 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75  um of 32768 colu
11360 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20  mns plus three. 
11370 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65     ** extra byte
11380 73 20 66 6f 72 20 74 68 65 20 68 65 61 64 65 72  s for the header
11390 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20   length itself. 
113a0 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39   32768*3 + 3 = 9
113b0 38 33 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  8307..    */.   
113c0 20 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38   if( offset > 98
113d0 33 30 37 20 29 7b 0a 20 20 20 20 20 20 72 63 20  307 ){.      rc 
113e0 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
113f0 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  _BKPT;.      got
11400 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
11410 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 43  .    }..    /* C
11420 6f 6d 70 75 74 65 20 69 6e 20 6c 65 6e 20 74 68  ompute in len th
11430 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
11440 73 20 6f 66 20 64 61 74 61 20 77 65 20 6e 65 65  s of data we nee
11450 64 20 74 6f 20 72 65 61 64 20 69 6e 20 6f 72 64  d to read in ord
11460 65 72 0a 20 20 20 20 2a 2a 20 74 6f 20 67 65 74  er.    ** to get
11470 20 6e 46 69 65 6c 64 20 74 79 70 65 20 76 61 6c   nField type val
11480 75 65 73 2e 20 20 6f 66 66 73 65 74 20 69 73 20  ues.  offset is 
11490 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f  an upper bound o
114a0 6e 20 74 68 69 73 2e 20 20 42 75 74 0a 20 20 20  n this.  But.   
114b0 20 2a 2a 20 6e 46 69 65 6c 64 20 6d 69 67 68 74   ** nField might
114c0 20 62 65 20 73 69 67 6e 69 66 69 63 61 6e 74 6c   be significantl
114d0 79 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  y less than the 
114e0 74 72 75 65 20 6e 75 6d 62 65 72 20 6f 66 20 63  true number of c
114f0 6f 6c 75 6d 6e 73 0a 20 20 20 20 2a 2a 20 69 6e  olumns.    ** in
11500 20 74 68 65 20 74 61 62 6c 65 2c 20 61 6e 64 20   the table, and 
11510 69 6e 20 74 68 61 74 20 63 61 73 65 2c 20 35 2a  in that case, 5*
11520 6e 46 69 65 6c 64 2b 33 20 6d 69 67 68 74 20 62  nField+3 might b
11530 65 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 6f  e smaller than o
11540 66 66 73 65 74 2e 0a 20 20 20 20 2a 2a 20 57 65  ffset..    ** We
11550 20 77 61 6e 74 20 74 6f 20 6d 69 6e 69 6d 69 7a   want to minimiz
11560 65 20 6c 65 6e 20 69 6e 20 6f 72 64 65 72 20 74  e len in order t
11570 6f 20 6c 69 6d 69 74 20 74 68 65 20 73 69 7a 65  o limit the size
11580 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 0a 20   of the memory. 
11590 20 20 20 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e     ** allocation
115a0 2c 20 65 73 70 65 63 69 61 6c 6c 79 20 69 66 20  , especially if 
115b0 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  a corrupt databa
115c0 73 65 20 66 69 6c 65 20 68 61 73 20 63 61 75 73  se file has caus
115d0 65 64 20 6f 66 66 73 65 74 0a 20 20 20 20 2a 2a  ed offset.    **
115e0 20 74 6f 20 62 65 20 6f 76 65 72 73 69 7a 65 64   to be oversized
115f0 2e 20 4f 66 66 73 65 74 20 69 73 20 6c 69 6d 69  . Offset is limi
11600 74 65 64 20 74 6f 20 39 38 33 30 37 20 61 62 6f  ted to 98307 abo
11610 76 65 2e 20 20 42 75 74 20 39 38 33 30 37 20 6d  ve.  But 98307 m
11620 69 67 68 74 0a 20 20 20 20 2a 2a 20 73 74 69 6c  ight.    ** stil
11630 6c 20 65 78 63 65 65 64 20 52 6f 62 73 6f 6e 20  l exceed Robson 
11640 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
11650 6e 20 6c 69 6d 69 74 73 20 6f 6e 20 73 6f 6d 65  n limits on some
11660 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e   configurations.
11670 0a 20 20 20 20 2a 2a 20 4f 6e 20 73 79 73 74 65  .    ** On syste
11680 6d 73 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 74  ms that cannot t
11690 6f 6c 65 72 61 74 65 20 6c 61 72 67 65 20 6d 65  olerate large me
116a0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  mory allocations
116b0 2c 20 6e 46 69 65 6c 64 2a 35 2b 33 0a 20 20 20  , nField*5+3.   
116c0 20 2a 2a 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20   ** will likely 
116d0 62 65 20 6d 75 63 68 20 73 6d 61 6c 6c 65 72 20  be much smaller 
116e0 73 69 6e 63 65 20 6e 46 69 65 6c 64 20 77 69 6c  since nField wil
116f0 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6c 65 73 73  l likely be less
11700 20 74 68 61 6e 0a 20 20 20 20 2a 2a 20 32 30 20   than.    ** 20 
11710 6f 72 20 73 6f 2e 20 20 54 68 69 73 20 69 6e 73  or so.  This ins
11720 75 72 65 73 20 74 68 61 74 20 52 6f 62 73 6f 6e  ures that Robson
11730 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
11740 6f 6e 20 6c 69 6d 69 74 73 20 61 72 65 0a 20 20  on limits are.  
11750 20 20 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 65    ** not exceede
11760 64 20 65 76 65 6e 20 66 6f 72 20 63 6f 72 72 75  d even for corru
11770 70 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  pt database file
11780 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6c 65  s..    */.    le
11790 6e 20 3d 20 6e 46 69 65 6c 64 2a 35 20 2b 20 33  n = nField*5 + 3
117a0 3b 0a 20 20 20 20 69 66 28 20 6c 65 6e 20 3e 20  ;.    if( len > 
117b0 28 69 6e 74 29 6f 66 66 73 65 74 20 29 20 6c 65  (int)offset ) le
117c0 6e 20 3d 20 28 69 6e 74 29 6f 66 66 73 65 74 3b  n = (int)offset;
117d0 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 4b 65 79  ..    /* The Key
117e0 46 65 74 63 68 28 29 20 6f 72 20 44 61 74 61 46  Fetch() or DataF
117f0 65 74 63 68 28 29 20 61 62 6f 76 65 20 61 72 65  etch() above are
11800 20 66 61 73 74 20 61 6e 64 20 77 69 6c 6c 20 67   fast and will g
11810 65 74 20 74 68 65 20 65 6e 74 69 72 65 0a 20 20  et the entire.  
11820 20 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61 64    ** record head
11830 65 72 20 69 6e 20 6d 6f 73 74 20 63 61 73 65 73  er in most cases
11840 2e 20 20 42 75 74 20 74 68 65 79 20 77 69 6c 6c  .  But they will
11850 20 66 61 69 6c 20 74 6f 20 67 65 74 20 74 68 65   fail to get the
11860 20 63 6f 6d 70 6c 65 74 65 0a 20 20 20 20 2a 2a   complete.    **
11870 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 69   record header i
11880 66 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  f the record hea
11890 64 65 72 20 64 6f 65 73 20 6e 6f 74 20 66 69 74  der does not fit
118a0 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20 70 61 67   on a single pag
118b0 65 0a 20 20 20 20 2a 2a 20 69 6e 20 74 68 65 20  e.    ** in the 
118c0 42 2d 54 72 65 65 2e 20 20 57 68 65 6e 20 74 68  B-Tree.  When th
118d0 61 74 20 68 61 70 70 65 6e 73 2c 20 75 73 65 20  at happens, use 
118e0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
118f0 6f 6d 42 74 72 65 65 28 29 20 74 6f 0a 20 20 20  omBtree() to.   
11900 20 2a 2a 20 61 63 71 75 69 72 65 20 74 68 65 20   ** acquire the 
11910 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 20  complete header 
11920 74 65 78 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  text..    */.   
11930 20 69 66 28 20 21 7a 52 65 63 20 26 26 20 61 76   if( !zRec && av
11940 61 69 6c 3c 6c 65 6e 20 29 7b 0a 20 20 20 20 20  ail<len ){.     
11950 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 30 3b   sMem.flags = 0;
11960 0a 20 20 20 20 20 20 73 4d 65 6d 2e 64 62 20 3d  .      sMem.db =
11970 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   0;.      rc = s
11980 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
11990 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c  mBtree(pCrsr, 0,
119a0 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65   len, pC->isInde
119b0 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20  x, &sMem);.     
119c0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
119d0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
119e0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
119f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
11a00 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a  zData = sMem.z;.
11a10 20 20 20 20 7d 0a 20 20 20 20 7a 45 6e 64 48 64      }.    zEndHd
11a20 72 20 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61  r = (u8 *)&zData
11a30 5b 6c 65 6e 5d 3b 0a 20 20 20 20 7a 49 64 78 20  [len];.    zIdx 
11a40 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 73  = (u8 *)&zData[s
11a50 7a 48 64 72 5d 3b 0a 0a 20 20 20 20 2f 2a 20 53  zHdr];..    /* S
11a60 63 61 6e 20 74 68 65 20 68 65 61 64 65 72 20 61  can the header a
11a70 6e 64 20 75 73 65 20 69 74 20 74 6f 20 66 69 6c  nd use it to fil
11a80 6c 20 69 6e 20 74 68 65 20 61 54 79 70 65 5b 5d  l in the aType[]
11a90 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 5d 0a 20   and aOffset[]. 
11aa0 20 20 20 2a 2a 20 61 72 72 61 79 73 2e 20 20 61     ** arrays.  a
11ab0 54 79 70 65 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e  Type[i] will con
11ac0 74 61 69 6e 20 74 68 65 20 74 79 70 65 20 69 6e  tain the type in
11ad0 74 65 67 65 72 20 66 6f 72 20 74 68 65 20 69 2d  teger for the i-
11ae0 74 68 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e  th.    ** column
11af0 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20   and aOffset[i] 
11b00 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65  will contain the
11b10 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65   offset from the
11b20 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20 2a   beginning.    *
11b30 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  * of the record 
11b40 74 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66 20  to the start of 
11b50 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65  the data for the
11b60 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20 20 20   i-th column.   
11b70 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   */.    for(i=0;
11b80 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b   i<nField; i++){
11b90 0a 20 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c  .      if( zIdx<
11ba0 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20  zEndHdr ){.     
11bb0 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20     aOffset[i] = 
11bc0 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 20 20  offset;.        
11bd0 7a 49 64 78 20 2b 3d 20 67 65 74 56 61 72 69 6e  zIdx += getVarin
11be0 74 33 32 28 7a 49 64 78 2c 20 61 54 79 70 65 5b  t32(zIdx, aType[
11bf0 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 73 7a 46  i]);.        szF
11c00 69 65 6c 64 20 3d 20 73 71 6c 69 74 65 33 56 64  ield = sqlite3Vd
11c10 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
11c20 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20  aType[i]);.     
11c30 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a 46     offset += szF
11c40 69 65 6c 64 3b 0a 20 20 20 20 20 20 20 20 69 66  ield;.        if
11c50 28 20 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c 64  ( offset<szField
11c60 20 29 7b 20 20 2f 2a 20 54 72 75 65 20 69 66 20   ){  /* True if 
11c70 6f 66 66 73 65 74 20 6f 76 65 72 66 6c 6f 77 73  offset overflows
11c80 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 49   */.          zI
11c90 64 78 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31 5d  dx = &zEndHdr[1]
11ca0 3b 20 20 2f 2a 20 46 6f 72 63 65 73 20 53 51 4c  ;  /* Forces SQL
11cb0 49 54 45 5f 43 4f 52 52 55 50 54 20 72 65 74 75  ITE_CORRUPT retu
11cc0 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20 20  rn below */.    
11cd0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
11ce0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
11cf0 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49  se{.        /* I
11d00 66 20 69 20 69 73 20 6c 65 73 73 20 74 68 61 74  f i is less that
11d10 20 6e 46 69 65 6c 64 2c 20 74 68 65 6e 20 74 68   nField, then th
11d20 65 72 65 20 61 72 65 20 6c 65 73 73 20 66 69 65  ere are less fie
11d30 6c 64 73 20 69 6e 20 74 68 69 73 0a 20 20 20 20  lds in this.    
11d40 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 74 68      ** record th
11d50 61 6e 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73  an SetNumColumns
11d60 20 69 6e 64 69 63 61 74 65 64 20 74 68 65 72 65   indicated there
11d70 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20   are columns in 
11d80 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  the.        ** t
11d90 61 62 6c 65 2e 20 53 65 74 20 74 68 65 20 6f 66  able. Set the of
11da0 66 73 65 74 20 66 6f 72 20 61 6e 79 20 65 78 74  fset for any ext
11db0 72 61 20 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70  ra columns not p
11dc0 72 65 73 65 6e 74 20 69 6e 0a 20 20 20 20 20 20  resent in.      
11dd0 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 20    ** the record 
11de0 74 6f 20 30 2e 20 54 68 69 73 20 74 65 6c 6c 73  to 0. This tells
11df0 20 63 6f 64 65 20 62 65 6c 6f 77 20 74 6f 20 73   code below to s
11e00 74 6f 72 65 20 61 20 4e 55 4c 4c 0a 20 20 20 20  tore a NULL.    
11e10 20 20 20 20 2a 2a 20 69 6e 73 74 65 61 64 20 6f      ** instead o
11e20 66 20 64 65 73 65 72 69 61 6c 69 7a 69 6e 67 20  f deserializing 
11e30 61 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65  a value from the
11e40 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 20   record..       
11e50 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 4f 66 66   */.        aOff
11e60 73 65 74 5b 69 5d 20 3d 20 30 3b 0a 20 20 20 20  set[i] = 0;.    
11e70 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
11e80 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
11e90 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ase(&sMem);.    
11ea0 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d  sMem.flags = MEM
11eb0 5f 4e 75 6c 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49  _Null;..    /* I
11ec0 66 20 77 65 20 68 61 76 65 20 72 65 61 64 20 6d  f we have read m
11ed0 6f 72 65 20 68 65 61 64 65 72 20 64 61 74 61 20  ore header data 
11ee0 74 68 61 6e 20 77 61 73 20 63 6f 6e 74 61 69 6e  than was contain
11ef0 65 64 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  ed in the header
11f00 2c 0a 20 20 20 20 2a 2a 20 6f 72 20 69 66 20 74  ,.    ** or if t
11f10 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61  he end of the la
11f20 73 74 20 66 69 65 6c 64 20 61 70 70 65 61 72 73  st field appears
11f30 20 74 6f 20 62 65 20 70 61 73 74 20 74 68 65 20   to be past the 
11f40 65 6e 64 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  end of the.    *
11f50 2a 20 72 65 63 6f 72 64 2c 20 6f 72 20 69 66 20  * record, or if 
11f60 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c  the end of the l
11f70 61 73 74 20 66 69 65 6c 64 20 61 70 70 65 61 72  ast field appear
11f80 73 20 74 6f 20 62 65 20 62 65 66 6f 72 65 20 74  s to be before t
11f90 68 65 20 65 6e 64 0a 20 20 20 20 2a 2a 20 6f 66  he end.    ** of
11fa0 20 74 68 65 20 72 65 63 6f 72 64 20 28 77 68 65   the record (whe
11fb0 6e 20 61 6c 6c 20 66 69 65 6c 64 73 20 70 72 65  n all fields pre
11fc0 73 65 6e 74 29 2c 20 74 68 65 6e 20 77 65 20 6d  sent), then we m
11fd0 75 73 74 20 62 65 20 64 65 61 6c 69 6e 67 20 0a  ust be dealing .
11fe0 20 20 20 20 2a 2a 20 77 69 74 68 20 61 20 63 6f      ** with a co
11ff0 72 72 75 70 74 20 64 61 74 61 62 61 73 65 2e 0a  rrupt database..
12000 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28      */.    if( (
12010 7a 49 64 78 20 3e 20 7a 45 6e 64 48 64 72 29 20  zIdx > zEndHdr) 
12020 7c 7c 20 28 6f 66 66 73 65 74 20 3e 20 70 61 79  || (offset > pay
12030 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20  loadSize).      
12040 20 20 20 7c 7c 20 28 7a 49 64 78 3d 3d 7a 45 6e     || (zIdx==zEn
12050 64 48 64 72 20 26 26 20 6f 66 66 73 65 74 21 3d  dHdr && offset!=
12060 70 61 79 6c 6f 61 64 53 69 7a 65 29 20 29 7b 0a  payloadSize) ){.
12070 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
12080 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
12090 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
120a0 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a  lumn_out;.    }.
120b0 20 20 7d 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68    }..  /* Get th
120c0 65 20 63 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61  e column informa
120d0 74 69 6f 6e 2e 20 49 66 20 61 4f 66 66 73 65 74  tion. If aOffset
120e0 5b 70 32 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  [p2] is non-zero
120f0 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 64 65 73  , then .  ** des
12100 65 72 69 61 6c 69 7a 65 20 74 68 65 20 76 61 6c  erialize the val
12110 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f  ue from the reco
12120 72 64 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70  rd. If aOffset[p
12130 32 5d 20 69 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a  2] is zero,.  **
12140 20 74 68 65 6e 20 74 68 65 72 65 20 61 72 65 20   then there are 
12150 6e 6f 74 20 65 6e 6f 75 67 68 20 66 69 65 6c 64  not enough field
12160 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
12170 74 6f 20 73 61 74 69 73 66 79 20 74 68 65 0a 20  to satisfy the. 
12180 20 2a 2a 20 72 65 71 75 65 73 74 2e 20 20 49 6e   ** request.  In
12190 20 74 68 69 73 20 63 61 73 65 2c 20 73 65 74 20   this case, set 
121a0 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 6f  the value NULL o
121b0 72 20 74 6f 20 50 34 20 69 66 20 50 34 20 69 73  r to P4 if P4 is
121c0 0a 20 20 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20  .  ** a pointer 
121d0 74 6f 20 61 20 4d 65 6d 20 6f 62 6a 65 63 74 2e  to a Mem object.
121e0 0a 20 20 2a 2f 0a 20 20 69 66 28 20 61 4f 66 66  .  */.  if( aOff
121f0 73 65 74 5b 70 32 5d 20 29 7b 0a 20 20 20 20 61  set[p2] ){.    a
12200 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
12210 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20  E_OK );.    if( 
12220 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20 73 71  zRec ){.      sq
12230 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
12240 61 73 65 45 78 74 65 72 6e 61 6c 28 70 44 65 73  aseExternal(pDes
12250 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  t);.      sqlite
12260 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28  3VdbeSerialGet((
12270 75 38 20 2a 29 26 7a 52 65 63 5b 61 4f 66 66 73  u8 *)&zRec[aOffs
12280 65 74 5b 70 32 5d 5d 2c 20 61 54 79 70 65 5b 70  et[p2]], aType[p
12290 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  2], pDest);.    
122a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 65 6e  }else{.      len
122b0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
122c0 72 69 61 6c 54 79 70 65 4c 65 6e 28 61 54 79 70  rialTypeLen(aTyp
122d0 65 5b 70 32 5d 29 3b 0a 20 20 20 20 20 20 73 71  e[p2]);.      sq
122e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
122f0 28 26 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a  (&sMem, pDest);.
12300 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
12310 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
12320 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65  ee(pCrsr, aOffse
12330 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70 43 2d 3e  t[p2], len, pC->
12340 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b  isIndex, &sMem);
12350 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
12360 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
12370 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
12380 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  mn_out;.      }.
12390 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d        zData = sM
123a0 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69  em.z;.      sqli
123b0 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
123c0 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 61 54 79  ((u8*)zData, aTy
123d0 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a  pe[p2], pDest);.
123e0 20 20 20 20 7d 0a 20 20 20 20 70 44 65 73 74 2d      }.    pDest-
123f0 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
12400 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66  .  }else{.    if
12410 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
12420 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 73  4_MEM ){.      s
12430 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
12440 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20  llowCopy(pDest, 
12450 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45  pOp->p4.pMem, ME
12460 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 7d  M_Static);.    }
12470 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
12480 72 74 28 20 70 44 65 73 74 2d 3e 66 6c 61 67 73  rt( pDest->flags
12490 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20  &MEM_Null );.   
124a0 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20   }.  }..  /* If 
124b0 77 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  we dynamically a
124c0 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 74  llocated space t
124d0 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20  o hold the data 
124e0 28 69 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c  (in the.  ** sql
124f0 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
12500 74 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76  tree() call abov
12510 65 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72  e) then transfer
12520 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74   control of that
12530 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c  .  ** dynamicall
12540 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63  y allocated spac
12550 65 20 6f 76 65 72 20 74 6f 20 74 68 65 20 70 44  e over to the pD
12560 65 73 74 20 73 74 72 75 63 74 75 72 65 2e 0a 20  est structure.. 
12570 20 2a 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74   ** This prevent
12580 73 20 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e  s a memory copy.
12590 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65 6d  .  */.  if( sMem
125a0 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20  .zMalloc ){.    
125b0 61 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d  assert( sMem.z==
125c0 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a  sMem.zMalloc );.
125d0 20 20 20 20 61 73 73 65 72 74 28 20 21 28 70 44      assert( !(pD
125e0 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  est->flags & MEM
125f0 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 61 73 73  _Dyn) );.    ass
12600 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c  ert( !(pDest->fl
12610 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c  ags & (MEM_Blob|
12620 4d 45 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65  MEM_Str)) || pDe
12630 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b  st->z==sMem.z );
12640 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67  .    pDest->flag
12650 73 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d  s &= ~(MEM_Ephem
12660 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20  |MEM_Static);.  
12670 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c    pDest->flags |
12680 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20  = MEM_Term;.    
12690 70 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e  pDest->z = sMem.
126a0 7a 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d  z;.    pDest->zM
126b0 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61  alloc = sMem.zMa
126c0 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63 20  lloc;.  }..  rc 
126d0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
126e0 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70 44  MakeWriteable(pD
126f0 65 73 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e  est);..op_column
12700 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d  _out:.  UPDATE_M
12710 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
12720 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
12730 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
12740 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  est);.  break;.}
12750 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66  ../* Opcode: Aff
12760 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34  inity P1 P2 * P4
12770 20 2a 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61   *.**.** Apply a
12780 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72  ffinities to a r
12790 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73  ange of P2 regis
127a0 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69  ters starting wi
127b0 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  th P1..**.** P4 
127c0 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  is a string that
127d0 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72   is P2 character
127e0 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20  s long. The nth 
127f0 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
12800 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63  .** string indic
12810 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ates the column 
12820 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68  affinity that sh
12830 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72  ould be used for
12840 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f   the nth.** memo
12850 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72  ry cell in the r
12860 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ange..*/.case OP
12870 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63  _Affinity: {.  c
12880 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69  onst char *zAffi
12890 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61  nity;   /* The a
128a0 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70  ffinity to be ap
128b0 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  plied */.  char 
128c0 63 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20  cAff;           
128d0 20 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20      /* A single 
128e0 63 68 61 72 61 63 74 65 72 20 6f 66 20 61 66 66  character of aff
128f0 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66  inity */..  zAff
12900 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
12910 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66  z;.  assert( zAf
12920 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61  finity!=0 );.  a
12930 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
12940 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a  [pOp->p2]==0 );.
12950 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
12960 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65  Op->p1];.  while
12970 28 20 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66  ( (cAff = *(zAff
12980 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a  inity++))!=0 ){.
12990 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
129a0 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e   <= &p->aMem[p->
129b0 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 45 78 70  nMem] );.    Exp
129c0 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
129d0 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
129e0 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63  (pIn1, cAff, enc
129f0 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31  oding);.    pIn1
12a00 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ++;.  }.  break;
12a10 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
12a20 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20  akeRecord P1 P2 
12a30 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f  P3 P4 *.**.** Co
12a40 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65  nvert P2 registe
12a50 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  rs beginning wit
12a60 68 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72  h P1 into the [r
12a70 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a  ecord format].**
12a80 20 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72   use as a data r
12a90 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62  ecord in a datab
12aa0 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20  ase table or as 
12ab0 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69  a key.** in an i
12ac0 6e 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f  ndex.  The OP_Co
12ad0 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20  lumn opcode can 
12ae0 64 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72  decode the recor
12af0 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50  d later..**.** P
12b00 34 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e  4 may be a strin
12b10 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61  g that is P2 cha
12b20 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54  racters long.  T
12b30 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72  he nth character
12b40 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
12b50 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
12b60 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
12b70 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
12b80 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a  sed for the nth.
12b90 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  ** field of the 
12ba0 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a  index key..**.**
12bb0 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f   The mapping fro
12bc0 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61  m character to a
12bd0 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e  ffinity is given
12be0 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41   by the SQLITE_A
12bf0 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65  FF_.** macros de
12c00 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49  fined in sqliteI
12c10 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  nt.h..**.** If P
12c20 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61  4 is NULL then a
12c30 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20  ll index fields 
12c40 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69 74  have the affinit
12c50 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20  y NONE..*/.case 
12c60 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b  OP_MakeRecord: {
12c70 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72  .  u8 *zNewRecor
12c80 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62  d;        /* A b
12c90 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68  uffer to hold th
12ca0 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e  e data for the n
12cb0 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d  ew record */.  M
12cc0 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20  em *pRec;       
12cd0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77        /* The new
12ce0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34   record */.  u64
12cf0 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20 20   nData;         
12d00 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
12d10 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73   bytes of data s
12d20 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
12d30 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  dr;             
12d40 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
12d50 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70  tes of header sp
12d60 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79  ace */.  i64 nBy
12d70 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
12d80 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72 65  /* Data space re
12d90 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20  quired for this 
12da0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
12db0 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20  nZero;          
12dc0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12dd0 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68  zero bytes at th
12de0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
12df0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61  ord */.  int nVa
12e00 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  rint;           
12e10 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
12e20 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a  es in a varint *
12e30 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74  /.  u32 serial_t
12e40 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79  ype;       /* Ty
12e50 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65  pe field */.  Me
12e60 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20  m *pData0;      
12e70 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69       /* First fi
12e80 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e  eld to be combin
12e90 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f  ed into the reco
12ea0 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61  rd */.  Mem *pLa
12eb0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
12ec0 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20  * Last field of 
12ed0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
12ee0 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  int nField;     
12ef0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
12f00 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
12f10 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68  e record */.  ch
12f20 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20  ar *zAffinity;  
12f30 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
12f40 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20  nity string for 
12f50 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
12f60 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b  int file_format;
12f70 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66         /* File f
12f80 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72  ormat to use for
12f90 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
12fa0 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
12fb0 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75        /* Space u
12fc0 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72  sed in zNewRecor
12fd0 64 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e  d[] */.  int len
12fe0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
12ff0 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66  /* Length of a f
13000 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73  ield */..  /* As
13010 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72  suming the recor
13020 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65  d contains N fie
13030 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20  lds, the record 
13040 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a  format looks.  *
13050 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a  * like this:.  *
13060 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  *.  ** ---------
13070 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13080 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13090 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
130a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
130b0 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20    ** | hdr-size 
130c0 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20  | type 0 | type 
130d0 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e  1 | ... | type N
130e0 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e  -1 | data0 | ...
130f0 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20   | data N-1 | . 
13100 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ** ------------
13110 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13120 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13130 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13140 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a  ------------.  *
13150 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69  *.  ** Data(0) i
13160 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  s taken from reg
13170 69 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28  ister P1.  Data(
13180 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65  1) comes from re
13190 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a  gister P1+1.  **
131a0 20 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20   and so froth.. 
131b0 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79   **.  ** Each ty
131c0 70 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61  pe field is a va
131d0 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e  rint representin
131e0 67 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70  g the serial typ
131f0 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63  e of the .  ** c
13200 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74  orresponding dat
13210 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73  a element (see s
13220 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
13230 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a  Type()). The.  *
13240 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64  * hdr-size field
13250 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e   is also a varin
13260 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f  t which is the o
13270 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62  ffset from the b
13280 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66  eginning.  ** of
13290 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64   the record to d
132a0 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61  ata0..  */.  nDa
132b0 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ta = 0;         
132c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
132d0 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65  es of data space
132e0 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20   */.  nHdr = 0; 
132f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13300 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68  er of bytes of h
13310 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20  eader space */. 
13320 20 6e 42 79 74 65 20 3d 20 30 3b 20 20 20 20 20   nByte = 0;     
13330 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63      /* Data spac
13340 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  e required for t
13350 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  his record */.  
13360 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20  nZero = 0;      
13370 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13380 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68  zero bytes at th
13390 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
133a0 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20  ord */.  nField 
133b0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66  = pOp->p1;.  zAf
133c0 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
133d0 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46  .z;.  assert( nF
133e0 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ield>0 && pOp->p
133f0 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
13400 46 69 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31  Field<=p->nMem+1
13410 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26   );.  pData0 = &
13420 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
13430 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
13440 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
13450 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
13460 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
13470 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
13480 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70  rmat;..  /* Loop
13490 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65   through the ele
134a0 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20  ments that will 
134b0 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f  make up the reco
134c0 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a  rd to figure.  *
134d0 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73  * out how much s
134e0 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64  pace is required
134f0 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
13500 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28  ord..  */.  for(
13510 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65  pRec=pData0; pRe
13520 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b  c<=pLast; pRec++
13530 29 7b 0a 20 20 20 20 69 66 28 20 7a 41 66 66 69  ){.    if( zAffi
13540 6e 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70  nity ){.      ap
13550 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63  plyAffinity(pRec
13560 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65 63  , zAffinity[pRec
13570 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69  -pData0], encodi
13580 6e 67 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ng);.    }.    i
13590 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  f( pRec->flags&M
135a0 45 4d 5f 5a 65 72 6f 20 26 26 20 70 52 65 63 2d  EM_Zero && pRec-
135b0 3e 6e 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  >n>0 ){.      sq
135c0 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
135d0 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20  ndBlob(pRec);.  
135e0 20 20 7d 0a 20 20 20 20 73 65 72 69 61 6c 5f 74    }.    serial_t
135f0 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ype = sqlite3Vdb
13600 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63  eSerialType(pRec
13610 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a  , file_format);.
13620 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65      len = sqlite
13630 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
13640 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  en(serial_type);
13650 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65  .    nData += le
13660 6e 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73  n;.    nHdr += s
13670 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
13680 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20  serial_type);.  
13690 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67    if( pRec->flag
136a0 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
136b0 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 70 75        /* Only pu
136c0 72 65 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 42  re zero-filled B
136d0 4c 4f 42 73 20 63 61 6e 20 62 65 20 69 6e 70 75  LOBs can be inpu
136e0 74 20 74 6f 20 74 68 69 73 20 4f 70 63 6f 64 65  t to this Opcode
136f0 2e 0a 20 20 20 20 20 20 2a 2a 20 57 65 20 64 6f  ..      ** We do
13700 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6c 6f 62 73   not allow blobs
13710 20 77 69 74 68 20 61 20 70 72 65 66 69 78 20 61   with a prefix a
13720 6e 64 20 61 20 7a 65 72 6f 2d 66 69 6c 6c 65 64  nd a zero-filled
13730 20 74 61 69 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   tail. */.      
13740 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75  nZero += pRec->u
13750 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c 73  .nZero;.    }els
13760 65 20 69 66 28 20 6c 65 6e 20 29 7b 0a 20 20 20  e if( len ){.   
13770 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20     nZero = 0;.  
13780 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 64    }.  }..  /* Ad
13790 64 20 74 68 65 20 69 6e 69 74 69 61 6c 20 68 65  d the initial he
137a0 61 64 65 72 20 76 61 72 69 6e 74 20 61 6e 64 20  ader varint and 
137b0 74 6f 74 61 6c 20 74 68 65 20 73 69 7a 65 20 2a  total the size *
137c0 2f 0a 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72  /.  nHdr += nVar
137d0 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72  int = sqlite3Var
137e0 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20  intLen(nHdr);.  
137f0 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69  if( nVarint<sqli
13800 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64  te3VarintLen(nHd
13810 72 29 20 29 7b 0a 20 20 20 20 6e 48 64 72 2b 2b  r) ){.    nHdr++
13820 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20  ;.  }.  nByte = 
13830 6e 48 64 72 2b 6e 44 61 74 61 2d 6e 5a 65 72 6f  nHdr+nData-nZero
13840 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62  ;.  if( nByte>db
13850 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
13860 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
13870 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
13880 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b  g;.  }..  /* Mak
13890 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75  e sure the outpu
138a0 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61  t register has a
138b0 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e   buffer large en
138c0 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20  ough to store . 
138d0 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f   ** the new reco
138e0 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72  rd. The output r
138f0 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33  egister (pOp->p3
13900 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  ) is not allowed
13910 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20   to.  ** be one 
13920 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  of the input reg
13930 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20  isters (because 
13940 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  the following ca
13950 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74  ll to.  ** sqlit
13960 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 29 20  e3VdbeMemGrow() 
13970 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68  could clobber th
13980 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69  e value before i
13990 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f  t is used)..  */
139a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
139b0 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f  p3<pOp->p1 || pO
139c0 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70  p->p3>=pOp->p1+p
139d0 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74  Op->p2 );.  pOut
139e0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
139f0 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ];.  if( sqlite3
13a00 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74  VdbeMemGrow(pOut
13a10 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c 20 30 29  , (int)nByte, 0)
13a20 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
13a30 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52  mem;.  }.  zNewR
13a40 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f  ecord = (u8 *)pO
13a50 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69  ut->z;..  /* Wri
13a60 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  te the record */
13a70 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74  .  i = putVarint
13a80 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e  32(zNewRecord, n
13a90 48 64 72 29 3b 0a 20 20 66 6f 72 28 70 52 65 63  Hdr);.  for(pRec
13aa0 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70  =pData0; pRec<=p
13ab0 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20  Last; pRec++){. 
13ac0 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d     serial_type =
13ad0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
13ae0 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c  alType(pRec, fil
13af0 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 69  e_format);.    i
13b00 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28   += putVarint32(
13b10 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20  &zNewRecord[i], 
13b20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20  serial_type);   
13b30 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70     /* serial typ
13b40 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72 28 70  e */.  }.  for(p
13b50 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63  Rec=pData0; pRec
13b60 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29  <=pLast; pRec++)
13b70 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20 64 61 74  {  /* serial dat
13b80 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 73 71  a */.    i += sq
13b90 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 50  lite3VdbeSerialP
13ba0 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69  ut(&zNewRecord[i
13bb0 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74 65 2d 69  ], (int)(nByte-i
13bc0 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f 66 6f 72  ), pRec,file_for
13bd0 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65  mat);.  }.  asse
13be0 72 74 28 20 69 3d 3d 6e 42 79 74 65 20 29 3b 0a  rt( i==nByte );.
13bf0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
13c00 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
13c10 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f  =p->nMem );.  pO
13c20 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79  ut->n = (int)nBy
13c30 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  te;.  pOut->flag
13c40 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c 20 4d  s = MEM_Blob | M
13c50 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75 74 2d 3e  EM_Dyn;.  pOut->
13c60 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20  xDel = 0;.  if( 
13c70 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75  nZero ){.    pOu
13c80 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65  t->u.nZero = nZe
13c90 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ro;.    pOut->fl
13ca0 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b  ags |= MEM_Zero;
13cb0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  .  }.  pOut->enc
13cc0 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20   = SQLITE_UTF8; 
13cd0 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20   /* In case the 
13ce0 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e  blob is ever con
13cf0 76 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a  verted to text *
13d00 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  /.  REGISTER_TRA
13d10 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74  CE(pOp->p3, pOut
13d20 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
13d30 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
13d40 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
13d50 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20  pcode: Count P1 
13d60 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  P2 * * *.**.** S
13d70 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20  tore the number 
13d80 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69  of entries (an i
13d90 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e  nteger value) in
13da0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
13db0 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62  dex .** opened b
13dc0 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72  y cursor P1 in r
13dd0 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69  egister P2.*/.#i
13de0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
13df0 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73  T_BTREECOUNT.cas
13e00 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20  e OP_Count: {   
13e10 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
13e20 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36  erelease */.  i6
13e30 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75  4 nEntry;.  BtCu
13e40 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20  rsor *pCrsr;..  
13e50 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72  pCrsr = p->apCsr
13e60 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75 72 73  [pOp->p1]->pCurs
13e70 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 20  or;.  if( pCrsr 
13e80 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
13e90 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43  te3BtreeCount(pC
13ea0 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20  rsr, &nEntry);. 
13eb0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 45 6e 74   }else{.    nEnt
13ec0 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 4f  ry = 0;.  }.  pO
13ed0 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79  ut->u.i = nEntry
13ee0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
13ef0 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
13f00 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a  Savepoint P1 * *
13f10 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e   P4 *.**.** Open
13f20 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c  , release or rol
13f30 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f  lback the savepo
13f40 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72  int named by par
13f50 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e  ameter P4, depen
13f60 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76  ding.** on the v
13f70 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f  alue of P1. To o
13f80 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f  pen a new savepo
13f90 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72  int, P1==0. To r
13fa0 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
13fb0 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73  an.** existing s
13fc0 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c  avepoint, P1==1,
13fd0 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20   or to rollback 
13fe0 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  an existing save
13ff0 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a  point P1==2..*/.
14000 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e  case OP_Savepoin
14010 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20  t: {.  int p1;  
14020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14030 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
14040 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f  of P1 operand */
14050 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
14060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14070 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61     /* Name of sa
14080 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74  vepoint */.  int
14090 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f   nName;.  Savepo
140a0 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76  int *pNew;.  Sav
140b0 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
140c0 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  nt;.  Savepoint 
140d0 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61  *pTmp;.  int iSa
140e0 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69  vepoint;.  int i
140f0 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  i;..  p1 = pOp->
14100 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f  p1;.  zName = pO
14110 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41  p->p4.z;..  /* A
14120 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
14130 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76  1 parameter is v
14140 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20  alid. Also that 
14150 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  if there is no o
14160 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  pen.  ** transac
14170 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65  tion, then there
14180 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73   cannot be any s
14190 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f  avepoints. .  */
141a0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
141b0 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20  Savepoint==0 || 
141c0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
141d0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
141e0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  1==SAVEPOINT_BEG
141f0 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  IN||p1==SAVEPOIN
14200 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53  T_RELEASE||p1==S
14210 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
14220 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  K );.  assert( d
14230 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c  b->pSavepoint ||
14240 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
14250 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29  onSavepoint==0 )
14260 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63  ;.  assert( chec
14270 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
14280 64 62 29 20 29 3b 0a 0a 20 20 69 66 28 20 70 31  db) );..  if( p1
14290 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  ==SAVEPOINT_BEGI
142a0 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d  N ){.    if( db-
142b0 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20  >writeVdbeCnt>0 
142c0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65  ){.      /* A ne
142d0 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e  w savepoint cann
142e0 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 69 66  ot be created if
142f0 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
14300 65 20 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a  e write .      *
14310 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e  * statements (i.
14320 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69  e. open read/wri
14330 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62  te incremental b
14340 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20  lob handles)..  
14350 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
14360 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
14370 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
14380 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65  cannot open save
14390 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20  point - ".      
143a0 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74    "SQL statement
143b0 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
143c0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
143d0 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
143e0 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20  se{.      nName 
143f0 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
14400 30 28 7a 4e 61 6d 65 29 3b 0a 0a 20 20 20 20 20  0(zName);..     
14410 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77   /* Create a new
14420 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63   savepoint struc
14430 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70  ture. */.      p
14440 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  New = sqlite3DbM
14450 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a  allocRaw(db, siz
14460 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e  eof(Savepoint)+n
14470 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69  Name+1);.      i
14480 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20  f( pNew ){.     
14490 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d     pNew->zName =
144a0 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31   (char *)&pNew[1
144b0 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70  ];.        memcp
144c0 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a  y(pNew->zName, z
144d0 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a  Name, nName+1);.
144e0 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20      .        /* 
144f0 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  If there is no o
14500 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  pen transaction,
14510 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20   then mark this 
14520 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20  as a special.   
14530 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63       ** "transac
14540 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e  tion savepoint".
14550 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
14560 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
14570 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
14580 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
14590 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73            db->is
145a0 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
145b0 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  oint = 1;.      
145c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
145d0 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
145e0 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t++;.        }. 
145f0 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c     .        /* L
14600 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65  ink the new save
14610 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64  point into the d
14620 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73  atabase handle's
14630 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20   list. */.      
14640 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20    pNew->pNext = 
14650 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
14660 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
14670 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20  epoint = pNew;. 
14680 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65         pNew->nDe
14690 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d  ferredCons = db-
146a0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
146b0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
146c0 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65  }else{.    iSave
146d0 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20  point = 0;..    
146e0 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65  /* Find the name
146f0 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  d savepoint. If 
14700 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68  there is no such
14710 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e   savepoint, then
14720 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72   an.    ** an er
14730 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20  ror is returned 
14740 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f  to the user.  */
14750 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20  .    for(.      
14760 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d  pSavepoint = db-
14770 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20  >pSavepoint; .  
14780 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26      pSavepoint &
14790 26 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  & sqlite3StrICmp
147a0 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61  (pSavepoint->zNa
147b0 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  me, zName);.    
147c0 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70    pSavepoint = p
147d0 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
147e0 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53  .    ){.      iS
147f0 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
14800 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61 76 65  }.    if( !pSave
14810 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  point ){.      s
14820 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
14830 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
14840 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f   "no such savepo
14850 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29  int: %s", zName)
14860 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
14870 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
14880 65 6c 73 65 20 69 66 28 20 0a 20 20 20 20 20 20  else if( .      
14890 20 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43    db->writeVdbeC
148a0 6e 74 3e 30 20 7c 7c 20 28 70 31 3d 3d 53 41 56  nt>0 || (p1==SAV
148b0 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
148c0 26 26 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62  && db->activeVdb
148d0 65 43 6e 74 3e 31 29 20 0a 20 20 20 20 29 7b 0a  eCnt>1) .    ){.
148e0 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e        /* It is n
148f0 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72  ot possible to r
14900 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
14910 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74  a savepoint if t
14920 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20 20  here are .      
14930 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65 20  ** active write 
14940 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 74 20 69  statements. It i
14950 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74  s not possible t
14960 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 20 73 61 76  o rollback a sav
14970 65 70 6f 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20  epoint.      ** 
14980 69 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  if there are any
14990 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
149a0 74 73 20 61 74 20 61 6c 6c 2e 0a 20 20 20 20 20  ts at all..     
149b0 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
149c0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
149d0 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20  ErrMsg, db, .   
149e0 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 25 73 20       "cannot %s 
149f0 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20  savepoint - SQL 
14a00 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
14a10 6f 67 72 65 73 73 22 2c 0a 20 20 20 20 20 20 20  ogress",.       
14a20 20 28 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f   (p1==SAVEPOINT_
14a30 52 4f 4c 4c 42 41 43 4b 20 3f 20 22 72 6f 6c 6c  ROLLBACK ? "roll
14a40 62 61 63 6b 22 3a 20 22 72 65 6c 65 61 73 65 22  back": "release"
14a50 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ).      );.     
14a60 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
14a70 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20  Y;.    }else{.. 
14a80 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e       /* Determin
14a90 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
14aa0 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73   this is a trans
14ab0 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
14ac0 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a  . If so,.      *
14ad0 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20  * and this is a 
14ae0 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c  RELEASE command,
14af0 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e   then the curren
14b00 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20  t transaction . 
14b10 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69       ** is commi
14b20 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a  tted. .      */.
14b30 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e        int isTran
14b40 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70  saction = pSavep
14b50 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26  oint->pNext==0 &
14b60 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  & db->isTransact
14b70 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ionSavepoint;.  
14b80 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73 61      if( isTransa
14b90 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56  ction && p1==SAV
14ba0 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
14bb0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 72  {.        if( (r
14bc0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
14bd0 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53  heckFk(p, 1))!=S
14be0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
14bf0 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
14c00 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
14c10 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  }.        db->au
14c20 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
14c30 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
14c40 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51  3VdbeHalt(p)==SQ
14c50 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
14c60 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70         p->pc = p
14c70 63 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  c;.          db-
14c80 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b  >autoCommit = 0;
14c90 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63  .          p->rc
14ca0 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
14cb0 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67  USY;.          g
14cc0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
14cd0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
14ce0 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
14cf0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
14d00 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  0;.        rc = 
14d10 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c  p->rc;.      }el
14d20 73 65 7b 0a 20 20 20 20 20 20 20 20 69 53 61 76  se{.        iSav
14d30 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  epoint = db->nSa
14d40 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70  vepoint - iSavep
14d50 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20  oint - 1;.      
14d60 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
14d70 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
14d80 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
14d90 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f  lite3BtreeSavepo
14da0 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  int(db->aDb[ii].
14db0 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  pBt, p1, iSavepo
14dc0 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  int);.          
14dd0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
14de0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  K ){.           
14df0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
14e00 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
14e10 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
14e20 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
14e30 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
14e40 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73  CK && (db->flags
14e50 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68  &SQLITE_InternCh
14e60 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20 20 20  anges)!=0 ){.   
14e70 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
14e80 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
14e90 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
14ea0 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
14eb0 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61  etInternalSchema
14ec0 28 64 62 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  (db, 0);.       
14ed0 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20   }.      }.  .  
14ee0 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73      /* Regardles
14ef0 73 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69  s of whether thi
14f00 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f  s is a RELEASE o
14f10 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74  r ROLLBACK, dest
14f20 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a  roy all .      *
14f30 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73  * savepoints nes
14f40 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68  ted inside of th
14f50 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  e savepoint bein
14f60 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a  g operated on. *
14f70 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64  /.      while( d
14f80 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70  b->pSavepoint!=p
14f90 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
14fa0 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e       pTmp = db->
14fb0 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
14fc0 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
14fd0 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74  nt = pTmp->pNext
14fe0 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
14ff0 33 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70  3DbFree(db, pTmp
15000 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
15010 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
15020 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
15030 66 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53  f it is a RELEAS
15040 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20  E, then destroy 
15050 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
15060 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20  ing operated on 
15070 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49  .      ** too. I
15080 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41  f it is a ROLLBA
15090 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20  CK TO, then set 
150a0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65  the number of de
150b0 66 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a  ferred .      **
150c0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
150d0 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69  ations present i
150e0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
150f0 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  o the value stor
15100 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e  ed.      ** when
15110 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77   the savepoint w
15120 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a  as created.  */.
15130 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41        if( p1==SA
15140 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
15150 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
15160 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64  t( pSavepoint==d
15170 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b  b->pSavepoint );
15180 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
15190 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70  vepoint = pSavep
151a0 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20  oint->pNext;.   
151b0 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
151c0 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e  ee(db, pSavepoin
151d0 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
151e0 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29  !isTransaction )
151f0 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
15200 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20  nSavepoint--;.  
15210 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
15220 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d  lse{.        db-
15230 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d  >nDeferredCons =
15240 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65   pSavepoint->nDe
15250 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
15260 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20    }.    }.  }.. 
15270 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
15280 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74  code: AutoCommit
15290 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
152a0 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62  ** Set the datab
152b0 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  ase auto-commit 
152c0 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72  flag to P1 (1 or
152d0 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72   0). If P2 is tr
152e0 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b  ue, roll.** back
152f0 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61   any currently a
15300 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e  ctive btree tran
15310 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65  sactions. If the
15320 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
15330 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20  e.** VMs (apart 
15340 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20  from this one), 
15350 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20  then a ROLLBACK 
15360 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54  fails.  A COMMIT
15370 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65   fails if.** the
15380 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
15390 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74  iting VMs or act
153a0 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65  ive VMs that use
153b0 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a   shared cache..*
153c0 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
153d0 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ction causes the
153e0 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a   VM to halt..*/.
153f0 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d  case OP_AutoComm
15400 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69  it: {.  int desi
15410 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  redAutoCommit;. 
15420 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a   int iRollback;.
15430 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a    int turnOnAC;.
15440 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  .  desiredAutoCo
15450 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  mmit = pOp->p1;.
15460 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f    iRollback = pO
15470 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41  p->p2;.  turnOnA
15480 43 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43  C = desiredAutoC
15490 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75  ommit && !db->au
154a0 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65  toCommit;.  asse
154b0 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
154c0 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69  ommit==1 || desi
154d0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  redAutoCommit==0
154e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65   );.  assert( de
154f0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
15500 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d  =1 || iRollback=
15510 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
15520 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e  db->activeVdbeCn
15530 74 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65  t>0 );  /* At le
15540 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20  ast this one VM 
15550 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 0a 20 20  is active */..  
15560 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20  if( turnOnAC && 
15570 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d  iRollback && db-
15580 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31  >activeVdbeCnt>1
15590 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
155a0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
155b0 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c  mplements a ROLL
155c0 42 41 43 4b 20 61 6e 64 20 6f 74 68 65 72 20 56  BACK and other V
155d0 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 73 74  Ms are.    ** st
155e0 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64  ill running, and
155f0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
15600 73 20 61 63 74 69 76 65 2c 20 72 65 74 75 72 6e  s active, return
15610 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61   an error indica
15620 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61 74  ting.    ** that
15630 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d   the other VMs m
15640 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72  ust complete fir
15650 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20  st. .    */.    
15660 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
15670 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
15680 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  , "cannot rollba
15690 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d  ck transaction -
156a0 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20   ".        "SQL 
156b0 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
156c0 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63  ogress");.    rc
156d0 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
156e0 20 20 7d 65 6c 73 65 20 69 66 28 20 74 75 72 6e    }else if( turn
156f0 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c 62 61  OnAC && !iRollba
15700 63 6b 20 26 26 20 64 62 2d 3e 77 72 69 74 65 56  ck && db->writeV
15710 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20 20  dbeCnt>0 ){.    
15720 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  /* If this instr
15730 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  uction implement
15740 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f  s a COMMIT and o
15750 74 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69  ther VMs are wri
15760 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74 75  ting.    ** retu
15770 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69  rn an error indi
15780 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20  cating that the 
15790 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63  other VMs must c
157a0 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a  omplete first. .
157b0 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
157c0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
157d0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61  zErrMsg, db, "ca
157e0 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e  nnot commit tran
157f0 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20  saction - ".    
15800 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
15810 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
15820 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
15830 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
15840 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f   if( desiredAuto
15850 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f  Commit!=db->auto
15860 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66  Commit ){.    if
15870 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20  ( iRollback ){. 
15880 20 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73       assert( des
15890 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
158a0 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  1 );.      sqlit
158b0 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62  e3RollbackAll(db
158c0 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  );.      db->aut
158d0 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20  oCommit = 1;.   
158e0 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d   }else if( (rc =
158f0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
15900 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49  kFk(p, 1))!=SQLI
15910 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
15920 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
15930 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
15940 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
15950 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75   = (u8)desiredAu
15960 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20  toCommit;.      
15970 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48  if( sqlite3VdbeH
15980 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42  alt(p)==SQLITE_B
15990 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70  USY ){.        p
159a0 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
159b0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
159c0 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72  t = (u8)(1-desir
159d0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20  edAutoCommit);. 
159e0 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
159f0 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
15a00 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64  .        goto vd
15a10 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
15a20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73   }.    }.    ass
15a30 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
15a40 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  ent==0 );.    sq
15a50 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
15a60 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66  ints(db);.    if
15a70 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
15a80 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
15a90 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
15aa0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
15ab0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
15ac0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
15ad0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
15ae0 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
15af0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
15b00 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20  zErrMsg, db,.   
15b10 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75       (!desiredAu
15b20 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f  toCommit)?"canno
15b30 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61  t start a transa
15b40 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74  ction within a t
15b50 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20  ransaction":(.  
15b60 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b        (iRollback
15b70 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  )?"cannot rollba
15b80 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  ck - no transact
15b90 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a  ion is active":.
15ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bb0 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69     "cannot commi
15bc0 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  t - no transacti
15bd0 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b  on is active"));
15be0 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72  .         .    r
15bf0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
15c00 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
15c10 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61  ../* Opcode: Tra
15c20 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 2a  nsaction P1 P2 *
15c30 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e   * *.**.** Begin
15c40 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20   a transaction. 
15c50 20 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   The transaction
15c60 20 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f 6d   ends when a Com
15c70 6d 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a  mit or Rollback.
15c80 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e 63  ** opcode is enc
15c90 6f 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65 6e  ountered.  Depen
15ca0 64 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43  ding on the ON C
15cb0 4f 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67 2c  ONFLICT setting,
15cc0 20 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74   the.** transact
15cd0 69 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20 62  ion might also b
15ce0 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66  e rolled back if
15cf0 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63   an error is enc
15d00 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  ountered..**.** 
15d10 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
15d20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
15d30 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68  file on which th
15d40 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
15d50 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e  .** started.  In
15d60 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69  dex 0 is the mai
15d70 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
15d80 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74  and index 1 is t
15d90 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20  he.** file used 
15da0 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61  for temporary ta
15db0 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f  bles.  Indices o
15dc0 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20  f 2 or more are 
15dd0 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61  used for.** atta
15de0 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
15df0 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e  **.** If P2 is n
15e00 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  on-zero, then a 
15e10 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
15e20 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 41  n is started.  A
15e30 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20 69   RESERVED lock i
15e40 73 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e  s.** obtained on
15e50 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
15e60 6c 65 20 77 68 65 6e 20 61 20 77 72 69 74 65 2d  le when a write-
15e70 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
15e80 74 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f  tarted.  No.** o
15e90 74 68 65 72 20 70 72 6f 63 65 73 73 20 63 61 6e  ther process can
15ea0 20 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20 77   start another w
15eb0 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
15ec0 20 77 68 69 6c 65 20 74 68 69 73 20 74 72 61 6e   while this tran
15ed0 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e  saction is.** un
15ee0 64 65 72 77 61 79 2e 20 20 53 74 61 72 74 69 6e  derway.  Startin
15ef0 67 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61  g a write transa
15f00 63 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74  ction also creat
15f10 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  es a rollback jo
15f20 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74  urnal. A.** writ
15f30 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75  e transaction mu
15f40 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65  st be started be
15f50 66 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65 73  fore any changes
15f60 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20   can be made to 
15f70 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  the.** database.
15f80 20 20 49 66 20 50 32 20 69 73 20 32 20 6f 72 20    If P2 is 2 or 
15f90 67 72 65 61 74 65 72 20 74 68 65 6e 20 61 6e 20  greater then an 
15fa0 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69  EXCLUSIVE lock i
15fb0 73 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64 0a  s also obtained.
15fc0 2a 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a  ** on the file..
15fd0 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65  **.** If a write
15fe0 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
15ff0 73 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20  started and the 
16000 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75  Vdbe.usesStmtJou
16010 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20  rnal flag is.** 
16020 74 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20  true (this flag 
16030 69 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64  is set if the Vd
16040 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f  be may modify mo
16050 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20  re than one row 
16060 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77  and may.** throw
16070 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74   an ABORT except
16080 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e  ion), a statemen
16090 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
160a0 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64  y also be opened
160b0 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66  ..** More specif
160c0 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d  ically, a statem
160d0 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
160e0 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68  is opened iff th
160f0 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
16100 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72  nnection is curr
16110 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74  ently not in aut
16120 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72  ocommit mode, or
16130 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74   if there are ot
16140 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74  her.** active st
16150 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74  atements. A stat
16160 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
16170 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 61 66 66  n allows the aff
16180 65 63 74 73 20 6f 66 20 74 68 69 73 0a 2a 2a 20  ects of this.** 
16190 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65  VDBE to be rolle
161a0 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20  d back after an 
161b0 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61  error without ha
161c0 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63  ving to roll bac
161d0 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20  k the.** entire 
161e0 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20  transaction. If 
161f0 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  no error is enco
16200 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74 61  untered, the sta
16210 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
16220 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d  on.** will autom
16230 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20  atically commit 
16240 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61  when the VDBE ha
16250 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  lts..**.** If P2
16260 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61   is zero, then a
16270 20 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62   read-lock is ob
16280 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61  tained on the da
16290 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a  tabase file..*/.
162a0 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74  case OP_Transact
162b0 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a  ion: {.  Btree *
162c0 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pBt;..  assert( 
162d0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
162e0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
162f0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
16300 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
16310 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20  Op->p1))!=0 );. 
16320 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
16330 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20  Op->p1].pBt;..  
16340 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72  if( pBt ){.    r
16350 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
16360 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20  BeginTrans(pBt, 
16370 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66  pOp->p2);.    if
16380 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
16390 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y ){.      p->pc
163a0 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e   = pc;.      p->
163b0 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
163c0 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
163d0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
163e0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21     }.    if( rc!
163f0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
16400 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
16410 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
16420 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   }..    if( pOp-
16430 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53 74  >p2 && p->usesSt
16440 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20  mtJournal .     
16450 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  && (db->autoComm
16460 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 63 74  it==0 || db->act
16470 69 76 65 56 64 62 65 43 6e 74 3e 31 29 20 0a 20  iveVdbeCnt>1) . 
16480 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65     ){.      asse
16490 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
164a0 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29  IsInTrans(pBt) )
164b0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69  ;.      if( p->i
164c0 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a  Statement==0 ){.
164d0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
164e0 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d  db->nStatement>=
164f0 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f  0 && db->nSavepo
16500 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20  int>=0 );.      
16510 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74    db->nStatement
16520 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e  ++; .        p->
16530 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d  iStatement = db-
16540 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
16550 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20  ->nStatement;.  
16560 20 20 20 20 7d 0a 20 20 20 20 20 20 72 63 20 3d      }.      rc =
16570 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
16580 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69  inStmt(pBt, p->i
16590 53 74 61 74 65 6d 65 6e 74 29 3b 0a 0a 20 20 20  Statement);..   
165a0 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20     /* Store the 
165b0 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66  current value of
165c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
165d0 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20 63  ndles deferred c
165e0 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20  onstraint.      
165f0 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74  ** counter. If t
16600 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
16610 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74  nsaction needs t
16620 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
16630 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76  ,.      ** the v
16640 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75  alue of this cou
16650 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65  nter needs to be
16660 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20   restored too.  
16670 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d  */.      p->nStm
16680 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  tDefCons = db->n
16690 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
166a0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
166b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
166c0 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  eadCookie P1 P2 
166d0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  P3 * *.**.** Rea
166e0 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  d cookie number 
166f0 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65  P3 from database
16700 20 50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74   P1 and write it
16710 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
16720 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74  2..** P3==1 is t
16730 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
16740 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65  n.  P3==2 is the
16750 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
16760 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68  ..** P3==3 is th
16770 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
16780 67 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20  ger cache size, 
16790 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
167a0 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d  1==0 is.** the m
167b0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
167c0 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74  e and P1==1 is t
167d0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
167e0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a   used to store.*
167f0 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
16800 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  es..**.** There 
16810 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c  must be a read-l
16820 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
16830 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72  ase (either a tr
16840 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73  ansaction.** mus
16850 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20  t be started or 
16860 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e  there must be an
16870 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65   open cursor) be
16880 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e  fore.** executin
16890 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
168a0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  on..*/.case OP_R
168b0 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  eadCookie: {    
168c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
168d0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
168e0 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
168f0 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69  int iDb;.  int i
16900 43 6f 6f 6b 69 65 3b 0a 0a 20 20 69 44 62 20 3d  Cookie;..  iDb =
16910 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f   pOp->p1;.  iCoo
16920 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  kie = pOp->p3;. 
16930 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
16940 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f  <SQLITE_N_BTREE_
16950 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74  META );.  assert
16960 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
16970 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
16980 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62  ert( db->aDb[iDb
16990 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ].pBt!=0 );.  as
169a0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
169b0 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21  ask & (1<<iDb))!
169c0 3d 30 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33  =0 );..  sqlite3
169d0 42 74 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d  BtreeGetMeta(db-
169e0 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69  >aDb[iDb].pBt, i
169f0 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26  Cookie, (u32 *)&
16a00 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e  iMeta);.  pOut->
16a10 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62  u.i = iMeta;.  b
16a20 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
16a30 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31  de: SetCookie P1
16a40 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
16a50 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74 65   Write the conte
16a60 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
16a70 33 20 28 69 6e 74 65 72 70 72 65 74 65 64 20 61  3 (interpreted a
16a80 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a  s an integer).**
16a90 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d   into cookie num
16aa0 62 65 72 20 50 32 20 6f 66 20 64 61 74 61 62 61  ber P2 of databa
16ab0 73 65 20 50 31 2e 20 20 50 32 3d 3d 31 20 69 73  se P1.  P2==1 is
16ac0 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
16ad0 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20  ion.  .** P2==2 
16ae0 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
16af0 66 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73  format. P2==3 is
16b00 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64   the recommended
16b10 20 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a 2a   pager cache .**
16b20 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f   size, and so fo
16b30 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20 74  rth.  P1==0 is t
16b40 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
16b50 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
16b60 69 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61 62  is the .** datab
16b70 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
16b80 20 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79   store temporary
16b90 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41   tables..**.** A
16ba0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73   transaction mus
16bb0 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66  t be started bef
16bc0 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20 74 68  ore executing th
16bd0 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  is opcode..*/.ca
16be0 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a  se OP_SetCookie:
16bf0 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33 20   {       /* in3 
16c00 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20  */.  Db *pDb;.  
16c10 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
16c20 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d  SQLITE_N_BTREE_M
16c30 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ETA );.  assert(
16c40 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
16c50 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
16c60 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
16c70 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
16c80 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
16c90 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
16ca0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
16cb0 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
16cc0 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   );.  pIn3 = &aM
16cd0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73  em[pOp->p3];.  s
16ce0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
16cf0 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20  egerify(pIn3);. 
16d00 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f   /* See note abo
16d10 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e  ut index shiftin
16d20 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  g on OP_ReadCook
16d30 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  ie */.  rc = sql
16d40 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65 4d  ite3BtreeUpdateM
16d50 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f  eta(pDb->pBt, pO
16d60 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e 33  p->p2, (int)pIn3
16d70 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f  ->u.i);.  if( pO
16d80 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48  p->p2==BTREE_SCH
16d90 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20  EMA_VERSION ){. 
16da0 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73     /* When the s
16db0 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61  chema cookie cha
16dc0 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65  nges, record the
16dd0 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65   new cookie inte
16de0 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44  rnally */.    pD
16df0 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  b->pSchema->sche
16e00 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74  ma_cookie = (int
16e10 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20  )pIn3->u.i;.    
16e20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
16e30 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
16e40 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  s;.  }else if( p
16e50 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49  Op->p2==BTREE_FI
16e60 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20  LE_FORMAT ){.   
16e70 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67   /* Record chang
16e80 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66  es in the file f
16e90 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62  ormat */.    pDb
16ea0 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
16eb0 66 6f 72 6d 61 74 20 3d 20 28 75 38 29 70 49 6e  format = (u8)pIn
16ec0 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66  3->u.i;.  }.  if
16ed0 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a  ( pOp->p1==1 ){.
16ee0 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74      /* Invalidat
16ef0 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73  e all prepared s
16f00 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76  tatements whenev
16f10 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  er the TEMP data
16f20 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65  base.    ** sche
16f30 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20  ma is changed.  
16f40 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a  Ticket #1644 */.
16f50 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
16f60 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
16f70 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e  nts(db);.    p->
16f80 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d  expired = 0;.  }
16f90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
16fa0 4f 70 63 6f 64 65 3a 20 56 65 72 69 66 79 43 6f  Opcode: VerifyCo
16fb0 6f 6b 69 65 20 50 31 20 50 32 20 2a 0a 2a 2a 0a  okie P1 P2 *.**.
16fc0 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c  ** Check the val
16fd0 75 65 20 6f 66 20 67 6c 6f 62 61 6c 20 64 61 74  ue of global dat
16fe0 61 62 61 73 65 20 70 61 72 61 6d 65 74 65 72 20  abase parameter 
16ff0 6e 75 6d 62 65 72 20 30 20 28 74 68 65 0a 2a 2a  number 0 (the.**
17000 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 29   schema version)
17010 20 61 6e 64 20 6d 61 6b 65 20 73 75 72 65 20 69   and make sure i
17020 74 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50 32  t is equal to P2
17030 2e 20 20 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .  .** P1 is the
17040 20 64 61 74 61 62 61 73 65 20 6e 75 6d 62 65 72   database number
17050 20 77 68 69 63 68 20 69 73 20 30 20 66 6f 72 20   which is 0 for 
17060 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
17070 65 20 66 69 6c 65 0a 2a 2a 20 61 6e 64 20 31 20  e file.** and 1 
17080 66 6f 72 20 74 68 65 20 66 69 6c 65 20 68 6f 6c  for the file hol
17090 64 69 6e 67 20 74 65 6d 70 6f 72 61 72 79 20 74  ding temporary t
170a0 61 62 6c 65 73 20 61 6e 64 20 73 6f 6d 65 20 68  ables and some h
170b0 69 67 68 65 72 20 6e 75 6d 62 65 72 0a 2a 2a 20  igher number.** 
170c0 66 6f 72 20 61 75 78 69 6c 69 61 72 79 20 64 61  for auxiliary da
170d0 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 54  tabases..**.** T
170e0 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65  he cookie change
170f0 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e  s its value when
17100 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73  ever the databas
17110 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
17120 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  ..** This operat
17130 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64  ion is used to d
17140 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74 20  etect when that 
17150 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63  the cookie has c
17160 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68  hanged.** and th
17170 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  at the current p
17180 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20  rocess needs to 
17190 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65 6d  reread the schem
171a0 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65 72 20  a..**.** Either 
171b0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65  a transaction ne
171c0 65 64 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e  eds to have been
171d0 20 73 74 61 72 74 65 64 20 6f 72 20 61 6e 20 4f   started or an O
171e0 50 5f 4f 70 65 6e 20 6e 65 65 64 73 0a 2a 2a 20  P_Open needs.** 
171f0 74 6f 20 62 65 20 65 78 65 63 75 74 65 64 20 28  to be executed (
17200 74 6f 20 65 73 74 61 62 6c 69 73 68 20 61 20 72  to establish a r
17210 65 61 64 20 6c 6f 63 6b 29 20 62 65 66 6f 72 65  ead lock) before
17220 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 0a   this opcode is.
17230 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f 0a 63  ** invoked..*/.c
17240 61 73 65 20 4f 50 5f 56 65 72 69 66 79 43 6f 6f  ase OP_VerifyCoo
17250 6b 69 65 3a 20 7b 0a 20 20 69 6e 74 20 69 4d 65  kie: {.  int iMe
17260 74 61 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  ta;.  Btree *pBt
17270 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
17280 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
17290 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
172a0 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
172b0 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
172c0 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74  p1))!=0 );.  pBt
172d0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
172e0 70 31 5d 2e 70 42 74 3b 0a 20 20 69 66 28 20 70  p1].pBt;.  if( p
172f0 42 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  Bt ){.    sqlite
17300 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42  3BtreeGetMeta(pB
17310 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f  t, BTREE_SCHEMA_
17320 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29  VERSION, (u32 *)
17330 26 69 4d 65 74 61 29 3b 0a 20 20 7d 65 6c 73 65  &iMeta);.  }else
17340 7b 0a 20 20 20 20 69 4d 65 74 61 20 3d 20 30 3b  {.    iMeta = 0;
17350 0a 20 20 7d 0a 20 20 69 66 28 20 69 4d 65 74 61  .  }.  if( iMeta
17360 21 3d 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20  !=pOp->p2 ){.   
17370 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
17380 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
17390 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d      p->zErrMsg =
173a0 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70   sqlite3DbStrDup
173b0 28 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73  (db, "database s
173c0 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
173d0 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74  d");.    /* If t
173e0 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65  he schema-cookie
173f0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
17400 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20  se file matches 
17410 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20  the cookie .    
17420 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74  ** stored with t
17430 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70  he in-memory rep
17440 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
17450 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20  he schema, do.  
17460 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20    ** not reload 
17470 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20  the schema from 
17480 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
17490 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  e..    **.    **
174a0 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c   If virtual-tabl
174b0 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74  es are in use, t
174c0 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20  his is not just 
174d0 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e  an optimization.
174e0 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76  .    ** Often, v
174f0 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68  -tables store th
17500 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65  eir data in othe
17510 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c  r SQLite tables,
17520 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72   which.    ** ar
17530 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77  e queried from w
17540 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e  ithin xNext() an
17550 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20  d other v-table 
17560 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20  methods using.  
17570 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75    ** prepared qu
17580 65 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61  eries. If such a
17590 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66   query is out-of
175a0 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74  -date, we do not
175b0 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20   want to.    ** 
175c0 64 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61  discard the data
175d0 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20  base schema, as 
175e0 74 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d  the user code im
175f0 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20  plementing the. 
17600 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f     ** v-table wo
17610 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72  uld have to be r
17620 65 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c  eady for the sql
17630 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
17640 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a  ure itself.    *
17650 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61  * to be invalida
17660 74 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c  ted whenever sql
17670 69 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63  ite3_step() is c
17680 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
17690 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61  n .    ** a v-ta
176a0 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20  ble method..    
176b0 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61  */.    if( db->a
176c0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68  Db[pOp->p1].pSch
176d0 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b  ema->schema_cook
176e0 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20  ie!=iMeta ){.   
176f0 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49     sqlite3ResetI
17700 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62  nternalSchema(db
17710 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
17720 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78  }..    sqlite3Ex
17730 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
17740 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
17750 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45  rc = SQLITE_SCHE
17760 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  MA;.  }.  break;
17770 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
17780 70 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33  penRead P1 P2 P3
17790 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65   P4 P5.**.** Ope
177a0 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75  n a read-only cu
177b0 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74  rsor for the dat
177c0 61 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73  abase table whos
177d0 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a  e root page is.*
177e0 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61 62 61  * P2 in a databa
177f0 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61  se file.  The da
17800 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 64  tabase file is d
17810 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e  etermined by P3.
17820 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73   .** P3==0 means
17830 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
17840 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20  se, P3==1 means 
17850 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65  the database use
17860 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72  d for .** tempor
17870 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20  ary tables, and 
17880 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20  P3>1 means used 
17890 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
178a0 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61  g attached.** da
178b0 74 61 62 61 73 65 2e 20 20 47 69 76 65 20 74 68  tabase.  Give th
178c0 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20  e new cursor an 
178d0 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31  identifier of P1
178e0 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c  .  The P1.** val
178f0 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20  ues need not be 
17900 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61  contiguous but a
17910 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f  ll P1 values sho
17920 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74  uld be small int
17930 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20  egers..** It is 
17940 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20  an error for P1 
17950 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a  to be negative..
17960 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74  **.** If P5!=0 t
17970 68 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74  hen use the cont
17980 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
17990 50 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70  P2 as the root p
179a0 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20  age, not.** the 
179b0 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65  value of P2 itse
179c0 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  lf..**.** There 
179d0 77 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c  will be a read l
179e0 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
179f0 61 73 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  ase whenever the
17a00 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e  re is an.** open
17a10 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65   cursor.  If the
17a20 20 64 61 74 61 62 61 73 65 20 77 61 73 20 75 6e   database was un
17a30 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20  locked prior to 
17a40 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
17a50 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20  .** then a read 
17a60 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64  lock is acquired
17a70 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73   as part of this
17a80 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41   instruction.  A
17a90 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c   read.** lock al
17aa0 6c 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65  lows other proce
17ab0 73 73 65 73 20 74 6f 20 72 65 61 64 20 74 68 65  sses to read the
17ac0 20 64 61 74 61 62 61 73 65 20 62 75 74 20 70 72   database but pr
17ad0 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f  ohibits.** any o
17ae0 74 68 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f  ther process fro
17af0 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20  m modifying the 
17b00 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 72  database.  The r
17b10 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72  ead lock is.** r
17b20 65 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c  eleased when all
17b30 20 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f   cursors are clo
17b40 73 65 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e  sed.  If this in
17b50 73 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70  struction attemp
17b60 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72  ts.** to get a r
17b70 65 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69  ead lock but fai
17b80 6c 73 2c 20 74 68 65 20 73 63 72 69 70 74 20 74  ls, the script t
17b90 65 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61  erminates with a
17ba0 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59  n.** SQLITE_BUSY
17bb0 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a   error code..**.
17bc0 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
17bd0 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e  may be either an
17be0 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54   integer (P4_INT
17bf0 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72  32) or a pointer
17c00 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f   to.** a KeyInfo
17c10 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b   structure (P4_K
17c20 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69  EYINFO). If it i
17c30 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
17c40 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72   KeyInfo .** str
17c50 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69  ucture, then sai
17c60 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69  d structure defi
17c70 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  nes the content 
17c80 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a  and collating .*
17c90 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  * sequence of th
17ca0 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70  e index being op
17cb0 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ened. Otherwise,
17cc0 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74   if P4 is an int
17cd0 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20  eger .** value, 
17ce0 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  it is set to the
17cf0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
17d00 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
17d10 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20  .**.** See also 
17d20 4f 70 65 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a  OpenWrite..*/./*
17d30 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69   Opcode: OpenWri
17d40 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
17d50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  5.**.** Open a r
17d60 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
17d70 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65   named P1 on the
17d80 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
17d90 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61  whose root.** pa
17da0 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66  ge is P2.  Or if
17db0 20 50 35 21 3d 30 20 75 73 65 20 74 68 65 20 63   P5!=0 use the c
17dc0 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
17dd0 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68  er P2 to find th
17de0 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a  e.** root page..
17df0 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  **.** The P4 val
17e00 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72  ue may be either
17e10 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f   an integer (P4_
17e20 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e  INT32) or a poin
17e30 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49  ter to.** a KeyI
17e40 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50  nfo structure (P
17e50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69  4_KEYINFO). If i
17e60 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  t is a pointer t
17e70 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20  o a KeyInfo .** 
17e80 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20  structure, then 
17e90 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64  said structure d
17ea0 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65  efines the conte
17eb0 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  nt and collating
17ec0 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66   .** sequence of
17ed0 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67   the index being
17ee0 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69   opened. Otherwi
17ef0 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20  se, if P4 is an 
17f00 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75  integer .** valu
17f10 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  e, it is set to 
17f20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
17f30 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
17f40 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a  le, or to the.**
17f50 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f   largest index o
17f60 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20  f any column of 
17f70 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
17f80 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e  s actually used.
17f90 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
17fa0 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75  ruction works ju
17fb0 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64  st like OpenRead
17fc0 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
17fd0 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72  opens the cursor
17fe0 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74  .** in read/writ
17ff0 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67  e mode.  For a g
18000 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72  iven table, ther
18010 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20  e can be one or 
18020 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a  more read-only.*
18030 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73  * cursors or a s
18040 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65  ingle read/write
18050 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20   cursor but not 
18060 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  both..**.** See 
18070 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a  also OpenRead..*
18080 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65  /.case OP_OpenRe
18090 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  ad:.case OP_Open
180a0 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 6e  Write: {.  int n
180b0 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f  Field;.  KeyInfo
180c0 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
180d0 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b  t p2;.  int iDb;
180e0 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20  .  int wrFlag;. 
180f0 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64   Btree *pX;.  Vd
18100 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
18110 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 69 66    Db *pDb;..  if
18120 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a  ( p->expired ){.
18130 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
18140 41 42 4f 52 54 3b 0a 20 20 20 20 62 72 65 61 6b  ABORT;.    break
18150 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20  ;.  }..  nField 
18160 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20  = 0;.  pKeyInfo 
18170 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  = 0;.  p2 = pOp-
18180 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70  >p2;.  iDb = pOp
18190 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
181a0 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
181b0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
181c0 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
181d0 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20   & (1<<iDb))!=0 
181e0 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
181f0 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d  aDb[iDb];.  pX =
18200 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73   pDb->pBt;.  ass
18210 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20  ert( pX!=0 );.  
18220 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
18230 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b  =OP_OpenWrite ){
18240 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 31 3b  .    wrFlag = 1;
18250 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53  .    if( pDb->pS
18260 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
18270 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65  at < p->minWrite
18280 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20  FileFormat ){.  
18290 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46      p->minWriteF
182a0 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d  ileFormat = pDb-
182b0 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
182c0 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  ormat;.    }.  }
182d0 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67  else{.    wrFlag
182e0 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 0;.  }.  if( 
182f0 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 61  pOp->p5 ){.    a
18300 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20  ssert( p2>0 );. 
18310 20 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d 70     assert( p2<=p
18320 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 70 49  ->nMem );.    pI
18330 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a  n2 = &aMem[p2];.
18340 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
18350 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
18360 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e  2);.    p2 = (in
18370 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20  t)pIn2->u.i;.   
18380 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65   /* The p2 value
18390 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72   always comes fr
183a0 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72  om a prior OP_Cr
183b0 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65  eateTable opcode
183c0 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74   and.    ** that
183d0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77   opcode will alw
183e0 61 79 73 20 73 65 74 20 74 68 65 20 70 32 20 76  ays set the p2 v
183f0 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72  alue to 2 or mor
18400 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a  e or else fail..
18410 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20      ** If there 
18420 77 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20  were a failure, 
18430 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
18440 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76  tement would hav
18450 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20  e halted.    ** 
18460 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20  before reaching 
18470 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
18480 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45 56  . */.    if( NEV
18490 45 52 28 70 32 3c 32 29 20 29 20 7b 0a 20 20 20  ER(p2<2) ) {.   
184a0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
184b0 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
184c0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
184d0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
184e0 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  }.  }.  if( pOp-
184f0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
18500 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49  NFO ){.    pKeyI
18510 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
18520 65 79 49 6e 66 6f 3b 0a 20 20 20 20 70 4b 65 79  eyInfo;.    pKey
18530 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28  Info->enc = ENC(
18540 70 2d 3e 64 62 29 3b 0a 20 20 20 20 6e 46 69 65  p->db);.    nFie
18550 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  ld = pKeyInfo->n
18560 46 69 65 6c 64 2b 31 3b 0a 20 20 7d 65 6c 73 65  Field+1;.  }else
18570 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
18580 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20  ==P4_INT32 ){.  
18590 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
185a0 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65  p4.i;.  }.  asse
185b0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
185c0 3b 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63  ;.  pCur = alloc
185d0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
185e0 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44  ->p1, nField, iD
185f0 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75  b, 1);.  if( pCu
18600 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  r==0 ) goto no_m
18610 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c  em;.  pCur->null
18620 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  Row = 1;.  rc = 
18630 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
18640 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61  or(pX, p2, wrFla
18650 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75  g, pKeyInfo, pCu
18660 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70  r->pCursor);.  p
18670 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  Cur->pKeyInfo = 
18680 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 2f 2a 20  pKeyInfo;..  /* 
18690 53 69 6e 63 65 20 69 74 20 70 65 72 66 6f 72 6d  Since it perform
186a0 73 20 6e 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  s no memory allo
186b0 63 61 74 69 6f 6e 20 6f 72 20 49 4f 2c 20 74 68  cation or IO, th
186c0 65 20 6f 6e 6c 79 20 76 61 6c 75 65 73 20 74 68  e only values th
186d0 61 74 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 42  at.  ** sqlite3B
186e0 74 72 65 65 43 75 72 73 6f 72 28 29 20 6d 61 79  treeCursor() may
186f0 20 72 65 74 75 72 6e 20 61 72 65 20 53 51 4c 49   return are SQLI
18700 54 45 5f 45 4d 50 54 59 20 61 6e 64 20 53 51 4c  TE_EMPTY and SQL
18710 49 54 45 5f 4f 4b 2e 20 0a 20 20 2a 2a 20 53 51  ITE_OK. .  ** SQ
18720 4c 49 54 45 5f 45 4d 50 54 59 20 69 73 20 6f 6e  LITE_EMPTY is on
18730 6c 79 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e  ly returned when
18740 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 6f   attempting to o
18750 70 65 6e 20 74 68 65 20 74 61 62 6c 65 0a 20 20  pen the table.  
18760 2a 2a 20 72 6f 6f 74 65 64 20 61 74 20 70 61 67  ** rooted at pag
18770 65 20 31 20 6f 66 20 61 20 7a 65 72 6f 2d 62 79  e 1 of a zero-by
18780 74 65 20 64 61 74 61 62 61 73 65 2e 20 20 2a 2f  te database.  */
18790 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
187a0 51 4c 49 54 45 5f 45 4d 50 54 59 20 7c 7c 20 72  QLITE_EMPTY || r
187b0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
187c0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
187d0 5f 45 4d 50 54 59 20 29 7b 0a 20 20 20 20 70 43  _EMPTY ){.    pC
187e0 75 72 2d 3e 70 43 75 72 73 6f 72 20 3d 20 30 3b  ur->pCursor = 0;
187f0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
18800 5f 4f 4b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 53  _OK;.  }..  /* S
18810 65 74 20 74 68 65 20 56 64 62 65 43 75 72 73 6f  et the VdbeCurso
18820 72 2e 69 73 54 61 62 6c 65 20 61 6e 64 20 69 73  r.isTable and is
18830 49 6e 64 65 78 20 76 61 72 69 61 62 6c 65 73 2e  Index variables.
18840 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f   Previous versio
18850 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74  ns of.  ** SQLit
18860 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20  e used to check 
18870 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65  if the root-page
18880 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65   flags were sane
18890 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20   at this point. 
188a0 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64   ** and report d
188b0 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69  atabase corrupti
188c0 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65 20  on if they were 
188d0 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63 68  not, but this ch
188e0 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e  eck has.  ** sin
188f0 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68  ce moved into th
18900 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20  e btree layer.  
18910 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54  */  .  pCur->isT
18920 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79  able = pOp->p4ty
18930 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a  pe!=P4_KEYINFO;.
18940 20 20 70 43 75 72 2d 3e 69 73 49 6e 64 65 78 20    pCur->isIndex 
18950 3d 20 21 70 43 75 72 2d 3e 69 73 54 61 62 6c 65  = !pCur->isTable
18960 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
18970 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68   Opcode: OpenEph
18980 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50  emeral P1 P2 * P
18990 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  4 *.**.** Open a
189a0 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74   new cursor P1 t
189b0 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  o a transient ta
189c0 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
189d0 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65  or is always ope
189e0 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65  ned read/write e
189f0 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d  ven if .** the m
18a00 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
18a10 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20  read-only.  The 
18a20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62  ephemeral.** tab
18a30 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75  le is deleted au
18a40 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e  tomatically when
18a50 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
18a60 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  losed..**.** P2 
18a70 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
18a80 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
18a90 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e  ephemeral table.
18aa0 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70  .** The cursor p
18ab0 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65  oints to a BTree
18ac0 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20   table if P4==0 
18ad0 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69  and to a BTree i
18ae0 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73  ndex.** if P4 is
18af0 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69   not 0.  If P4 i
18b00 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70  s not NULL, it p
18b10 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e  oints to a KeyIn
18b20 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  fo structure.** 
18b30 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
18b40 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20   format of keys 
18b50 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a  in the index..**
18b60 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
18b70 77 61 73 20 6f 6e 63 65 20 63 61 6c 6c 65 64 20  was once called 
18b80 4f 70 65 6e 54 65 6d 70 2e 20 20 42 75 74 20 74  OpenTemp.  But t
18b90 68 61 74 20 63 72 65 61 74 65 64 0a 2a 2a 20 63  hat created.** c
18ba0 6f 6e 66 75 73 69 6f 6e 20 62 65 63 61 75 73 65  onfusion because
18bb0 20 74 68 65 20 74 65 72 6d 20 22 74 65 6d 70 20   the term "temp 
18bc0 74 61 62 6c 65 22 2c 20 6d 69 67 68 74 20 72 65  table", might re
18bd0 66 65 72 20 65 69 74 68 65 72 0a 2a 2a 20 74 6f  fer either.** to
18be0 20 61 20 54 45 4d 50 20 74 61 62 6c 65 20 61 74   a TEMP table at
18bf0 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20   the SQL level, 
18c00 6f 72 20 74 6f 20 61 20 74 61 62 6c 65 20 6f 70  or to a table op
18c10 65 6e 65 64 20 62 79 0a 2a 2a 20 74 68 69 73 20  ened by.** this 
18c20 6f 70 63 6f 64 65 2e 20 20 54 68 65 6e 20 74 68  opcode.  Then th
18c30 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20 63 61  is opcode was ca
18c40 6c 6c 20 4f 70 65 6e 56 69 72 74 75 61 6c 2e 20  ll OpenVirtual. 
18c50 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 63 72 65   But.** that cre
18c60 61 74 65 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77  ated confusion w
18c70 69 74 68 20 74 68 65 20 77 68 6f 6c 65 20 76 69  ith the whole vi
18c80 72 74 75 61 6c 2d 74 61 62 6c 65 20 69 64 65 61  rtual-table idea
18c90 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
18ca0 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31  OpenAutoindex P1
18cb0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
18cc0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
18cd0 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f  ks the same as O
18ce0 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e  P_OpenEphemeral.
18cf0 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69    It has a.** di
18d00 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20  fferent name to 
18d10 64 69 73 74 69 6e 67 75 69 73 68 20 69 74 73 20  distinguish its 
18d20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65  use.  Tables cre
18d30 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79  ated using.** by
18d40 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c   this opcode wil
18d50 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 61 75  l be used for au
18d60 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
18d70 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a  ted transient.**
18d80 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e   indices in join
18d90 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  s..*/.case OP_Op
18da0 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61  enAutoindex: .ca
18db0 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  se OP_OpenEpheme
18dc0 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ral: {.  VdbeCur
18dd0 73 6f 72 20 2a 70 43 78 3b 0a 20 20 73 74 61 74  sor *pCx;.  stat
18de0 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 6f 70 65  ic const int ope
18df0 6e 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20  nFlags = .      
18e00 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44  SQLITE_OPEN_READ
18e10 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51  WRITE |.      SQ
18e20 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45  LITE_OPEN_CREATE
18e30 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
18e40 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c  OPEN_EXCLUSIVE |
18e50 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
18e60 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45  EN_DELETEONCLOSE
18e70 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
18e80 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44  OPEN_TRANSIENT_D
18e90 42 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  B;..  assert( pO
18ea0 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p1>=0 );.  pC
18eb0 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
18ec0 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
18ed0 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a  Op->p2, -1, 1);.
18ee0 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
18ef0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
18f00 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
18f10 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
18f20 72 65 65 4f 70 65 6e 28 30 2c 20 64 62 2c 20 26  reeOpen(0, db, &
18f30 70 43 78 2d 3e 70 42 74 2c 20 42 54 52 45 45 5f  pCx->pBt, BTREE_
18f40 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 2c 20 6f 70  OMIT_JOURNAL, op
18f50 65 6e 46 6c 61 67 73 29 3b 0a 20 20 69 66 28 20  enFlags);.  if( 
18f60 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
18f70 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
18f80 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73  3BtreeBeginTrans
18f90 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20  (pCx->pBt, 1);. 
18fa0 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c   }.  if( rc==SQL
18fb0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a  ITE_OK ){.    /*
18fc0 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20   If a transient 
18fd0 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72 65  index is require
18fe0 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79 20  d, create it by 
18ff0 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73  calling.    ** s
19000 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
19010 65 54 61 62 6c 65 28 29 20 77 69 74 68 20 74 68  eTable() with th
19020 65 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41  e BTREE_ZERODATA
19030 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20   flag before.   
19040 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20   ** opening it. 
19050 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  If a transient t
19060 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64  able is required
19070 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20  , just use the. 
19080 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61     ** automatica
19090 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c  lly created tabl
190a0 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65  e with root-page
190b0 20 31 20 28 61 6e 20 49 4e 54 4b 45 59 20 74 61   1 (an INTKEY ta
190c0 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ble)..    */.   
190d0 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 70 4b 65   if( pOp->p4.pKe
190e0 79 49 6e 66 6f 20 29 7b 0a 20 20 20 20 20 20 69  yInfo ){.      i
190f0 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61  nt pgno;.      a
19100 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
19110 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
19120 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
19130 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
19140 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20 26  able(pCx->pBt, &
19150 70 67 6e 6f 2c 20 42 54 52 45 45 5f 5a 45 52 4f  pgno, BTREE_ZERO
19160 44 41 54 41 29 3b 20 0a 20 20 20 20 20 20 69 66  DATA); .      if
19170 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
19180 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
19190 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f  t( pgno==MASTER_
191a0 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20  ROOT+1 );.      
191b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
191c0 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
191d0 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a 20 20  Bt, pgno, 1, .  
191e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 4b                (K
19200 65 79 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e  eyInfo*)pOp->p4.
19210 7a 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  z, pCx->pCursor)
19220 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70  ;.        pCx->p
19230 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
19240 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  4.pKeyInfo;.    
19250 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66      pCx->pKeyInf
19260 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e  o->enc = ENC(p->
19270 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  db);.      }.   
19280 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20     pCx->isTable 
19290 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 0;.    }else{.
192a0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
192b0 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
192c0 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52  x->pBt, MASTER_R
192d0 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e  OOT, 1, 0, pCx->
192e0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
192f0 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31  pCx->isTable = 1
19300 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43  ;.    }.  }.  pC
19310 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43  x->isIndex = !pC
19320 78 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62 72  x->isTable;.  br
19330 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
19340 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31  e: OpenPseudo P1
19350 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
19360 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73   Open a new curs
19370 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74  or that points t
19380 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74  o a fake table t
19390 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73  hat contains a s
193a0 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20  ingle.** row of 
193b0 64 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65  data.  The conte
193c0 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72  nt of that one r
193d0 6f 77 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e  ow in the conten
193e0 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72  t of memory.** r
193f0 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20  egister P2.  In 
19400 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72  other words, cur
19410 73 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61  sor P1 becomes a
19420 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
19430 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e  .** MEM_Blob con
19440 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69  tent contained i
19450 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
19460 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61  *.** A pseudo-ta
19470 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20 74  ble created by t
19480 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
19490 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e  ed to hold a sin
194a0 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75  gle.** row outpu
194b0 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65  t from the sorte
194c0 72 20 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f  r so that the ro
194d0 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f  w can be decompo
194e0 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69  sed into.** indi
194f0 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75  vidual columns u
19500 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75  sing the OP_Colu
19510 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20  mn opcode.  The 
19520 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
19530 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  .** is the only 
19540 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68  cursor opcode th
19550 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20  at works with a 
19560 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a  pseudo-table..**
19570 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75  .** P3 is the nu
19580 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
19590 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 74 68  n the records th
195a0 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  at will be store
195b0 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75  d by.** the pseu
195c0 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  do-table..*/.cas
195d0 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a  e OP_OpenPseudo:
195e0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
195f0 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pCx;..  assert(
19600 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
19610 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
19620 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
19630 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30  , pOp->p3, -1, 0
19640 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
19650 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
19660 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
19670 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75 64 6f  1;.  pCx->pseudo
19680 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e  TableReg = pOp->
19690 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62  p2;.  pCx->isTab
196a0 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69  le = 1;.  pCx->i
196b0 73 49 6e 64 65 78 20 3d 20 30 3b 0a 20 20 62 72  sIndex = 0;.  br
196c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
196d0 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20  e: Close P1 * * 
196e0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20  * *.**.** Close 
196f0 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75  a cursor previou
19700 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31  sly opened as P1
19710 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a  .  If P1 is not.
19720 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  ** currently ope
19730 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  n, this instruct
19740 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ion is a no-op..
19750 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65  */.case OP_Close
19760 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
19770 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
19780 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
19790 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 46  ;.  sqlite3VdbeF
197a0 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e  reeCursor(p, p->
197b0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b  apCsr[pOp->p1]);
197c0 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  .  p->apCsr[pOp-
197d0 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61  >p1] = 0;.  brea
197e0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
197f0 20 53 65 65 6b 47 65 20 50 31 20 50 32 20 50 33   SeekGe P1 P2 P3
19800 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63   P4 *.**.** If c
19810 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
19820 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
19830 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
19840 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
19850 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
19860 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
19870 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49  3 as the key.  I
19880 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
19890 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
198a0 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
198b0 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
198c0 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
198d0 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
198e0 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
198f0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
19900 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
19910 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
19920 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
19930 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
19940 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
19950 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
19960 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
19970 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
19980 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
19990 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65  cords .** greate
199a0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
199b0 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
199c0 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
199d0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
199e0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
199f0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
19a00 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c   Distinct, SeekL
19a10 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c  t, SeekGt, SeekL
19a20 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
19a30 53 65 65 6b 47 74 20 50 31 20 50 32 20 50 33 20  SeekGt P1 P2 P3 
19a40 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  P4 *.**.** If cu
19a50 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
19a60 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
19a70 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
19a80 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
19a90 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
19aa0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
19ab0 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
19ac0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
19ad0 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
19ae0 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
19af0 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
19b00 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
19b10 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
19b20 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
19b30 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
19b40 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
19b50 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
19b60 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
19b70 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
19b80 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
19b90 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
19ba0 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
19bb0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
19bc0 63 6f 72 64 73 20 67 72 65 61 74 65 72 20 74 68  cords greater th
19bd0 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61  an .** the key a
19be0 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
19bf0 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
19c00 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
19c10 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
19c20 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53  und, Distinct, S
19c30 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekLt, SeekGe, S
19c40 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
19c50 64 65 3a 20 53 65 65 6b 4c 74 20 50 31 20 50 32  de: SeekLt P1 P2
19c60 20 50 33 20 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20   P3 P4 * .**.** 
19c70 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
19c80 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
19c90 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
19ca0 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
19cb0 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
19cc0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
19cd0 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
19ce0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
19cf0 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
19d00 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
19d10 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
19d20 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
19d30 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
19d40 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
19d50 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
19d60 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
19d70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
19d80 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
19d90 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67  ints to the larg
19da0 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
19db0 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
19dc0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
19dd0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
19de0 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e  ecords less than
19df0 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
19e00 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
19e10 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
19e20 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
19e30 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
19e40 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65  d, Distinct, See
19e50 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kGt, SeekGe, See
19e60 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
19e70 3a 20 53 65 65 6b 4c 65 20 50 31 20 50 32 20 50  : SeekLe P1 P2 P
19e80 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20  3 P4 *.**.** If 
19e90 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
19ea0 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
19eb0 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
19ec0 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
19ed0 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
19ee0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
19ef0 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
19f00 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
19f10 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
19f20 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
19f30 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
19f40 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
19f50 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
19f60 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
19f70 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
19f80 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
19f90 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
19fa0 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
19fb0 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20   to the largest 
19fc0 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
19fd0 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
19fe0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
19ff0 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1a000 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a  are no records .
1a010 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  ** less than or 
1a020 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1a030 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1a040 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1a050 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  o P2..**.** See 
1a060 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1a070 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c  Found, Distinct,
1a080 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
1a090 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20   SeekLt.*/.case 
1a0a0 4f 50 5f 53 65 65 6b 4c 74 3a 20 20 20 20 20 20  OP_SeekLt:      
1a0b0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1a0c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c  */.case OP_SeekL
1a0d0 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  e:         /* ju
1a0e0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
1a0f0 4f 50 5f 53 65 65 6b 47 65 3a 20 20 20 20 20 20  OP_SeekGe:      
1a100 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1a110 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47  */.case OP_SeekG
1a120 74 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75  t: {       /* ju
1a130 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
1a140 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a   res;.  int oc;.
1a150 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1a160 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
1a170 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65  rd r;.  int nFie
1a180 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20  ld;.  i64 iKey; 
1a190 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69       /* The rowi
1a1a0 64 20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b  d we are to seek
1a1b0 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74   to */..  assert
1a1c0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1a1d0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1a1e0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
1a1f0 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20  pOp->p2!=0 );.  
1a200 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1a210 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1a220 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1a230 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
1a240 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
1a250 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
1a260 65 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 31  e == OP_SeekLt+1
1a270 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1a280 5f 53 65 65 6b 47 65 20 3d 3d 20 4f 50 5f 53 65  _SeekGe == OP_Se
1a290 65 6b 4c 74 2b 32 20 29 3b 0a 20 20 61 73 73 65  ekLt+2 );.  asse
1a2a0 72 74 28 20 4f 50 5f 53 65 65 6b 47 74 20 3d 3d  rt( OP_SeekGt ==
1a2b0 20 4f 50 5f 53 65 65 6b 4c 74 2b 33 20 29 3b 0a   OP_SeekLt+3 );.
1a2c0 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f    if( pC->pCurso
1a2d0 72 21 3d 30 20 29 7b 0a 20 20 20 20 6f 63 20 3d  r!=0 ){.    oc =
1a2e0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
1a2f0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1a300 30 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69  0;.    if( pC->i
1a310 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20  sTable ){.      
1a320 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c  /* The input val
1a330 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62  ue in P3 might b
1a340 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69  e of any type: i
1a350 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74  nteger, real, st
1a360 72 69 6e 67 2c 0a 20 20 20 20 20 20 2a 2a 20 62  ring,.      ** b
1a370 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42  lob, or NULL.  B
1a380 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62  ut it needs to b
1a390 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66  e an integer bef
1a3a0 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20  ore we can do.  
1a3b0 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c      ** the seek,
1a3c0 20 73 6f 20 63 6f 76 65 72 74 20 69 74 2e 20 2a   so covert it. *
1a3d0 2f 0a 20 20 20 20 20 20 70 49 6e 33 20 3d 20 26  /.      pIn3 = &
1a3e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1a3f0 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69       applyNumeri
1a400 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 29 3b  cAffinity(pIn3);
1a410 0a 20 20 20 20 20 20 69 4b 65 79 20 3d 20 73 71  .      iKey = sq
1a420 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
1a430 65 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 70  e(pIn3);.      p
1a440 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1a450 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 49  = 0;..      /* I
1a460 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63  f the P3 value c
1a470 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76  ould not be conv
1a480 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e  erted into an in
1a490 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20  teger without.  
1a4a0 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69      ** loss of i
1a4b0 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e  nformation, then
1a4c0 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73   special process
1a4d0 69 6e 67 20 69 73 20 72 65 71 75 69 72 65 64 2e  ing is required.
1a4e0 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  .. */.      if( 
1a4f0 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
1a500 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  EM_Int)==0 ){.  
1a510 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
1a520 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
1a530 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  l)==0 ){.       
1a540 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
1a550 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20  value cannot be 
1a560 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
1a570 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d  ny kind of a num
1a580 62 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 2a  ber,.          *
1a590 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20  * then the seek 
1a5a0 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c  is not possible,
1a5b0 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a   so jump to P2 *
1a5c0 2f 0a 20 20 20 20 20 20 20 20 20 20 70 63 20 3d  /.          pc =
1a5d0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1a5e0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1a5f0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1a600 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68 20   /* If we reach 
1a610 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 6e  this point, then
1a620 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75   the P3 value mu
1a630 73 74 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67  st be a floating
1a640 0a 20 20 20 20 20 20 20 20 2a 2a 20 70 6f 69 6e  .        ** poin
1a650 74 20 6e 75 6d 62 65 72 2e 20 2a 2f 0a 20 20 20  t number. */.   
1a660 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49       assert( (pI
1a670 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1a680 52 65 61 6c 29 21 3d 30 20 29 3b 0a 0a 20 20 20  Real)!=0 );..   
1a690 20 20 20 20 20 69 66 28 20 69 4b 65 79 3d 3d 53       if( iKey==S
1a6a0 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 26 26  MALLEST_INT64 &&
1a6b0 20 28 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c   (pIn3->r<(doubl
1a6c0 65 29 69 4b 65 79 20 7c 7c 20 70 49 6e 33 2d 3e  e)iKey || pIn3->
1a6d0 72 3e 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  r>0) ){.        
1a6e0 20 20 2f 2a 20 54 68 65 20 50 33 20 76 61 6c 75    /* The P3 valu
1a6f0 65 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 69  e is too large i
1a700 6e 20 6d 61 67 6e 69 74 75 64 65 20 74 6f 20 62  n magnitude to b
1a710 65 20 65 78 70 72 65 73 73 65 64 20 61 73 20 61  e expressed as a
1a720 6e 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 69  n.          ** i
1a730 6e 74 65 67 65 72 2e 20 2a 2f 0a 20 20 20 20 20  nteger. */.     
1a740 20 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20       res = 1;.  
1a750 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33          if( pIn3
1a760 2d 3e 72 3c 30 20 29 7b 0a 20 20 20 20 20 20 20  ->r<0 ){.       
1a770 20 20 20 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f       if( oc>=OP_
1a780 53 65 65 6b 47 65 20 29 7b 20 20 61 73 73 65 72  SeekGe ){  asser
1a790 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65  t( oc==OP_SeekGe
1a7a0 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   || oc==OP_SeekG
1a7b0 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  t );.           
1a7c0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1a7d0 74 72 65 65 46 69 72 73 74 28 70 43 2d 3e 70 43  treeFirst(pC->pC
1a7e0 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
1a800 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
1a810 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1a820 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1a830 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1a840 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1a850 20 20 20 20 69 66 28 20 6f 63 3c 3d 4f 50 5f 53      if( oc<=OP_S
1a860 65 65 6b 4c 65 20 29 7b 20 20 61 73 73 65 72 74  eekLe ){  assert
1a870 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20  ( oc==OP_SeekLt 
1a880 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65  || oc==OP_SeekLe
1a890 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   );.            
1a8a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1a8b0 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72  reeLast(pC->pCur
1a8c0 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1a8d0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
1a8e0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
1a8f0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1a900 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20  error;.         
1a910 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d     }.          }
1a920 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72  .          if( r
1a930 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  es ){.          
1a940 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1a950 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a   1;.          }.
1a960 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
1a970 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69  .        }else i
1a980 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74  f( oc==OP_SeekLt
1a990 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   || oc==OP_SeekG
1a9a0 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  e ){.          /
1a9b0 2a 20 55 73 65 20 74 68 65 20 63 65 69 6c 69 6e  * Use the ceilin
1a9c0 67 28 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  g() function to 
1a9d0 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e  convert real->in
1a9e0 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69  t */.          i
1a9f0 66 28 20 70 49 6e 33 2d 3e 72 20 3e 20 28 64 6f  f( pIn3->r > (do
1aa00 75 62 6c 65 29 69 4b 65 79 20 29 20 69 4b 65 79  uble)iKey ) iKey
1aa10 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ++;.        }els
1aa20 65 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e{.          /* 
1aa30 55 73 65 20 74 68 65 20 66 6c 6f 6f 72 28 29 20  Use the floor() 
1aa40 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76  function to conv
1aa50 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f  ert real->int */
1aa60 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
1aa70 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65  t( oc==OP_SeekLe
1aa80 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   || oc==OP_SeekG
1aa90 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  t );.          i
1aaa0 66 28 20 70 49 6e 33 2d 3e 72 20 3c 20 28 64 6f  f( pIn3->r < (do
1aab0 75 62 6c 65 29 69 4b 65 79 20 29 20 69 4b 65 79  uble)iKey ) iKey
1aac0 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  --;.        }.  
1aad0 20 20 20 20 7d 20 0a 20 20 20 20 20 20 72 63 20      } .      rc 
1aae0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1aaf0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1ab00 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  >pCursor, 0, (u6
1ab10 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29  4)iKey, 0, &res)
1ab20 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
1ab30 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1ab40 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1ab50 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1ab60 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
1ab70 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
1ab80 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1ab90 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  id = 1;.        
1aba0 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  pC->lastRowid = 
1abb0 69 4b 65 79 3b 0a 20 20 20 20 20 20 7d 0a 20 20  iKey;.      }.  
1abc0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e    }else{.      n
1abd0 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e  Field = pOp->p4.
1abe0 69 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  i;.      assert(
1abf0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1ac00 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 20 20  _INT32 );.      
1ac10 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30  assert( nField>0
1ac20 20 29 3b 0a 20 20 20 20 20 20 72 2e 70 4b 65 79   );.      r.pKey
1ac30 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
1ac40 6e 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69  nfo;.      r.nFi
1ac50 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c  eld = (u16)nFiel
1ac60 64 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 54 68 65  d;..      /* The
1ac70 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f   next line of co
1ac80 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66  de computes as f
1ac90 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73  ollows, only fas
1aca0 74 65 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20  ter:.      **   
1acb0 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47  if( oc==OP_SeekG
1acc0 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  t || oc==OP_Seek
1acd0 4c 65 20 29 7b 0a 20 20 20 20 20 20 2a 2a 20 20  Le ){.      **  
1ace0 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50     r.flags = UNP
1acf0 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 3b 0a 20  ACKED_INCRKEY;. 
1ad00 20 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b       **   }else{
1ad10 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 72 2e  .      **     r.
1ad20 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20  flags = 0;.     
1ad30 20 2a 2a 20 20 20 7d 0a 20 20 20 20 20 20 2a 2f   **   }.      */
1ad40 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  .      r.flags =
1ad50 20 28 75 31 36 29 28 55 4e 50 41 43 4b 45 44 5f   (u16)(UNPACKED_
1ad60 49 4e 43 52 4b 45 59 20 2a 20 28 31 20 26 20 28  INCRKEY * (1 & (
1ad70 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 74 29 29  oc - OP_SeekLt))
1ad80 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1ad90 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 74 20 7c   oc!=OP_SeekGt |
1ada0 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43  | r.flags==UNPAC
1adb0 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20  KED_INCRKEY );. 
1adc0 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21       assert( oc!
1add0 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 72 2e  =OP_SeekLe || r.
1ade0 66 6c 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f  flags==UNPACKED_
1adf0 49 4e 43 52 4b 45 59 20 29 3b 0a 20 20 20 20 20  INCRKEY );.     
1ae00 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1ae10 53 65 65 6b 47 65 20 7c 7c 20 72 2e 66 6c 61 67  SeekGe || r.flag
1ae20 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73  s==0 );.      as
1ae30 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1ae40 6b 4c 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d  kLt || r.flags==
1ae50 30 20 29 3b 0a 0a 20 20 20 20 20 20 72 2e 61 4d  0 );..      r.aM
1ae60 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
1ae70 70 33 5d 3b 0a 20 20 20 20 20 20 45 78 70 61 6e  p3];.      Expan
1ae80 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20  dBlob(r.aMem);. 
1ae90 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1aea0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1aeb0 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  cked(pC->pCursor
1aec0 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73  , &r, 0, 0, &res
1aed0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
1aee0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1aef0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1af00 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1af10 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 2d       }.      pC-
1af20 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1af30 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  0;.    }.    pC-
1af40 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1af50 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
1af60 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1af70 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53  _STALE;.#ifdef S
1af80 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73  QLITE_TEST.    s
1af90 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
1afa0 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
1afb0 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65    if( oc>=OP_See
1afc0 6b 47 65 20 29 7b 20 20 61 73 73 65 72 74 28 20  kGe ){  assert( 
1afd0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c  oc==OP_SeekGe ||
1afe0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29   oc==OP_SeekGt )
1aff0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3c  ;.      if( res<
1b000 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20  0 || (res==0 && 
1b010 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 29 20 29  oc==OP_SeekGt) )
1b020 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
1b030 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
1b040 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
1b050 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  s);.        if( 
1b060 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
1b070 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1b080 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1b090 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1b0a0 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c  d = 0;.      }el
1b0b0 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20  se{.        res 
1b0c0 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
1b0d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
1b0e0 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1b0f0 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kLt || oc==OP_Se
1b100 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20 69 66  ekLe );.      if
1b110 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d  ( res>0 || (res=
1b120 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
1b130 6b 4c 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20  kLt) ){.        
1b140 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1b150 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43  ePrevious(pC->pC
1b160 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1b170 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1b180 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
1b190 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1b1a0 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72  r;.        pC->r
1b1b0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1b1c0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
1b1d0 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67        /* res mig
1b1e0 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62  ht be negative b
1b1f0 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
1b200 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63   is empty.  Chec
1b210 6b 20 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a 20  k to.        ** 
1b220 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74  see if this is t
1b230 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 20  he case..       
1b240 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 73 20   */.        res 
1b250 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f  = sqlite3BtreeEo
1b260 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  f(pC->pCursor);.
1b270 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1b280 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1b290 32 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20 72  2>0 );.    if( r
1b2a0 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  es ){.      pc =
1b2b0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1b2c0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1b2d0 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73   /* This happens
1b2e0 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69 6e 67   when attempting
1b2f0 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 71 6c   to open the sql
1b300 69 74 65 33 5f 6d 61 73 74 65 72 20 74 61 62 6c  ite3_master tabl
1b310 65 0a 20 20 20 20 2a 2a 20 66 6f 72 20 72 65 61  e.    ** for rea
1b320 64 20 61 63 63 65 73 73 20 72 65 74 75 72 6e 73  d access returns
1b330 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20 49   SQLITE_EMPTY. I
1b340 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c 77 61  n this case alwa
1b350 79 73 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20 74  ys.    ** take t
1b360 68 65 20 6a 75 6d 70 20 28 73 69 6e 63 65 20 74  he jump (since t
1b370 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1b380 72 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  rds in the table
1b390 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70 63  )..    */.    pc
1b3a0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1b3b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1b3c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20  /* Opcode: Seek 
1b3d0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1b3e0 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20  * P1 is an open 
1b3f0 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e 64  table cursor and
1b400 20 50 32 20 69 73 20 61 20 72 6f 77 69 64 20 69   P2 is a rowid i
1b410 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67 65  nteger.  Arrange
1b420 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f  .** for P1 to mo
1b430 76 65 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  ve so that it po
1b440 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77 69  ints to the rowi
1b450 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a  d given by P2..*
1b460 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63 74  *.** This is act
1b470 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65 64  ually a deferred
1b480 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20   seek.  Nothing 
1b490 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73  actually happens
1b4a0 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75   until.** the cu
1b4b0 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20  rsor is used to 
1b4c0 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20  read a record.  
1b4d0 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20  That way, if no 
1b4e0 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20  reads.** occur, 
1b4f0 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49  no unnecessary I
1b500 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63  /O happens..*/.c
1b510 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20  ase OP_Seek: {  
1b520 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
1b530 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
1b540 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1b550 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1b560 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1b570 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1b580 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1b590 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pC!=0 );.  if( 
1b5a0 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73  ALWAYS(pC->pCurs
1b5b0 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73  or!=0) ){.    as
1b5c0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1b5d0 65 20 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  e );.    pC->nul
1b5e0 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 49  lRow = 0;.    pI
1b5f0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
1b600 70 32 5d 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76  p2];.    pC->mov
1b610 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69  etoTarget = sqli
1b620 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
1b630 70 49 6e 32 29 3b 0a 20 20 20 20 70 43 2d 3e 72  pIn2);.    pC->r
1b640 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1b650 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1b660 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 7d  dMoveto = 1;.  }
1b670 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a  .  break;.}.  ..
1b680 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64  /* Opcode: Found
1b690 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1b6a0 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68  *.** If P4==0 th
1b6b0 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68  en register P3 h
1b6c0 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
1b6d0 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
1b6e0 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34  ecord.  If.** P4
1b6f0 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  >0 then register
1b700 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1b710 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1b720 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e   that form an un
1b730 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64  packed.** record
1b740 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50  ..**.** Cursor P
1b750 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
1b760 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
1b770 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
1b780 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
1b790 2a 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66  * is a prefix of
1b7a0 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31   any entry in P1
1b7b0 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20   then a jump is 
1b7c0 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a  made to P2 and.*
1b7d0 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69  * P1 is left poi
1b7e0 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74  nting at the mat
1b7f0 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2f 0a  ching entry..*/.
1b800 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f  /* Opcode: NotFo
1b810 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20  und P1 P2 P3 P4 
1b820 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  *.**.** If P4==0
1b830 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1b840 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
1b850 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
1b860 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
1b870 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
1b880 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
1b890 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
1b8a0 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
1b8b0 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
1b8c0 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73  ord..** .** Curs
1b8d0 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
1b8e0 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
1b8f0 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
1b900 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
1b910 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65  P4.** is not the
1b920 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65   prefix of any e
1b930 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20  ntry in P1 then 
1b940 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  a jump is made t
1b950 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a  o P2.  If P1 .**
1b960 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e   does contain an
1b970 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65   entry whose pre
1b980 66 69 78 20 6d 61 74 63 68 65 73 20 74 68 65 20  fix matches the 
1b990 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65  P3/P4 record the
1b9a0 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c  n control.** fal
1b9b0 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ls through to th
1b9c0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
1b9d0 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66  on and P1 is lef
1b9e0 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
1b9f0 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e  e.** matching en
1ba00 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  try..**.** See a
1ba10 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45  lso: Found, NotE
1ba20 78 69 73 74 73 2c 20 49 73 55 6e 69 71 75 65 0a  xists, IsUnique.
1ba30 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f  */.case OP_NotFo
1ba40 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75  und:       /* ju
1ba50 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
1ba60 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20  OP_Found: {     
1ba70 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1ba80 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79  */.  int already
1ba90 45 78 69 73 74 73 3b 0a 20 20 56 64 62 65 43 75  Exists;.  VdbeCu
1baa0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
1bab0 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
1bac0 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a  ecord *pIdxKey;.
1bad0 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1bae0 20 72 3b 0a 20 20 63 68 61 72 20 61 54 65 6d 70   r;.  char aTemp
1baf0 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  Rec[ROUND8(sizeo
1bb00 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  f(UnpackedRecord
1bb10 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29  )) + sizeof(Mem)
1bb20 2a 33 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66  *3 + 7];..#ifdef
1bb30 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
1bb40 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75  qlite3_found_cou
1bb50 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  nt++;.#endif..  
1bb60 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20  alreadyExists = 
1bb70 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
1bb80 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1bb90 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1bba0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1bbb0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1bbc0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1bbd0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1bbe0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1bbf0 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
1bc00 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
1bc10 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73  ALWAYS(pC->pCurs
1bc20 6f 72 21 3d 30 29 20 29 7b 0a 0a 20 20 20 20 61  or!=0) ){..    a
1bc30 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1bc40 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  le==0 );.    if(
1bc50 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a   pOp->p4.i>0 ){.
1bc60 20 20 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f        r.pKeyInfo
1bc70 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
1bc80 0a 20 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  .      r.nField 
1bc90 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
1bca0 3b 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d  ;.      r.aMem =
1bcb0 20 70 49 6e 33 3b 0a 20 20 20 20 20 20 72 2e 66   pIn3;.      r.f
1bcc0 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f  lags = UNPACKED_
1bcd0 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20  PREFIX_MATCH;.  
1bce0 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72      pIdxKey = &r
1bcf0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1bd00 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d     assert( pIn3-
1bd10 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
1bd20 62 20 29 3b 0a 20 20 20 20 20 20 45 78 70 61 6e  b );.      Expan
1bd30 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20  dBlob(pIn3);.   
1bd40 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c     pIdxKey = sql
1bd50 69 74 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e  ite3VdbeRecordUn
1bd60 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66  pack(pC->pKeyInf
1bd70 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33  o, pIn3->n, pIn3
1bd80 2d 3e 7a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ->z,.           
1bd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bda0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 54 65               aTe
1bdb0 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54  mpRec, sizeof(aT
1bdc0 65 6d 70 52 65 63 29 29 3b 0a 20 20 20 20 20 20  empRec));.      
1bdd0 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29  if( pIdxKey==0 )
1bde0 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6e  {.        goto n
1bdf0 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 0a 20  o_mem;.      }. 
1be00 20 20 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c       pIdxKey->fl
1be10 61 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f  ags |= UNPACKED_
1be20 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20  PREFIX_MATCH;.  
1be30 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c    }.    rc = sql
1be40 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1be50 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1be60 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c  sor, pIdxKey, 0,
1be70 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69   0, &res);.    i
1be80 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20  f( pOp->p4.i==0 
1be90 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
1bea0 56 64 62 65 44 65 6c 65 74 65 55 6e 70 61 63 6b  VdbeDeleteUnpack
1beb0 65 64 52 65 63 6f 72 64 28 70 49 64 78 4b 65 79  edRecord(pIdxKey
1bec0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
1bed0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1bee0 7b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  {.      break;. 
1bef0 20 20 20 7d 0a 20 20 20 20 61 6c 72 65 61 64 79     }.    already
1bf00 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30  Exists = (res==0
1bf10 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  );.    pC->defer
1bf20 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
1bf30 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
1bf40 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1bf50 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1bf60 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e  >opcode==OP_Foun
1bf70 64 20 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72  d ){.    if( alr
1bf80 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20  eadyExists ) pc 
1bf90 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1bfa0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20   }else{.    if( 
1bfb0 21 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29  !alreadyExists )
1bfc0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1bfd0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
1bfe0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73  }../* Opcode: Is
1bff0 55 6e 69 71 75 65 20 50 31 20 50 32 20 50 33 20  Unique P1 P2 P3 
1c000 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f  P4 *.**.** Curso
1c010 72 20 50 31 20 69 73 20 6f 70 65 6e 20 6f 6e 20  r P1 is open on 
1c020 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  an index b-tree 
1c030 2d 20 74 68 61 74 20 69 73 20 74 6f 20 73 61 79  - that is to say
1c040 2c 20 61 20 62 74 72 65 65 20 77 68 69 63 68 0a  , a btree which.
1c050 2a 2a 20 6e 6f 20 64 61 74 61 20 61 6e 64 20 77  ** no data and w
1c060 68 65 72 65 20 74 68 65 20 6b 65 79 20 61 72 65  here the key are
1c070 20 72 65 63 6f 72 64 73 20 67 65 6e 65 72 61 74   records generat
1c080 65 64 20 62 79 20 4f 50 5f 4d 61 6b 65 52 65 63  ed by OP_MakeRec
1c090 6f 72 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20  ord with.** the 
1c0a0 6c 69 73 74 20 66 69 65 6c 64 20 62 65 69 6e 67  list field being
1c0b0 20 74 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57   the integer ROW
1c0c0 49 44 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20  ID of the entry 
1c0d0 74 68 61 74 20 74 68 65 20 69 6e 64 65 78 0a 2a  that the index.*
1c0e0 2a 20 65 6e 74 72 79 20 72 65 66 65 72 73 20 74  * entry refers t
1c0f0 6f 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20  o..**.** The P3 
1c100 72 65 67 69 73 74 65 72 20 63 6f 6e 74 61 69 6e  register contain
1c110 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 63  s an integer rec
1c120 6f 72 64 20 6e 75 6d 62 65 72 2e 20 43 61 6c 6c  ord number. Call
1c130 20 74 68 69 73 20 72 65 63 6f 72 64 20 0a 2a 2a   this record .**
1c140 20 6e 75 6d 62 65 72 20 52 2e 20 52 65 67 69 73   number R. Regis
1c150 74 65 72 20 50 34 20 69 73 20 74 68 65 20 66 69  ter P4 is the fi
1c160 72 73 74 20 69 6e 20 61 20 73 65 74 20 6f 66 20  rst in a set of 
1c170 4e 20 63 6f 6e 74 69 67 75 6f 75 73 20 72 65 67  N contiguous reg
1c180 69 73 74 65 72 73 0a 2a 2a 20 74 68 61 74 20 6d  isters.** that m
1c190 61 6b 65 20 75 70 20 61 6e 20 75 6e 70 61 63 6b  ake up an unpack
1c1a0 65 64 20 69 6e 64 65 78 20 6b 65 79 20 74 68 61  ed index key tha
1c1b0 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 77 69  t can be used wi
1c1c0 74 68 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  th cursor P1..**
1c1d0 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 4e 20   The value of N 
1c1e0 63 61 6e 20 62 65 20 69 6e 66 65 72 72 65 64 20  can be inferred 
1c1f0 66 72 6f 6d 20 74 68 65 20 63 75 72 73 6f 72 2e  from the cursor.
1c200 20 4e 20 69 6e 63 6c 75 64 65 73 20 74 68 65 20   N includes the 
1c210 72 6f 77 69 64 0a 2a 2a 20 76 61 6c 75 65 20 61  rowid.** value a
1c220 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65 20 65  ppended to the e
1c230 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  nd of the index 
1c240 72 65 63 6f 72 64 2e 20 54 68 69 73 20 72 6f 77  record. This row
1c250 69 64 20 76 61 6c 75 65 20 6d 61 79 0a 2a 2a 20  id value may.** 
1c260 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 74 68  or may not be th
1c270 65 20 73 61 6d 65 20 61 73 20 52 2e 0a 2a 2a 0a  e same as R..**.
1c280 2a 2a 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65  ** If any of the
1c290 20 4e 20 72 65 67 69 73 74 65 72 73 20 62 65 67   N registers beg
1c2a0 69 6e 6e 69 6e 67 20 77 69 74 68 20 72 65 67 69  inning with regi
1c2b0 73 74 65 72 20 50 34 20 63 6f 6e 74 61 69 6e 73  ster P4 contains
1c2c0 20 61 20 4e 55 4c 4c 0a 2a 2a 20 76 61 6c 75 65   a NULL.** value
1c2d0 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  , jump immediate
1c2e0 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ly to P2..**.** 
1c2f0 4f 74 68 65 72 77 69 73 65 2c 20 74 68 69 73 20  Otherwise, this 
1c300 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 68 65 63  instruction chec
1c310 6b 73 20 69 66 20 63 75 72 73 6f 72 20 50 31 20  ks if cursor P1 
1c320 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65 6e 74 72  contains an entr
1c330 79 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 66  y.** where the f
1c340 69 72 73 74 20 28 4e 2d 31 29 20 66 69 65 6c 64  irst (N-1) field
1c350 73 20 6d 61 74 63 68 20 62 75 74 20 74 68 65 20  s match but the 
1c360 72 6f 77 69 64 20 76 61 6c 75 65 20 61 74 20 74  rowid value at t
1c370 68 65 20 65 6e 64 0a 2a 2a 20 6f 66 20 74 68 65  he end.** of the
1c380 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
1c390 6e 6f 74 20 52 2e 20 49 66 20 74 68 65 72 65 20  not R. If there 
1c3a0 69 73 20 6e 6f 20 73 75 63 68 20 65 6e 74 72 79  is no such entry
1c3b0 2c 20 63 6f 6e 74 72 6f 6c 20 6a 75 6d 70 73 0a  , control jumps.
1c3c0 2a 2a 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  ** to instructio
1c3d0 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  n P2. Otherwise,
1c3e0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
1c3f0 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e  e conflicting in
1c400 64 65 78 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20  dex.** entry is 
1c410 63 6f 70 69 65 64 20 74 6f 20 72 65 67 69 73 74  copied to regist
1c420 65 72 20 50 33 20 61 6e 64 20 63 6f 6e 74 72 6f  er P3 and contro
1c430 6c 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20  l falls through 
1c440 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  to the next.** i
1c450 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
1c460 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46  * See also: NotF
1c470 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c  ound, NotExists,
1c480 20 46 6f 75 6e 64 0a 2a 2f 0a 63 61 73 65 20 4f   Found.*/.case O
1c490 50 5f 49 73 55 6e 69 71 75 65 3a 20 7b 20 20 20  P_IsUnique: {   
1c4a0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1c4b0 33 20 2a 2f 0a 20 20 75 31 36 20 69 69 3b 0a 20  3 */.  u16 ii;. 
1c4c0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1c4d0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
1c4e0 72 73 72 3b 0a 20 20 75 31 36 20 6e 46 69 65 6c  rsr;.  u16 nFiel
1c4f0 64 3b 0a 20 20 4d 65 6d 20 2a 61 4d 78 3b 0a 20  d;.  Mem *aMx;. 
1c500 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
1c510 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
1c520 20 20 20 20 2f 2a 20 42 2d 54 72 65 65 20 69 6e      /* B-Tree in
1c530 64 65 78 20 73 65 61 72 63 68 20 6b 65 79 20 2a  dex search key *
1c540 2f 0a 20 20 69 36 34 20 52 3b 20 20 20 20 20 20  /.  i64 R;      
1c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c560 20 20 20 20 20 20 20 2f 2a 20 52 6f 77 69 64 20         /* Rowid 
1c570 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
1c580 65 72 20 50 33 20 2a 2f 0a 0a 20 20 70 49 6e 33  er P3 */..  pIn3
1c590 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1c5a0 5d 3b 0a 20 20 61 4d 78 20 3d 20 26 61 4d 65 6d  ];.  aMx = &aMem
1c5b0 5b 70 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20 20 2f  [pOp->p4.i];.  /
1c5c0 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
1c5d0 65 20 76 61 6c 75 65 73 20 6f 66 20 70 61 72 61  e values of para
1c5e0 6d 65 74 65 72 73 20 50 31 20 61 6e 64 20 50 34  meters P1 and P4
1c5f0 20 61 72 65 20 69 6e 20 72 61 6e 67 65 2e 20 2a   are in range. *
1c600 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
1c610 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1c620 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
1c630 4f 70 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70 4f  Op->p4.i>0 && pO
1c640 70 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d  p->p4.i<=p->nMem
1c650 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1c660 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1c670 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1c680 3b 0a 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ;..  /* Find the
1c690 20 69 6e 64 65 78 20 63 75 72 73 6f 72 2e 20 2a   index cursor. *
1c6a0 2f 0a 20 20 70 43 78 20 3d 20 70 2d 3e 61 70 43  /.  pCx = p->apC
1c6b0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1c6c0 73 73 65 72 74 28 20 70 43 78 2d 3e 64 65 66 65  ssert( pCx->defe
1c6d0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
1c6e0 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75  .  pCx->seekResu
1c6f0 6c 74 20 3d 20 30 3b 0a 20 20 70 43 78 2d 3e 63  lt = 0;.  pCx->c
1c700 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1c710 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 72 73  HE_STALE;.  pCrs
1c720 72 20 3d 20 70 43 78 2d 3e 70 43 75 72 73 6f 72  r = pCx->pCursor
1c730 3b 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 6f  ;..  /* If any o
1c740 66 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65  f the values are
1c750 20 4e 55 4c 4c 2c 20 74 61 6b 65 20 74 68 65 20   NULL, take the 
1c760 6a 75 6d 70 2e 20 2a 2f 0a 20 20 6e 46 69 65 6c  jump. */.  nFiel
1c770 64 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  d = pCx->pKeyInf
1c780 6f 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 66 6f 72  o->nField;.  for
1c790 28 69 69 3d 30 3b 20 69 69 3c 6e 46 69 65 6c 64  (ii=0; ii<nField
1c7a0 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  ; ii++){.    if(
1c7b0 20 61 4d 78 5b 69 69 5d 2e 66 6c 61 67 73 20 26   aMx[ii].flags &
1c7c0 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
1c7d0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1c7e0 2d 20 31 3b 0a 20 20 20 20 20 20 70 43 72 73 72  - 1;.      pCrsr
1c7f0 20 3d 20 30 3b 0a 20 20 20 20 20 20 62 72 65 61   = 0;.      brea
1c800 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  k;.    }.  }.  a
1c810 73 73 65 72 74 28 20 28 61 4d 78 5b 6e 46 69 65  ssert( (aMx[nFie
1c820 6c 64 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ld].flags & MEM_
1c830 4e 75 6c 6c 29 3d 3d 30 20 29 3b 0a 0a 20 20 69  Null)==0 );..  i
1c840 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20  f( pCrsr!=0 ){. 
1c850 20 20 20 2f 2a 20 50 6f 70 75 6c 61 74 65 20 74     /* Populate t
1c860 68 65 20 69 6e 64 65 78 20 73 65 61 72 63 68 20  he index search 
1c870 6b 65 79 2e 20 2a 2f 0a 20 20 20 20 72 2e 70 4b  key. */.    r.pK
1c880 65 79 49 6e 66 6f 20 3d 20 70 43 78 2d 3e 70 4b  eyInfo = pCx->pK
1c890 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
1c8a0 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 20 2b 20  ield = nField + 
1c8b0 31 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  1;.    r.flags =
1c8c0 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58   UNPACKED_PREFIX
1c8d0 5f 53 45 41 52 43 48 3b 0a 20 20 20 20 72 2e 61  _SEARCH;.    r.a
1c8e0 4d 65 6d 20 3d 20 61 4d 78 3b 0a 0a 20 20 20 20  Mem = aMx;..    
1c8f0 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 76  /* Extract the v
1c900 61 6c 75 65 20 6f 66 20 52 20 66 72 6f 6d 20 72  alue of R from r
1c910 65 67 69 73 74 65 72 20 50 33 2e 20 2a 2f 0a 20  egister P3. */. 
1c920 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
1c930 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33  mIntegerify(pIn3
1c940 29 3b 0a 20 20 20 20 52 20 3d 20 70 49 6e 33 2d  );.    R = pIn3-
1c950 3e 75 2e 69 3b 0a 0a 20 20 20 20 2f 2a 20 53 65  >u.i;..    /* Se
1c960 61 72 63 68 20 74 68 65 20 42 2d 54 72 65 65 20  arch the B-Tree 
1c970 69 6e 64 65 78 2e 20 49 66 20 6e 6f 20 63 6f 6e  index. If no con
1c980 66 6c 69 63 74 69 6e 67 20 72 65 63 6f 72 64 20  flicting record 
1c990 69 73 20 66 6f 75 6e 64 2c 20 6a 75 6d 70 0a 20  is found, jump. 
1c9a0 20 20 20 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68     ** to P2. Oth
1c9b0 65 72 77 69 73 65 2c 20 63 6f 70 79 20 74 68 65  erwise, copy the
1c9c0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63 6f   rowid of the co
1c9d0 6e 66 6c 69 63 74 69 6e 67 20 72 65 63 6f 72 64  nflicting record
1c9e0 20 74 6f 0a 20 20 20 20 2a 2a 20 72 65 67 69 73   to.    ** regis
1c9f0 74 65 72 20 50 33 20 61 6e 64 20 66 61 6c 6c 20  ter P3 and fall 
1ca00 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
1ca10 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
1ca20 20 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71    */.    rc = sq
1ca30 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1ca40 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
1ca50 26 72 2c 20 30 2c 20 30 2c 20 26 70 43 78 2d 3e  &r, 0, 0, &pCx->
1ca60 73 65 65 6b 52 65 73 75 6c 74 29 3b 0a 20 20 20  seekResult);.   
1ca70 20 69 66 28 20 28 72 2e 66 6c 61 67 73 20 26 20   if( (r.flags & 
1ca80 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f  UNPACKED_PREFIX_
1ca90 53 45 41 52 43 48 29 20 7c 7c 20 72 2e 72 6f 77  SEARCH) || r.row
1caa0 69 64 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20 70  id==R ){.      p
1cab0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1cac0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1cad0 20 20 70 49 6e 33 2d 3e 75 2e 69 20 3d 20 72 2e    pIn3->u.i = r.
1cae0 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d  rowid;.    }.  }
1caf0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1cb00 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74  Opcode: NotExist
1cb10 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  s P1 P2 P3 * *.*
1cb20 2a 0a 2a 2a 20 55 73 65 20 74 68 65 20 63 6f 6e  *.** Use the con
1cb30 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
1cb40 20 50 33 20 61 73 20 61 20 69 6e 74 65 67 65 72   P3 as a integer
1cb50 20 6b 65 79 2e 20 20 49 66 20 61 20 72 65 63 6f   key.  If a reco
1cb60 72 64 20 0a 2a 2a 20 77 69 74 68 20 74 68 61 74  rd .** with that
1cb70 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20 65 78   key does not ex
1cb80 69 73 74 20 69 6e 20 74 61 62 6c 65 20 6f 66 20  ist in table of 
1cb90 50 31 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  P1, then jump to
1cba0 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20   P2. .** If the 
1cbb0 72 65 63 6f 72 64 20 64 6f 65 73 20 65 78 69 73  record does exis
1cbc0 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  t, then fall thr
1cbd0 6f 75 67 68 2e 20 20 54 68 65 20 63 75 72 73 6f  ough.  The curso
1cbe0 72 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20 70 6f  r is left .** po
1cbf0 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 72 65  inting to the re
1cc00 63 6f 72 64 20 69 66 20 69 74 20 65 78 69 73 74  cord if it exist
1cc10 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66  s..**.** The dif
1cc20 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
1cc30 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 61  this operation a
1cc40 6e 64 20 4e 6f 74 46 6f 75 6e 64 20 69 73 20 74  nd NotFound is t
1cc50 68 61 74 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72  hat this.** oper
1cc60 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1cc70 65 20 6b 65 79 20 69 73 20 61 6e 20 69 6e 74 65  e key is an inte
1cc80 67 65 72 20 61 6e 64 20 74 68 61 74 20 50 31 20  ger and that P1 
1cc90 69 73 20 61 20 74 61 62 6c 65 20 77 68 65 72 65  is a table where
1cca0 61 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20 61  as.** NotFound a
1ccb0 73 73 75 6d 65 73 20 6b 65 79 20 69 73 20 61 20  ssumes key is a 
1ccc0 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
1ccd0 20 66 72 6f 6d 20 4d 61 6b 65 52 65 63 6f 72 64   from MakeRecord
1cce0 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 61 6e   and.** P1 is an
1ccf0 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65   index..**.** Se
1cd00 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1cd10 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75  otFound, IsUniqu
1cd20 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  e.*/.case OP_Not
1cd30 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20  Exists: {       
1cd40 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1cd50 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1cd60 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
1cd70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
1cd80 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20  .  u64 iKey;..  
1cd90 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
1cda0 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
1cdb0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
1cdc0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
1cdd0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1cde0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1cdf0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1ce00 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1ce10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1ce20 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1ce30 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
1ce40 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
1ce50 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b  doTableReg==0 );
1ce60 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
1ce70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43  Cursor;.  if( pC
1ce80 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 72 65  rsr!=0 ){.    re
1ce90 73 20 3d 20 30 3b 0a 20 20 20 20 69 4b 65 79 20  s = 0;.    iKey 
1cea0 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn3->u.i;.   
1ceb0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1cec0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1ced0 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c  (pCrsr, 0, iKey,
1cee0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70   0, &res);.    p
1cef0 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70  C->lastRowid = p
1cf00 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 70 43  In3->u.i;.    pC
1cf10 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1cf20 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20   res==0 ?1:0;.  
1cf30 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1cf40 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
1cf50 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1cf60 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 64 65  TALE;.    pC->de
1cf70 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1cf80 3b 0a 20 20 20 20 69 66 28 20 72 65 73 21 3d 30  ;.    if( res!=0
1cf90 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
1cfa0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1cfb0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f    assert( pC->ro
1cfc0 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b  widIsValid==0 );
1cfd0 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 73  .    }.    pC->s
1cfe0 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b  eekResult = res;
1cff0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
1d000 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 77 68   This happens wh
1d010 65 6e 20 61 6e 20 61 74 74 65 6d 70 74 20 74 6f  en an attempt to
1d020 20 6f 70 65 6e 20 61 20 72 65 61 64 20 63 75 72   open a read cur
1d030 73 6f 72 20 6f 6e 20 74 68 65 20 0a 20 20 20 20  sor on the .    
1d040 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  ** sqlite_master
1d050 20 74 61 62 6c 65 20 72 65 74 75 72 6e 73 20 53   table returns S
1d060 51 4c 49 54 45 5f 45 4d 50 54 59 2e 0a 20 20 20  QLITE_EMPTY..   
1d070 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   */.    pc = pOp
1d080 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61 73  ->p2 - 1;.    as
1d090 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49  sert( pC->rowidI
1d0a0 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20  sValid==0 );.   
1d0b0 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
1d0c0 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 0;.  }.  break
1d0d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1d0e0 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a  Sequence P1 P2 *
1d0f0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20   * *.**.** Find 
1d100 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62  the next availab
1d110 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  le sequence numb
1d120 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  er for cursor P1
1d130 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73  ..** Write the s
1d140 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69  equence number i
1d150 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
1d160 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65  .** The sequence
1d170 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63   number on the c
1d180 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65  ursor is increme
1d190 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73 0a  nted after this.
1d1a0 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ** instruction. 
1d1b0 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71   .*/.case OP_Seq
1d1c0 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20  uence: {        
1d1d0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
1d1e0 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
1d1f0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1d200 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1d210 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
1d220 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1d230 31 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  1]!=0 );.  pOut-
1d240 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b  >u.i = p->apCsr[
1d250 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75  pOp->p1]->seqCou
1d260 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  nt++;.  break;.}
1d270 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  .../* Opcode: Ne
1d280 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20  wRowid P1 P2 P3 
1d290 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20  * *.**.** Get a 
1d2a0 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f  new integer reco
1d2b0 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61  rd number (a.k.a
1d2c0 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61   "rowid") used a
1d2d0 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74  s the key to a t
1d2e0 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63  able..** The rec
1d2f0 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f  ord number is no
1d300 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
1d310 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68  d as a key in th
1d320 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61  e database.** ta
1d330 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20  ble that cursor 
1d340 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54  P1 points to.  T
1d350 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75  he new record nu
1d360 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a  mber is written.
1d370 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65  ** written to re
1d380 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
1d390 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33   If P3>0 then P3
1d3a0 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69   is a register i
1d3b0 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65  n the root frame
1d3c0 20 6f 66 20 74 68 69 73 20 56 44 42 45 20 74 68   of this VDBE th
1d3d0 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65  at holds .** the
1d3e0 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f 75   largest previou
1d3f0 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72 65  sly generated re
1d400 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20  cord number. No 
1d410 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  new record numbe
1d420 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65  rs are.** allowe
1d430 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61  d to be less tha
1d440 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68  n this value. Wh
1d450 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72 65  en this value re
1d460 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75  aches its maximu
1d470 6d 2c 20 0a 2a 2a 20 61 20 53 51 4c 49 54 45 5f  m, .** a SQLITE_
1d480 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65  FULL error is ge
1d490 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33 20  nerated. The P3 
1d4a0 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61  register is upda
1d4b0 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a  ted with the '.*
1d4c0 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f  * generated reco
1d4d0 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20  rd number. This 
1d4e0 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20  P3 mechanism is 
1d4f0 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70  used to help imp
1d500 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55  lement the.** AU
1d510 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74  TOINCREMENT feat
1d520 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ure..*/.case OP_
1d530 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  NewRowid: {     
1d540 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
1d550 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36  erelease */.  i6
1d560 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20  4 v;            
1d570 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20       /* The new 
1d580 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43  rowid */.  VdbeC
1d590 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20  ursor *pC;      
1d5a0 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74    /* Cursor of t
1d5b0 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20  able to get the 
1d5c0 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69  new rowid */.  i
1d5d0 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
1d5e0 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
1d5f0 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72  of an sqlite3Btr
1d600 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e  eeLast() */.  in
1d610 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20  t cnt;          
1d620 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20       /* Counter 
1d630 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d  to limit the num
1d640 62 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20  ber of searches 
1d650 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20  */.  Mem *pMem; 
1d660 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1d670 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1d680 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f  largest rowid fo
1d690 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  r AUTOINCREMENT 
1d6a0 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
1d6b0 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52  pFrame;     /* R
1d6c0 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42  oot frame of VDB
1d6d0 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20  E */..  v = 0;. 
1d6e0 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65   res = 0;.  asse
1d6f0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1d700 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1d710 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1d720 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1d730 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1d740 30 20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  0 );.  if( NEVER
1d750 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29  (pC->pCursor==0)
1d760 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a   ){.    /* The z
1d770 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ero initializati
1d780 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c 20  on above is all 
1d790 74 68 61 74 20 69 73 20 6e 65 65 64 65 64 20 2a  that is needed *
1d7a0 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  /.  }else{.    /
1d7b0 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64  * The next rowid
1d7c0 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65   or record numbe
1d7d0 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72  r (different ter
1d7e0 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a  ms for the same.
1d7f0 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73      ** thing) is
1d800 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74   obtained in a t
1d810 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68  wo-step algorith
1d820 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  m..    **.    **
1d830 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70   First we attemp
1d840 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61  t to find the la
1d850 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
1d860 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65  owid and add one
1d870 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e  .    ** to that.
1d880 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72    But if the lar
1d890 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
1d8a0 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74  wid is already t
1d8b0 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a  he maximum.    *
1d8c0 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67  * positive integ
1d8d0 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66  er, we have to f
1d8e0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
1d8f0 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a  he second.    **
1d900 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61   probabilistic a
1d910 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a  lgorithm.    **.
1d920 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e      ** The secon
1d930 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74  d algorithm is t
1d940 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64  o select a rowid
1d950 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73   at random and s
1d960 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20  ee if.    ** it 
1d970 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69  already exists i
1d980 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66  n the table.  If
1d990 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
1d9a0 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20  st, we have.    
1d9b0 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49  ** succeeded.  I
1d9c0 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77  f the random row
1d9d0 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77  id does exist, w
1d9e0 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f  e select a new o
1d9f0 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72  ne.    ** and tr
1da00 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31  y again, up to 1
1da10 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f  00 times..    */
1da20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1da30 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
1da40 63 6e 74 20 3d 20 30 3b 0a 0a 23 69 66 64 65 66  cnt = 0;..#ifdef
1da50 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f   SQLITE_32BIT_RO
1da60 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d  WID.#   define M
1da70 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66  AX_ROWID 0x7ffff
1da80 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a  fff.#else.    /*
1da90 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20   Some compilers 
1daa0 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63  complain about c
1dab0 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20  onstants of the 
1dac0 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66 66  form 0x7ffffffff
1dad0 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20  fffffff..    ** 
1dae0 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20  Others complain 
1daf0 61 62 6f 75 74 20 30 78 37 66 66 66 66 66 66 66  about 0x7fffffff
1db00 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68  fffffffffLL.  Th
1db10 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1db20 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74  o seems.    ** t
1db30 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f  o provide the co
1db40 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b  nstant while mak
1db50 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72  ing all compiler
1db60 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a  s happy..    */.
1db70 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52  #   define MAX_R
1db80 4f 57 49 44 20 20 28 69 36 34 29 28 20 28 28 28  OWID  (i64)( (((
1db90 75 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c  u64)0x7fffffff)<
1dba0 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78 66 66  <32) | (u64)0xff
1dbb0 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a  ffffff ).#endif.
1dbc0 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73  .    if( !pC->us
1dbd0 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
1dbe0 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65        v = sqlite
1dbf0 33 42 74 72 65 65 47 65 74 43 61 63 68 65 64 52  3BtreeGetCachedR
1dc00 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  owid(pC->pCursor
1dc10 29 3b 0a 20 20 20 20 20 20 69 66 28 20 76 3d 3d  );.      if( v==
1dc20 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  0 ){.        rc 
1dc30 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
1dc40 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  st(pC->pCursor, 
1dc50 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69  &res);.        i
1dc60 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1dc70 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f   ){.          go
1dc80 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1dc90 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d  error;.        }
1dca0 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 65 73  .        if( res
1dcb0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20   ){.          v 
1dcc0 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  = 1;   /* IMP: R
1dcd0 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a  -61914-48074 */.
1dce0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1dcf0 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
1dd00 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1dd10 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 70  sorIsValid(pC->p
1dd20 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
1dd30 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1dd40 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
1dd50 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a  ->pCursor, &v);.
1dd60 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
1dd70 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1dd80 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 66  );   /* Cannot f
1dd90 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42 74  ail following Bt
1dda0 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 20  reeLast() */.   
1ddb0 20 20 20 20 20 20 20 69 66 28 20 76 3d 3d 4d 41         if( v==MA
1ddc0 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20  X_ROWID ){.     
1ddd0 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61         pC->useRa
1dde0 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20  ndomRowid = 1;. 
1ddf0 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
1de00 20 20 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b              v++;
1de10 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35     /* IMP: R-295
1de20 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20  38-34987 */.    
1de30 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1de40 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69 66 6e 64  }.      }..#ifnd
1de50 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
1de60 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20  UTOINCREMENT.   
1de70 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29     if( pOp->p3 )
1de80 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73  {.        /* Ass
1de90 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
1dea0 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
1deb0 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  ll. */.        a
1dec0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
1ded0 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   );.        if( 
1dee0 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
1def0 20 20 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d         for(pFram
1df00 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
1df10 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46  ame->pParent; pF
1df20 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
1df30 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20  rent);.         
1df40 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
1df50 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
1df60 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
1df70 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1df80 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d  pOp->p3<=pFrame-
1df90 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20  >nMem );.       
1dfa0 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d     pMem = &pFram
1dfb0 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  e->aMem[pOp->p3]
1dfc0 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
1dfd0 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 73  .          /* As
1dfe0 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
1dff0 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
1e000 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
1e010 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e020 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
1e030 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
1e040 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1e050 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
1e060 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
1e070 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b  (pOp->p3, pMem);
1e080 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1e090 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
1e0a0 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20  y(pMem);.       
1e0b0 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
1e0c0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1e0d0 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50  !=0 );  /* mem(P
1e0e0 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  3) holds an inte
1e0f0 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ger */.        i
1e100 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41  f( pMem->u.i==MA
1e110 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75  X_ROWID || pC->u
1e120 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
1e130 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
1e140 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
1e150 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37 35 2d 36  * IMP: R-12275-6
1e160 31 33 33 38 20 2a 2f 0a 20 20 20 20 20 20 20 20  1338 */.        
1e170 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1e180 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1e190 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
1e1a0 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29   v<pMem->u.i+1 )
1e1b0 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20 3d 20  {.          v = 
1e1c0 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20  pMem->u.i + 1;. 
1e1d0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1e1e0 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pMem->u.i = v;.
1e1f0 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a        }.#endif..
1e200 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
1e210 65 65 53 65 74 43 61 63 68 65 64 52 6f 77 69 64  eeSetCachedRowid
1e220 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 76 3c  (pC->pCursor, v<
1e230 4d 41 58 5f 52 4f 57 49 44 20 3f 20 76 2b 31 20  MAX_ROWID ? v+1 
1e240 3a 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  : 0);.    }.    
1e250 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f  if( pC->useRando
1e260 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
1e270 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f  /* IMPLEMENTATIO
1e280 4e 2d 4f 46 3a 20 52 2d 34 38 35 39 38 2d 30 32  N-OF: R-48598-02
1e290 39 33 38 20 49 66 20 74 68 65 20 6c 61 72 67 65  938 If the large
1e2a0 73 74 20 52 4f 57 49 44 20 69 73 20 65 71 75 61  st ROWID is equa
1e2b0 6c 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a  l to the.      *
1e2c0 2a 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62  * largest possib
1e2d0 6c 65 20 69 6e 74 65 67 65 72 20 28 39 32 32 33  le integer (9223
1e2e0 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37 29  372036854775807)
1e2f0 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61   then the databa
1e300 73 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69  se.      ** engi
1e310 6e 65 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e  ne starts pickin
1e320 67 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49  g candidate ROWI
1e330 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74  Ds at random unt
1e340 69 6c 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 0a  il it finds one.
1e350 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 69 73        ** that is
1e360 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
1e370 75 73 65 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  used..      */. 
1e380 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1e390 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57  ->p3==0 );  /* W
1e3a0 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72  e cannot be in r
1e3b0 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65  andom rowid mode
1e3c0 20 69 66 20 74 68 69 73 20 69 73 0a 20 20 20 20   if this is.    
1e3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3e0 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41           ** an A
1e3f0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62  UTOINCREMENT tab
1e400 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d  le. */.      v =
1e410 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
1e420 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20        cnt = 0;. 
1e430 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
1e440 20 69 66 28 20 63 6e 74 3d 3d 30 20 26 26 20 28   if( cnt==0 && (
1e450 76 26 30 78 66 66 66 66 66 66 29 3d 3d 76 20 29  v&0xffffff)==v )
1e460 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b  {.          v++;
1e470 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
1e480 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
1e490 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a  3_randomness(siz
1e4a0 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20  eof(v), &v);.   
1e4b0 20 20 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35         if( cnt<5
1e4c0 20 29 20 76 20 26 3d 20 30 78 66 66 66 66 66 66   ) v &= 0xffffff
1e4d0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1e4e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1e4f0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1e500 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1e510 20 30 2c 20 28 75 36 34 29 76 2c 20 30 2c 20 26   0, (u64)v, 0, &
1e520 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 63 6e  res);.        cn
1e530 74 2b 2b 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c  t++;.      }whil
1e540 65 28 20 63 6e 74 3c 31 30 30 20 26 26 20 72 63  e( cnt<100 && rc
1e550 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
1e560 65 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  es==0 );.      i
1e570 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1e580 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20   && res==0 ){.  
1e590 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
1e5a0 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50  E_FULL;   /* IMP
1e5b0 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20  : R-38219-53002 
1e5c0 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  */.        goto 
1e5d0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1e5e0 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
1e5f0 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49  }.    pC->rowidI
1e600 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
1e610 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1e620 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
1e630 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1e640 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
1e650 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pOut->u.i = v;.
1e660 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1e670 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31  pcode: Insert P1
1e680 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
1e690 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72  ** Write an entr
1e6a0 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65  y into the table
1e6b0 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20   of cursor P1.  
1e6c0 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a  A new entry is.*
1e6d0 2a 20 63 72 65 61 74 65 64 20 69 66 20 69 74 20  * created if it 
1e6e0 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20  doesn't already 
1e6f0 65 78 69 73 74 20 6f 72 20 74 68 65 20 64 61 74  exist or the dat
1e700 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e  a for an existin
1e710 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76  g.** entry is ov
1e720 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20  erwritten.  The 
1e730 64 61 74 61 20 69 73 20 74 68 65 20 76 61 6c 75  data is the valu
1e740 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65  e MEM_Blob store
1e750 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a  d in register.**
1e760 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20   number P2. The 
1e770 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e  key is stored in
1e780 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 54 68   register P3. Th
1e790 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65  e key must.** be
1e7a0 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a   a MEM_Int..**.*
1e7b0 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
1e7c0 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20  NCHANGE flag of 
1e7d0 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  P5 is set, then 
1e7e0 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63  the row change c
1e7f0 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65  ount is.** incre
1e800 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73  mented (otherwis
1e810 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20  e not).  If the 
1e820 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
1e830 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
1e840 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69  et,.** then rowi
1e850 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20  d is stored for 
1e860 73 75 62 73 65 71 75 65 6e 74 20 72 65 74 75 72  subsequent retur
1e870 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69  n by the.** sqli
1e880 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
1e890 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e  rowid() function
1e8a0 20 28 6f 74 68 65 72 77 69 73 65 20 69 74 20 69   (otherwise it i
1e8b0 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a  s unmodified)..*
1e8c0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
1e8d0 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
1e8e0 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
1e8f0 65 74 20 61 6e 64 20 69 66 20 74 68 65 20 72 65  et and if the re
1e900 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c  sult of.** the l
1e910 61 73 74 20 73 65 65 6b 20 6f 70 65 72 61 74 69  ast seek operati
1e920 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73  on (OP_NotExists
1e930 29 20 77 61 73 20 61 20 73 75 63 63 65 73 73 2c  ) was a success,
1e940 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70   then this.** op
1e950 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74  eration will not
1e960 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64   attempt to find
1e970 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
1e980 20 72 6f 77 20 62 65 66 6f 72 65 20 64 6f 69 6e   row before doin
1e990 67 0a 2a 2a 20 74 68 65 20 69 6e 73 65 72 74 20  g.** the insert 
1e9a0 62 75 74 20 77 69 6c 6c 20 69 6e 73 74 65 61 64  but will instead
1e9b0 20 6f 76 65 72 77 72 69 74 65 20 74 68 65 20 72   overwrite the r
1e9c0 6f 77 20 74 68 61 74 20 74 68 65 20 63 75 72 73  ow that the curs
1e9d0 6f 72 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e 74  or is.** current
1e9e0 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20  ly pointing to. 
1e9f0 20 50 72 65 73 75 6d 61 62 6c 79 2c 20 74 68 65   Presumably, the
1ea00 20 70 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78 69   prior OP_NotExi
1ea10 73 74 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61  sts opcode.** ha
1ea20 73 20 61 6c 72 65 61 64 79 20 70 6f 73 69 74 69  s already positi
1ea30 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72 20  oned the cursor 
1ea40 63 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73  correctly.  This
1ea50 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74   is an optimizat
1ea60 69 6f 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73  ion.** that boos
1ea70 74 73 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 62  ts performance b
1ea80 79 20 61 76 6f 69 64 69 6e 67 20 72 65 64 75 6e  y avoiding redun
1ea90 64 61 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a  dant seeks..**.*
1eaa0 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
1eab0 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69 73  ISUPDATE flag is
1eac0 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20   set, then this 
1ead0 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f  opcode is part o
1eae0 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f  f an.** UPDATE o
1eaf0 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72  peration.  Other
1eb00 77 69 73 65 20 28 69 66 20 74 68 65 20 66 6c 61  wise (if the fla
1eb10 67 20 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e  g is clear) then
1eb20 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20   this opcode.** 
1eb30 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e  is part of an IN
1eb40 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20  SERT operation. 
1eb50 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
1eb60 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e  is only importan
1eb70 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61  t to.** the upda
1eb80 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50  te hook..**.** P
1eb90 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20  arameter P4 may 
1eba0 70 6f 69 6e 74 20 74 6f 20 61 20 73 74 72 69 6e  point to a strin
1ebb0 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  g containing the
1ebc0 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a   table-name, or.
1ebd0 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20  ** may be NULL. 
1ebe0 49 66 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c  If it is not NUL
1ebf0 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64 61  L, then the upda
1ec00 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c  te-hook .** (sql
1ec10 69 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c  ite3.xUpdateCall
1ec20 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64  back) is invoked
1ec30 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63   following a suc
1ec40 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a  cessful insert..
1ec50 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54  **.** (WARNING/T
1ec60 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20  ODO: If P1 is a 
1ec70 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e  pseudo-cursor an
1ec80 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61  d P2 is dynamica
1ec90 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64  lly.** allocated
1eca0 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70  , then ownership
1ecb0 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73 66   of P2 is transf
1ecc0 65 72 72 65 64 20 74 6f 20 74 68 65 20 70 73 65  erred to the pse
1ecd0 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e  udo-cursor.** an
1ece0 64 20 72 65 67 69 73 74 65 72 20 50 32 20 62 65  d register P2 be
1ecf0 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e  comes ephemeral.
1ed00 20 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20    If the cursor 
1ed10 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a  is changed, the.
1ed20 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  ** value of regi
1ed30 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65  ster P2 will the
1ed40 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20  n change.  Make 
1ed50 73 75 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e  sure this does n
1ed60 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20  ot.** cause any 
1ed70 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a  problems.).**.**
1ed80 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
1ed90 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20  n only works on 
1eda0 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75  tables.  The equ
1edb0 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
1edc0 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63  ion.** for indic
1edd0 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65  es is OP_IdxInse
1ede0 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  rt..*/./* Opcode
1edf0 3a 20 49 6e 73 65 72 74 49 6e 74 20 50 31 20 50  : InsertInt P1 P
1ee00 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
1ee10 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63   This works exac
1ee20 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65  tly like OP_Inse
1ee30 72 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74  rt except that t
1ee40 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a  he key is the.**
1ee50 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
1ee60 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65  3, not the value
1ee70 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20   of the integer 
1ee80 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
1ee90 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
1eea0 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20  P_Insert: .case 
1eeb0 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a  OP_InsertInt: {.
1eec0 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20    Mem *pData;   
1eed0 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20      /* MEM cell 
1eee0 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72  holding data for
1eef0 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62   the record to b
1ef00 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20  e inserted */.  
1ef10 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20  Mem *pKey;      
1ef20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f    /* MEM cell ho
1ef30 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74  lding key  for t
1ef40 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
1ef50 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20  64 iKey;        
1ef60 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20   /* The integer 
1ef70 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72  ROWID or key for
1ef80 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62   the record to b
1ef90 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20  e inserted */.  
1efa0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
1efb0 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74    /* Cursor to t
1efc0 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20  able into which 
1efd0 69 6e 73 65 72 74 20 69 73 20 77 72 69 74 74 65  insert is writte
1efe0 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f  n */.  int nZero
1eff0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1f000 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73  er of zero-bytes
1f010 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20   to append */.  
1f020 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20  int seekResult; 
1f030 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70    /* Result of p
1f040 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69  rior seek or 0 i
1f050 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55  f no USESEEKRESU
1f060 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e  LT flag */.  con
1f070 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f  st char *zDb;  /
1f080 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  * database name 
1f090 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 75 70  - used by the up
1f0a0 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63  date hook */.  c
1f0b0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b  onst char *zTbl;
1f0c0 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d   /* Table name -
1f0d0 20 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 64   used by the opd
1f0e0 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e  ate hook */.  in
1f0f0 74 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  t op;           
1f100 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70  /* Opcode for up
1f110 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54  date hook: SQLIT
1f120 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49  E_UPDATE or SQLI
1f130 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20  TE_INSERT */..  
1f140 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f  pData = &aMem[pO
1f150 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
1f160 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1f170 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1f180 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1f190 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1f1a0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1f1b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1f1c0 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
1f1d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
1f1e0 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
1f1f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1f200 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47  isTable );.  REG
1f210 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
1f220 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20  >p2, pData);..  
1f230 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
1f240 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20  =OP_Insert ){.  
1f250 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70    pKey = &aMem[p
1f260 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73  Op->p3];.    ass
1f270 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73  ert( pKey->flags
1f280 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
1f290 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
1f2a0 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b  (pOp->p3, pKey);
1f2b0 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4b 65 79  .    iKey = pKey
1f2c0 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->u.i;.  }else{.
1f2d0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1f2e0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65  >opcode==OP_Inse
1f2f0 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65  rtInt );.    iKe
1f300 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  y = pOp->p3;.  }
1f310 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ..  if( pOp->p5 
1f320 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
1f330 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
1f340 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
1f350 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
1f360 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  D ) db->lastRowi
1f370 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28 20  d = iKey;.  if( 
1f380 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
1f390 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70  EM_Null ){.    p
1f3a0 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20  Data->z = 0;.   
1f3b0 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20   pData->n = 0;. 
1f3c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
1f3d0 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  rt( pData->flags
1f3e0 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d   & (MEM_Blob|MEM
1f3f0 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20 73  _Str) );.  }.  s
1f400 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f  eekResult = ((pO
1f410 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55  p->p5 & OPFLAG_U
1f420 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20  SESEEKRESULT) ? 
1f430 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a  pC->seekResult :
1f440 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61   0);.  if( pData
1f450 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ->flags & MEM_Ze
1f460 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f 20  ro ){.    nZero 
1f470 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f  = pData->u.nZero
1f480 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e  ;.  }else{.    n
1f490 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Zero = 0;.  }.  
1f4a0 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
1f4b0 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
1f4c0 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63  Cursor, 0);.  rc
1f4d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
1f4e0 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73 6f  nsert(pC->pCurso
1f4f0 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20  r, 0, iKey,.    
1f500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f510 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20        pData->z, 
1f520 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c  pData->n, nZero,
1f530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f540 20 20 20 20 20 20 20 20 20 20 20 70 4f 70 2d 3e             pOp->
1f550 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45  p5 & OPFLAG_APPE
1f560 4e 44 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20  ND, seekResult. 
1f570 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49   );.  pC->rowidI
1f580 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43  sValid = 0;.  pC
1f590 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1f5a0 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
1f5b0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1f5c0 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
1f5d0 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
1f5e0 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
1f5f0 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
1f600 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78  LITE_OK && db->x
1f610 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
1f620 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
1f630 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62     zDb = db->aDb
1f640 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b  [pC->iDb].zName;
1f650 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d  .    zTbl = pOp-
1f660 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20  >p4.z;.    op = 
1f670 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
1f680 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53  AG_ISUPDATE) ? S
1f690 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53  QLITE_UPDATE : S
1f6a0 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20  QLITE_INSERT);. 
1f6b0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
1f6c0 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62  sTable );.    db
1f6d0 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
1f6e0 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
1f6f0 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c  , op, zDb, zTbl,
1f700 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65   iKey);.    asse
1f710 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
1f720 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1f730 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c  ../* Opcode: Del
1f740 65 74 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ete P1 P2 * P4 *
1f750 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68  .**.** Delete th
1f760 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63  e record at whic
1f770 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  h the P1 cursor 
1f780 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
1f790 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  nting..**.** The
1f7a0 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20   cursor will be 
1f7b0 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
1f7c0 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74   either the next
1f7d0 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73   or the previous
1f7e0 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68  .** record in th
1f7f0 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69  e table. If it i
1f800 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
1f810 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f  at the next reco
1f820 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  rd, then.** the 
1f830 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75  next Next instru
1f840 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20  ction will be a 
1f850 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74  no-op.  Hence it
1f860 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65   is OK to delete
1f870 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f  .** a record fro
1f880 6d 20 77 69 74 68 69 6e 20 61 6e 20 4e 65 78 74  m within an Next
1f890 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   loop..**.** If 
1f8a0 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
1f8b0 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73  GE flag of P2 is
1f8c0 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
1f8d0 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
1f8e0 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
1f8f0 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
1f900 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74  )..**.** P1 must
1f910 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74   not be pseudo-t
1f920 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f  able.  It has to
1f930 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65   be a real table
1f940 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c   with.** multipl
1f950 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  e rows..**.** If
1f960 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
1f970 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20   then it is the 
1f980 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
1f990 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20  e that P1 is.** 
1f9a0 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68  pointing to.  Th
1f9b0 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69  e update hook wi
1f9c0 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69  ll be invoked, i
1f9d0 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20  f it exists..** 
1f9e0 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
1f9f0 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20 63 75  L then the P1 cu
1fa00 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62  rsor must have b
1fa10 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a  een positioned.*
1fa20 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f  * using OP_NotFo
1fa30 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76  und prior to inv
1fa40 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  oking this opcod
1fa50 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  e..*/.case OP_De
1fa60 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34 20 69 4b  lete: {.  i64 iK
1fa70 65 79 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ey;.  VdbeCursor
1fa80 20 2a 70 43 3b 0a 0a 20 20 69 4b 65 79 20 3d 20   *pC;..  iKey = 
1fa90 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
1faa0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1fab0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1fac0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1fad0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1fae0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1faf0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
1fb00 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e  sor!=0 );  /* On
1fb10 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65 61  ly valid for rea
1fb20 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65  l tables, no pse
1fb30 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 0a 20 20  udotables */..  
1fb40 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61 74 65  /* If the update
1fb50 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e  -hook will be in
1fb60 76 6f 6b 65 64 2c 20 73 65 74 20 69 4b 65 79 20  voked, set iKey 
1fb70 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  to the rowid of 
1fb80 74 68 65 0a 20 20 2a 2a 20 72 6f 77 20 62 65 69  the.  ** row bei
1fb90 6e 67 20 64 65 6c 65 74 65 64 2e 0a 20 20 2a 2f  ng deleted..  */
1fba0 0a 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61  .  if( db->xUpda
1fbb0 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
1fbc0 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 61  p->p4.z ){.    a
1fbd0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1fbe0 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  le );.    assert
1fbf0 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
1fc00 69 64 20 29 3b 20 20 2f 2a 20 6c 61 73 74 52 6f  id );  /* lastRo
1fc10 77 69 64 20 73 65 74 20 62 79 20 70 72 65 76 69  wid set by previ
1fc20 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  ous OP_NotFound 
1fc30 2a 2f 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 43  */.    iKey = pC
1fc40 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d  ->lastRowid;.  }
1fc50 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44 65  ..  /* The OP_De
1fc60 6c 65 74 65 20 6f 70 63 6f 64 65 20 61 6c 77 61  lete opcode alwa
1fc70 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50  ys follows an OP
1fc80 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 4f 50  _NotExists or OP
1fc90 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f 50  _Last or.  ** OP
1fca0 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20 73  _Column on the s
1fcb0 61 6d 65 20 74 61 62 6c 65 20 77 69 74 68 6f 75  ame table withou
1fcc0 74 20 61 6e 79 20 69 6e 74 65 72 76 65 6e 69 6e  t any intervenin
1fcd0 67 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 68 61  g operations tha
1fce0 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f 76  t.  ** might mov
1fcf0 65 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65 20  e or invalidate 
1fd00 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e  the cursor.  Hen
1fd10 63 65 20 63 75 72 73 6f 72 20 70 43 20 69 73 20  ce cursor pC is 
1fd20 61 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e 67 0a  always pointing.
1fd30 20 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77 20    ** to the row 
1fd40 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61 6e  to be deleted an
1fd50 64 20 74 68 65 20 73 71 6c 69 74 65 33 56 64 62  d the sqlite3Vdb
1fd60 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20  eCursorMoveto() 
1fd70 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 62  operation.  ** b
1fd80 65 6c 6f 77 20 69 73 20 61 6c 77 61 79 73 20 61  elow is always a
1fd90 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e 6f   no-op and canno
1fda0 74 20 66 61 69 6c 2e 20 20 57 65 20 77 69 6c 6c  t fail.  We will
1fdb0 20 72 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c 20   run it anyhow, 
1fdc0 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f 20  though,.  ** to 
1fdd0 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 66 75  guard against fu
1fde0 74 75 72 65 20 63 68 61 6e 67 65 73 20 74 6f 20  ture changes to 
1fdf0 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
1fe00 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73 65  or..  **/.  asse
1fe10 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
1fe20 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72  Moveto==0 );.  r
1fe30 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
1fe40 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
1fe50 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21  .  if( NEVER(rc!
1fe60 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f  =SQLITE_OK) ) go
1fe70 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1fe80 65 72 72 6f 72 3b 0a 0a 20 20 73 71 6c 69 74 65  error;..  sqlite
1fe90 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52  3BtreeSetCachedR
1fea0 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  owid(pC->pCursor
1feb0 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  , 0);.  rc = sql
1fec0 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
1fed0 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
1fee0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1fef0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
1ff00 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
1ff10 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
1ff20 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
1ff30 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1ff40 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
1ff50 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
1ff60 34 2e 7a 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  4.z ){.    const
1ff70 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d   char *zDb = db-
1ff80 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
1ff90 61 6d 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  ame;.    const c
1ffa0 68 61 72 20 2a 7a 54 62 6c 20 3d 20 70 4f 70 2d  har *zTbl = pOp-
1ffb0 3e 70 34 2e 7a 3b 0a 20 20 20 20 64 62 2d 3e 78  >p4.z;.    db->x
1ffc0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
1ffd0 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53  b->pUpdateArg, S
1ffe0 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44  QLITE_DELETE, zD
1fff0 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a  b, zTbl, iKey);.
20000 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
20010 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  iDb>=0 );.  }.  
20020 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50  if( pOp->p2 & OP
20030 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
20040 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62  ->nChange++;.  b
20050 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  reak;.}./* Opcod
20060 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20  e: ResetCount * 
20070 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
20080 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
20090 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
200a0 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64   copied to the d
200b0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a  atabase handle.*
200c0 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  * change counter
200d0 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75   (returned by su
200e0 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74  bsequent calls t
200f0 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  o sqlite3_change
20100 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68  s())..** Then th
20110 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63  e VMs internal c
20120 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65  hange counter re
20130 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68  sets to 0..** Th
20140 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
20150 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
20160 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
20170 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74  Count: {.  sqlit
20180 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
20190 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
201a0 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
201b0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
201c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61  /* Opcode: RowDa
201d0 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ta P1 P2 * * *.*
201e0 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
201f0 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
20200 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74  complete row dat
20210 61 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  a for cursor P1.
20220 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20  .** There is no 
20230 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
20240 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a  f the data.  .**
20250 20 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69   It is just copi
20260 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72  ed onto the P2 r
20270 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20  egister exactly 
20280 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75  as .** it is fou
20290 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nd in the databa
202a0 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  se file..**.** I
202b0 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  f the P1 cursor 
202c0 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67  must be pointing
202d0 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20   to a valid row 
202e0 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29  (not a NULL row)
202f0 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61  .** of a real ta
20300 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
20310 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f  o-table..*/./* O
20320 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31  pcode: RowKey P1
20330 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
20340 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
20350 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c  ter P2 the compl
20360 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20  ete row key for 
20370 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
20380 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70  ere is no interp
20390 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
203a0 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b  data.  .** The k
203b0 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74  ey is copied ont
203c0 6f 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65  o the P3 registe
203d0 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a  r exactly as .**
203e0 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20   it is found in 
203f0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
20400 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
20410 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
20420 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
20430 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
20440 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
20450 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
20460 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
20470 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  e..*/.case OP_Ro
20480 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f  wKey:.case OP_Ro
20490 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43  wData: {.  VdbeC
204a0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
204b0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
204c0 75 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34  u32 n;.  i64 n64
204d0 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ;..  pOut = &aMe
204e0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 0a 20 20 2f  m[pOp->p2];..  /
204f0 2a 20 4e 6f 74 65 20 74 68 61 74 20 52 6f 77 4b  * Note that RowK
20500 65 79 20 61 6e 64 20 52 6f 77 44 61 74 61 20 61  ey and RowData a
20510 72 65 20 72 65 61 6c 6c 79 20 65 78 61 63 74 6c  re really exactl
20520 79 20 74 68 65 20 73 61 6d 65 20 69 6e 73 74 72  y the same instr
20530 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65  uction */.  asse
20540 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
20550 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
20560 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
20570 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
20580 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
20590 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e  isTable || pOp->
205a0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 4b 65  opcode==OP_RowKe
205b0 79 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  y );.  assert( p
205c0 43 2d 3e 69 73 49 6e 64 65 78 20 7c 7c 20 70 4f  C->isIndex || pO
205d0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f  p->opcode==OP_Ro
205e0 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72  wData );.  asser
205f0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
20600 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f  sert( pC->nullRo
20610 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  w==0 );.  assert
20620 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
20630 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73  eReg==0 );.  ass
20640 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
20650 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
20660 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
20670 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
20680 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
20690 64 28 70 43 72 73 72 29 20 29 3b 0a 0a 20 20 2f  d(pCrsr) );..  /
206a0 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20  * The OP_RowKey 
206b0 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f  and OP_RowData o
206c0 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f  pcodes always fo
206d0 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74  llow OP_NotExist
206e0 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77  s or.  ** OP_Rew
206f0 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68  ind/Op_Next with
20700 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20   no intervening 
20710 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61  instructions tha
20720 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61  t might invalida
20730 74 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73  te.  ** the curs
20740 6f 72 2e 20 20 48 65 6e 63 65 20 74 68 65 20 66  or.  Hence the f
20750 6f 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74 65 33  ollowing sqlite3
20760 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
20770 28 29 20 63 61 6c 6c 20 69 73 20 61 6c 77 61 79  () call is alway
20780 73 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61  s.  ** a no-op a
20790 6e 64 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69  nd can never fai
207a0 6c 2e 20 20 42 75 74 20 77 65 20 6c 65 61 76 65  l.  But we leave
207b0 20 69 74 20 69 6e 20 70 6c 61 63 65 20 61 73 20   it in place as 
207c0 61 20 73 61 66 65 74 79 2e 0a 20 20 2a 2f 0a 20  a safety..  */. 
207d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
207e0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
207f0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
20800 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
20810 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  (pC);.  if( NEVE
20820 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29  R(rc!=SQLITE_OK)
20830 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
20840 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69  e_to_error;..  i
20850 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29  f( pC->isIndex )
20860 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70  {.    assert( !p
20870 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
20880 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
20890 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72  reeKeySize(pCrsr
208a0 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20 61 73 73  , &n64);.    ass
208b0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
208c0 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72 75 65  OK );    /* True
208d0 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73   because of Curs
208e0 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20  orMoveto() call 
208f0 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69 66 28  above */.    if(
20900 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b   n64>db->aLimit[
20910 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
20920 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f  GTH] ){.      go
20930 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
20940 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33 32 29 6e  }.    n = (u32)n
20950 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  64;.  }else{.   
20960 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
20970 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72  eeDataSize(pCrsr
20980 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72  , &n);.    asser
20990 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
209a0 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69   );    /* DataSi
209b0 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c  ze() cannot fail
209c0 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75   */.    if( n>(u
209d0 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  32)db->aLimit[SQ
209e0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
209f0 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  H] ){.      goto
20a00 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a   too_big;.    }.
20a10 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
20a20 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
20a30 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20 20 20  t, n, 0) ){.    
20a40 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
20a50 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a  .  pOut->n = n;.
20a60 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
20a70 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29  (pOut, MEM_Blob)
20a80 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e  ;.  if( pC->isIn
20a90 64 65 78 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  dex ){.    rc = 
20aa0 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28  sqlite3BtreeKey(
20ab0 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75  pCrsr, 0, n, pOu
20ac0 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  t->z);.  }else{.
20ad0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
20ae0 42 74 72 65 65 44 61 74 61 28 70 43 72 73 72 2c  BtreeData(pCrsr,
20af0 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b   0, n, pOut->z);
20b00 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  .  }.  pOut->enc
20b10 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20   = SQLITE_UTF8; 
20b20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20   /* In case the 
20b30 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 61 73  blob is ever cas
20b40 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 55  t to text */.  U
20b50 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
20b60 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
20b70 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
20b80 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a   Rowid P1 P2 * *
20b90 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69   *.**.** Store i
20ba0 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  n register P2 an
20bb0 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
20bc0 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65  s the key of the
20bd0 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61   table entry tha
20be0 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65  t.** P1 is curre
20bf0 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a  ntly point to..*
20c00 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65  *.** P1 can be e
20c10 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72  ither an ordinar
20c20 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72  y table or a vir
20c30 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65  tual table.  The
20c40 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  re used to.** be
20c50 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56   a separate OP_V
20c60 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72  Rowid opcode for
20c70 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61   use with virtua
20c80 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68  l tables, but th
20c90 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65  is.** one opcode
20ca0 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62   now works for b
20cb0 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e  oth table types.
20cc0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69  .*/.case OP_Rowi
20cd0 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
20ce0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
20cf0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62  release */.  Vdb
20d00 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
20d10 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f  64 v;.  sqlite3_
20d20 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
20d30 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
20d40 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
20d50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
20d60 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
20d70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
20d80 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
20d90 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
20da0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
20db0 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
20dc0 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 69  bleReg==0 );.  i
20dd0 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
20de0 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
20df0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
20e00 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65    break;.  }else
20e10 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65   if( pC->deferre
20e20 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76  dMoveto ){.    v
20e30 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72   = pC->movetoTar
20e40 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  get;.#ifndef SQL
20e50 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
20e60 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66  TABLE.  }else if
20e70 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  ( pC->pVtabCurso
20e80 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62 20 3d  r ){.    pVtab =
20e90 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72   pC->pVtabCursor
20ea0 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f  ->pVtab;.    pMo
20eb0 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
20ec0 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72  odule;.    asser
20ed0 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77  t( pModule->xRow
20ee0 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70  id );.    rc = p
20ef0 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70  Module->xRowid(p
20f00 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20  C->pVtabCursor, 
20f10 26 76 29 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56  &v);.    importV
20f20 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74  tabErrMsg(p, pVt
20f30 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ab);.#endif /* S
20f40 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
20f50 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c  ALTABLE */.  }el
20f60 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
20f70 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
20f80 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
20f90 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
20fa0 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  to(pC);.    if( 
20fb0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
20fc0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
20fd0 20 20 69 66 28 20 70 43 2d 3e 72 6f 77 69 64 49    if( pC->rowidI
20fe0 73 56 61 6c 69 64 20 29 7b 0a 20 20 20 20 20 20  sValid ){.      
20ff0 76 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69  v = pC->lastRowi
21000 64 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  d;.    }else{.  
21010 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
21020 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d  BtreeKeySize(pC-
21030 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  >pCursor, &v);. 
21040 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d       assert( rc=
21050 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f  =SQLITE_OK );  /
21060 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65 63 61  * Always so beca
21070 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76  use of CursorMov
21080 65 74 6f 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20  eto() above */. 
21090 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d     }.  }.  pOut-
210a0 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61  >u.i = v;.  brea
210b0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
210c0 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20   NullRow P1 * * 
210d0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74  * *.**.** Move t
210e0 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  he cursor P1 to 
210f0 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79  a null row.  Any
21100 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61   OP_Column opera
21110 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63  tions.** that oc
21120 63 75 72 20 77 68 69 6c 65 20 74 68 65 20 63 75  cur while the cu
21130 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e  rsor is on the n
21140 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77  ull row will alw
21150 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e  ays.** write a N
21160 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
21170 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62  NullRow: {.  Vdb
21180 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
21190 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
211a0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
211b0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
211c0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
211d0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
211e0 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e  pC!=0 );.  pC->n
211f0 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
21200 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
21210 20 30 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43   0;.  if( pC->pC
21220 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  ursor ){.    sql
21230 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 43 75  ite3BtreeClearCu
21240 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72  rsor(pC->pCursor
21250 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
21260 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61  }../* Opcode: La
21270 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  st P1 P2 * * *.*
21280 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
21290 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
212a0 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74  r Column or Next
212b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
212c0 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
212d0 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65  er to the last e
212e0 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61  ntry in the data
212f0 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
21300 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74  dex..** If the t
21310 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
21320 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c   empty and P2>0,
21330 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
21340 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
21350 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69   If P2 is 0 or i
21360 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
21370 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
21380 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  y, fall through.
21390 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
213a0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
213b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74  .*/.case OP_Last
213c0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
213d0 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
213e0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
213f0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
21400 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28   res;..  assert(
21410 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
21420 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
21430 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
21440 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
21450 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
21460 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
21470 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70  pCursor;.  if( p
21480 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20 72  Crsr==0 ){.    r
21490 65 73 20 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  es = 1;.  }else{
214a0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
214b0 33 42 74 72 65 65 4c 61 73 74 28 70 43 72 73 72  3BtreeLast(pCrsr
214c0 2c 20 26 72 65 73 29 3b 0a 20 20 7d 0a 20 20 70  , &res);.  }.  p
214d0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
214e0 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65  )res;.  pC->defe
214f0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
21500 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
21510 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  id = 0;.  pC->ca
21520 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
21530 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70  E_STALE;.  if( p
21540 4f 70 2d 3e 70 32 3e 30 20 26 26 20 72 65 73 20  Op->p2>0 && res 
21550 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
21560 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
21570 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
21580 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20  ode: Sort P1 P2 
21590 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
215a0 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61   opcode does exa
215b0 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68  ctly the same th
215c0 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64  ing as OP_Rewind
215d0 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
215e0 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e  it increments an
215f0 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c   undocumented gl
21600 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73  obal variable us
21610 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a  ed for testing..
21620 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73  **.** Sorting is
21630 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79   accomplished by
21640 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73   writing records
21650 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20   into a sorting 
21660 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72  index,.** then r
21670 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e  ewinding that in
21680 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20  dex and playing 
21690 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67  it back from beg
216a0 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64  inning to.** end
216b0 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f 50  .  We use the OP
216c0 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73  _Sort opcode ins
216d0 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e  tead of OP_Rewin
216e0 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72  d to do the.** r
216f0 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74  ewinding so that
21700 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
21710 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63  able will be inc
21720 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20  remented and.** 
21730 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
21740 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77   can determine w
21750 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
21760 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a  e optimizer is.*
21770 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69  * correctly opti
21780 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73  mizing out sorts
21790 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
217a0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
217b0 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ump */.#ifdef SQ
217c0 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
217d0 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b  te3_sort_count++
217e0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  ;.  sqlite3_sear
217f0 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64  ch_count--;.#end
21800 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  if.  p->aCounter
21810 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
21820 55 53 5f 53 4f 52 54 2d 31 5d 2b 2b 3b 0a 20 20  US_SORT-1]++;.  
21830 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
21840 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a  into OP_Rewind *
21850 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  /.}./* Opcode: R
21860 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20  ewind P1 P2 * * 
21870 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74  *.**.** The next
21880 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69   use of the Rowi
21890 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e  d or Column or N
218a0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
218b0 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20  for P1 .** will 
218c0 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69 72  refer to the fir
218d0 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
218e0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
218f0 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74  r index..** If t
21900 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
21910 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50  x is empty and P
21920 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  2>0, then jump i
21930 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
21940 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20  ..** If P2 is 0 
21950 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20  or if the table 
21960 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20  or index is not 
21970 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f  empty, fall thro
21980 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
21990 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
219a0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
219b0 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20  Rewind: {       
219c0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
219d0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
219e0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
219f0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61  .  int res;..  a
21a00 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
21a10 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
21a20 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
21a30 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
21a40 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
21a50 43 21 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d 20  C!=0 );.  res = 
21a60 31 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72 20  1;.  if( (pCrsr 
21a70 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 29 21 3d  = pC->pCursor)!=
21a80 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
21a90 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28  lite3BtreeFirst(
21aa0 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
21ab0 20 20 70 43 2d 3e 61 74 46 69 72 73 74 20 3d 20    pC->atFirst = 
21ac0 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20  res==0 ?1:0;.   
21ad0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
21ae0 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
21af0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
21b00 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
21b10 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
21b20 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e   = 0;.  }.  pC->
21b30 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
21b40 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  s;.  assert( pOp
21b50 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
21b60 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66  2<p->nOp );.  if
21b70 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  ( res ){.    pc 
21b80 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
21b90 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
21ba0 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50  * Opcode: Next P
21bb0 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a  1 P2 * * P5.**.*
21bc0 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72  * Advance cursor
21bd0 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
21be0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78  oints to the nex
21bf0 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  t key/data pair 
21c00 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
21c10 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
21c20 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20  ere are no more 
21c30 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
21c40 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
21c50 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
21c60 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
21c70 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
21c80 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61  ursor advance wa
21c90 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
21ca0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
21cb0 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  y to P2..**.** T
21cc0 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
21cd0 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
21ce0 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
21cf0 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  udo-table..**.**
21d00 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69   If P5 is positi
21d10 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20  ve and the jump 
21d20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65  is taken, then e
21d30 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20  vent counter.** 
21d40 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74  number P5-1 in t
21d50 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
21d60 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  ement is increme
21d70 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  nted..**.** See 
21d80 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a  also: Prev.*/./*
21d90 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31   Opcode: Prev P1
21da0 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a   P2 * * P5.**.**
21db0 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20   Back up cursor 
21dc0 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
21dd0 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76  ints to the prev
21de0 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61  ious key/data pa
21df0 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62  ir in its.** tab
21e00 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66  le or index.  If
21e10 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65   there is no pre
21e20 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20  vious key/value 
21e30 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
21e40 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
21e50 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
21e60 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
21e70 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b   the cursor back
21e80 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75  up was successfu
21e90 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64  l,.** jump immed
21ea0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
21eb0 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f  .** The P1 curso
21ec0 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20  r must be for a 
21ed0 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
21ee0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
21ef0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
21f00 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
21f10 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
21f20 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
21f30 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
21f40 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
21f50 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
21f60 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 63 61  cremented..*/.ca
21f70 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20  se OP_Prev:     
21f80 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
21f90 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 7b 20  case OP_Next: { 
21fa0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
21fb0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
21fc0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
21fd0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
21fe0 3b 0a 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49  ;..  CHECK_FOR_I
21ff0 4e 54 45 52 52 55 50 54 3b 0a 20 20 61 73 73 65  NTERRUPT;.  asse
22000 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
22010 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
22020 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
22030 28 20 70 4f 70 2d 3e 70 35 3c 3d 41 72 72 61 79  ( pOp->p5<=Array
22040 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72  Size(p->aCounter
22050 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ) );.  pC = p->a
22060 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
22070 20 69 66 28 20 70 43 3d 3d 30 20 29 7b 0a 20 20   if( pC==0 ){.  
22080 20 20 62 72 65 61 6b 3b 20 20 2f 2a 20 53 65 65    break;  /* See
22090 20 74 69 63 6b 65 74 20 23 32 32 37 33 20 2a 2f   ticket #2273 */
220a0 0a 20 20 7d 0a 20 20 70 43 72 73 72 20 3d 20 70  .  }.  pCrsr = p
220b0 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66  C->pCursor;.  if
220c0 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20  ( pCrsr==0 ){.  
220d0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
220e0 31 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  1;.    break;.  
220f0 7d 0a 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 61  }.  res = 1;.  a
22100 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
22110 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
22120 20 20 72 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    rc = pOp->opco
22130 64 65 3d 3d 4f 50 5f 4e 65 78 74 20 3f 20 73 71  de==OP_Next ? sq
22140 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70  lite3BtreeNext(p
22150 43 72 73 72 2c 20 26 72 65 73 29 20 3a 0a 20 20  Crsr, &res) :.  
22160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22170 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
22180 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
22190 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
221a0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
221b0 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 63 61  u8)res;.  pC->ca
221c0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
221d0 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72  E_STALE;.  if( r
221e0 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  es==0 ){.    pc 
221f0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
22200 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29     if( pOp->p5 )
22210 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70   p->aCounter[pOp
22220 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65  ->p5-1]++;.#ifde
22230 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
22240 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
22250 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
22260 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64  .  }.  pC->rowid
22270 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62  IsValid = 0;.  b
22280 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
22290 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31  de: IdxInsert P1
222a0 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a   P2 P3 * P5.**.*
222b0 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f  * Register P2 ho
222c0 6c 64 73 20 61 20 53 51 4c 20 69 6e 64 65 78 20  lds a SQL index 
222d0 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74  key made using t
222e0 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64  he.** MakeRecord
222f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20   instructions.  
22300 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74  This opcode writ
22310 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69  es that key.** i
22320 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31  nto the index P1
22330 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20  .  Data for the 
22340 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a  entry is nil..**
22350 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67  .** P3 is a flag
22360 20 74 68 61 74 20 70 72 6f 76 69 64 65 73 20 61   that provides a
22370 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74   hint to the b-t
22380 72 65 65 20 6c 61 79 65 72 20 74 68 61 74 20 74  ree layer that t
22390 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73  his.** insert is
223a0 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
223b0 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54   append..**.** T
223c0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
223d0 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69  only works for i
223e0 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75  ndices.  The equ
223f0 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
22400 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65  ion.** for table
22410 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a  s is OP_Insert..
22420 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e  */.case OP_IdxIn
22430 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  sert: {        /
22440 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43  * in2 */.  VdbeC
22450 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
22460 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
22470 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73  int nKey;.  cons
22480 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20  t char *zKey;.. 
22490 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
224a0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
224b0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
224c0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
224d0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
224e0 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 49 6e 32   pC!=0 );.  pIn2
224f0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
22500 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
22510 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  2->flags & MEM_B
22520 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  lob );.  pCrsr =
22530 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
22540 69 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72  if( ALWAYS(pCrsr
22550 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65  !=0) ){.    asse
22560 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
22570 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 45  =0 );.    rc = E
22580 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b  xpandBlob(pIn2);
22590 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
225a0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
225b0 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
225c0 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e        zKey = pIn
225d0 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d  2->z;.      rc =
225e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
225f0 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c  ert(pCrsr, zKey,
22600 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c   nKey, "", 0, 0,
22610 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20   pOp->p3, .     
22620 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26       ((pOp->p5 &
22630 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
22640 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
22650 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20  kResult : 0).   
22660 20 20 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65     );.      asse
22670 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
22680 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
22690 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
226a0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
226b0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
226c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
226d0 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31 20  e: IdxDelete P1 
226e0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
226f0 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50  The content of P
22700 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  3 registers star
22710 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72  ting at register
22720 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75   P2 form.** an u
22730 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
22740 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  y. This opcode r
22750 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72  emoves that entr
22760 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69  y from the .** i
22770 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63  ndex opened by c
22780 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ursor P1..*/.cas
22790 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20  e OP_IdxDelete: 
227a0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
227b0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
227c0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
227d0 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
227e0 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
227f0 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
22800 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
22810 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70  0 && pOp->p2+pOp
22820 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  ->p3<=p->nMem+1 
22830 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
22840 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
22850 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
22860 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
22870 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
22880 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
22890 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
228a0 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  sor;.  if( ALWAY
228b0 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20  S(pCrsr!=0) ){. 
228c0 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
228d0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
228e0 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
228f0 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 72  6)pOp->p3;.    r
22900 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20  .flags = 0;.    
22910 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
22920 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 72 63 20  Op->p2];.    rc 
22930 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
22940 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
22950 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72  sr, &r, 0, 0, &r
22960 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  es);.    if( rc=
22970 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65  =SQLITE_OK && re
22980 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63  s==0 ){.      rc
22990 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
229a0 65 6c 65 74 65 28 70 43 72 73 72 29 3b 0a 20 20  elete(pCrsr);.  
229b0 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
229c0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
229d0 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d  to==0 );.    pC-
229e0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
229f0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
22a00 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
22a10 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20  pcode: IdxRowid 
22a20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
22a30 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
22a40 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
22a50 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
22a60 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
22a70 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20  he record at.** 
22a80 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
22a90 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64  ndex key pointed
22aa0 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31   to by cursor P1
22ab0 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20  .  This integer 
22ac0 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65  should be.** the
22ad0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61   rowid of the ta
22ae0 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69  ble entry to whi
22af0 63 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e  ch this index en
22b00 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a  try points..**.*
22b10 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69  * See also: Rowi
22b20 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a  d, MakeRecord..*
22b30 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77  /.case OP_IdxRow
22b40 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
22b50 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
22b60 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 43 75 72  lease */.  BtCur
22b70 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56 64  sor *pCrsr;.  Vd
22b80 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
22b90 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 61 73  i64 rowid;..  as
22ba0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
22bb0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
22bc0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
22bd0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
22be0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
22bf0 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
22c00 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
22c10 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
22c20 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 41 4c  M_Null;.  if( AL
22c30 57 41 59 53 28 70 43 72 73 72 21 3d 30 29 20 29  WAYS(pCrsr!=0) )
22c40 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
22c50 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
22c60 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  to(pC);.    if( 
22c70 4e 45 56 45 52 28 72 63 29 20 29 20 67 6f 74 6f  NEVER(rc) ) goto
22c80 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
22c90 72 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ror;.    assert(
22ca0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
22cb0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73  eto==0 );.    as
22cc0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
22cd0 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20  e==0 );.    if( 
22ce0 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  !pC->nullRow ){.
22cf0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
22d00 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 64  e3VdbeIdxRowid(d
22d10 62 2c 20 70 43 72 73 72 2c 20 26 72 6f 77 69 64  b, pCrsr, &rowid
22d20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
22d30 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
22d40 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
22d50 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
22d60 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4f 75       }.      pOu
22d70 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a  t->u.i = rowid;.
22d80 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67        pOut->flag
22d90 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
22da0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
22db0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
22dc0 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20  xGE P1 P2 P3 P4 
22dd0 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  P5.**.** The P4 
22de0 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
22df0 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
22e00 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
22e10 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
22e20 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
22e30 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20  ROWID.  Compare 
22e40 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
22e50 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
22e60 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
22e70 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
22e80 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
22e90 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  the ROWID on the
22ea0 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
22eb0 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
22ec0 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65   entry is greate
22ed0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
22ee0 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
22ef0 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
22f00 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
22f10 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
22f20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
22f30 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
22f40 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68  5 is non-zero th
22f50 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  en the key value
22f60 20 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79   is increased by
22f70 20 61 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20   an epsilon .** 
22f80 70 72 69 6f 72 20 74 6f 20 74 68 65 20 63 6f 6d  prior to the com
22f90 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d  parison.  This m
22fa0 61 6b 65 20 74 68 65 20 6f 70 63 6f 64 65 20 77  ake the opcode w
22fb0 6f 72 6b 20 6c 69 6b 65 20 49 64 78 47 54 20 65  ork like IdxGT e
22fc0 78 63 65 70 74 0a 2a 2a 20 74 68 61 74 20 69 66  xcept.** that if
22fd0 20 74 68 65 20 6b 65 79 20 66 72 6f 6d 20 72 65   the key from re
22fe0 67 69 73 74 65 72 20 50 33 20 69 73 20 61 20 70  gister P3 is a p
22ff0 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79  refix of the key
23000 20 69 6e 20 74 68 65 20 63 75 72 73 6f 72 2c 0a   in the cursor,.
23010 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  ** the result is
23020 20 66 61 6c 73 65 20 77 68 65 72 65 61 73 20 69   false whereas i
23030 74 20 77 6f 75 6c 64 20 62 65 20 74 72 75 65 20  t would be true 
23040 77 69 74 68 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f  with IdxGT..*/./
23050 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20  * Opcode: IdxLT 
23060 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
23070 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
23080 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
23090 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
230a0 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
230b0 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
230c0 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49  t omits the ROWI
230d0 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  D.  Compare this
230e0 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
230f0 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
23100 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
23110 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
23120 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
23130 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20  ROWID on the P1 
23140 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  index..**.** If 
23150 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
23160 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ry is less than 
23170 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68  the key value th
23180 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
23190 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c  * Otherwise fall
231a0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
231b0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
231c0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
231d0 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74   non-zero then t
231e0 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20  he key value is 
231f0 69 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20  increased by an 
23200 65 70 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a  epsilon prior .*
23210 2a 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  * to the compari
23220 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 73  son.  This makes
23230 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b   the opcode work
23240 20 6c 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a   like IdxLE..*/.
23250 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20  case OP_IdxLT:  
23260 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
23270 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45  */.case OP_IdxGE
23280 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
23290 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
232a0 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
232b0 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
232c0 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74  ord r;..  assert
232d0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
232e0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
232f0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
23300 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
23310 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
23320 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  );.  if( ALWAYS(
23330 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20  pC->pCursor!=0) 
23340 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
23350 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
23360 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  o==0 );.    asse
23370 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c  rt( pOp->p5==0 |
23380 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a  | pOp->p5==1 );.
23390 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
233a0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
233b0 32 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49  2 );.    r.pKeyI
233c0 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
233d0 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64  fo;.    r.nField
233e0 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e   = (u16)pOp->p4.
233f0 69 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  i;.    if( pOp->
23400 70 35 20 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c  p5 ){.      r.fl
23410 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49  ags = UNPACKED_I
23420 4e 43 52 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45  NCRKEY | UNPACKE
23430 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a  D_IGNORE_ROWID;.
23440 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
23450 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
23460 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44  KED_IGNORE_ROWID
23470 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d  ;.    }.    r.aM
23480 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
23490 70 33 5d 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  p3];.    rc = sq
234a0 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43  lite3VdbeIdxKeyC
234b0 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20 26  ompare(pC, &r, &
234c0 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  res);.    if( pO
234d0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
234e0 78 4c 54 20 29 7b 0a 20 20 20 20 20 20 72 65 73  xLT ){.      res
234f0 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d 65 6c   = -res;.    }el
23500 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
23510 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
23520 50 5f 49 64 78 47 45 20 29 3b 0a 20 20 20 20 20  P_IdxGE );.     
23530 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20   res++;.    }.  
23540 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20    if( res>0 ){. 
23550 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
23560 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a 20 20  2 - 1 ;.    }.  
23570 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
23580 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79   Opcode: Destroy
23590 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
235a0 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e  .** Delete an en
235b0 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61  tire database ta
235c0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
235d0 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  se root page in 
235e0 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
235f0 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
23600 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74   P1..**.** The t
23610 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72  able being destr
23620 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d  oyed is in the m
23630 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
23640 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a  e if P3==0.  If.
23650 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68  ** P3==1 then th
23660 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
23670 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
23680 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
23690 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
236a0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
236b0 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
236c0 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
236d0 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
236e0 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
236f0 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69  s enabled then i
23700 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68  t is possible th
23710 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20  at another root 
23720 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65  page.** might be
23730 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
23740 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f  newly deleted ro
23750 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72  ot page in order
23760 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20   to keep all.** 
23770 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69  root pages conti
23780 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67  guous at the beg
23790 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61  inning of the da
237a0 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72  tabase.  The for
237b0 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  mer.** value of 
237c0 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68  the root page th
237d0 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76  at moved - its v
237e0 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20  alue before the 
237f0 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a  move occurred -.
23800 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ** is stored in 
23810 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
23820 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76   no page .** mov
23830 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72  ement was requir
23840 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65 20  ed (because the 
23850 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70  table being drop
23860 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20  ped was already 
23870 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65  .** the last one
23880 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
23890 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73  ) then a zero is
238a0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
238b0 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55  ter P2..** If AU
238c0 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61  TOVACUUM is disa
238d0 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f  bled then a zero
238e0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
238f0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
23900 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72   See also: Clear
23910 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74  .*/.case OP_Dest
23920 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75  roy: {     /* ou
23930 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
23940 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20  .  int iMoved;. 
23950 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56 64 62   int iCnt;.  Vdb
23960 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e 74 20  e *pVdbe;.  int 
23970 69 44 62 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  iDb;.#ifndef SQL
23980 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
23990 54 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20 30  TABLE.  iCnt = 0
239a0 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64 62  ;.  for(pVdbe=db
239b0 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b 20  ->pVdbe; pVdbe; 
239c0 70 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e 70  pVdbe = pVdbe->p
239d0 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20 70  Next){.    if( p
239e0 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  Vdbe->magic==VDB
239f0 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20 70  E_MAGIC_RUN && p
23a00 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68  Vdbe->inVtabMeth
23a10 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70  od<2 && pVdbe->p
23a20 63 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 43  c>=0 ){.      iC
23a30 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  nt++;.    }.  }.
23a40 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20 64  #else.  iCnt = d
23a50 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
23a60 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d  ;.#endif.  pOut-
23a70 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
23a80 6c 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20  l;.  if( iCnt>1 
23a90 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
23aa0 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70  TE_LOCKED;.    p
23ab0 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
23ac0 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73  OE_Abort;.  }els
23ad0 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70  e{.    iDb = pOp
23ae0 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74  ->p3;.    assert
23af0 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20  ( iCnt==1 );.   
23b00 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
23b10 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62  eeMask & (1<<iDb
23b20 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20  ))!=0 );.    rc 
23b30 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72  = sqlite3BtreeDr
23b40 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b  opTable(db->aDb[
23b50 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  iDb].pBt, pOp->p
23b60 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20  1, &iMoved);.   
23b70 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
23b80 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
23b90 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a  ->u.i = iMoved;.
23ba0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
23bb0 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20  MIT_AUTOVACUUM. 
23bc0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
23bd0 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d  E_OK && iMoved!=
23be0 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
23bf0 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
23c00 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2c 20 69  &db->aDb[iDb], i
23c10 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b  Moved, pOp->p1);
23c20 0a 20 20 20 20 20 20 72 65 73 65 74 53 63 68 65  .      resetSche
23c30 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 31 3b 0a 20  maOnFault = 1;. 
23c40 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
23c50 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
23c60 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20  pcode: Clear P1 
23c70 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  P2 P3.**.** Dele
23c80 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20  te all contents 
23c90 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
23ca0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
23cb0 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a  hose root page.*
23cc0 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  * in the databas
23cd0 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  e file is given 
23ce0 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c  by P1.  But, unl
23cf0 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20  ike Destroy, do 
23d00 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68  not.** remove th
23d10 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
23d20 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
23d30 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
23d40 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
23d50 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d  lear is in the m
23d60 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
23d70 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a  e if P2==0.  If.
23d80 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68  ** P2==1 then th
23d90 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
23da0 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
23db0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
23dc0 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
23dd0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
23de0 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
23df0 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
23e00 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
23e10 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
23e20 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
23e30 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66  en the table ref
23e40 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65  erred to must be
23e50 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61   an.** intkey ta
23e60 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c  ble (an SQL tabl
23e70 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29  e, not an index)
23e80 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
23e90 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a  he row change .*
23ea0 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65  * count is incre
23eb0 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
23ec0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
23ed0 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
23ee0 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20  cleared. .** If 
23ef0 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
23f00 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  an zero, then th
23f10 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
23f20 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
23f30 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65  .** also increme
23f40 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
23f50 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
23f60 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
23f70 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  eared..**.** See
23f80 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a   also: Destroy.*
23f90 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a  /.case OP_Clear:
23fa0 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65   {.  int nChange
23fb0 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20  ;. .  nChange = 
23fc0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  0;.  assert( (p-
23fd0 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
23fe0 3c 70 4f 70 2d 3e 70 32 29 29 21 3d 30 20 29 3b  <pOp->p2))!=0 );
23ff0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
24000 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a  treeClearTable(.
24010 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f        db->aDb[pO
24020 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d  p->p2].pBt, pOp-
24030 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20  >p1, (pOp->p3 ? 
24040 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20  &nChange : 0).  
24050 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  );.  if( pOp->p3
24060 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e   ){.    p->nChan
24070 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  ge += nChange;. 
24080 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30     if( pOp->p3>0
24090 20 29 7b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70   ){.      aMem[p
240a0 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e  Op->p3].u.i += n
240b0 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20  Change;.    }.  
240c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
240d0 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54   Opcode: CreateT
240e0 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  able P1 P2 * * *
240f0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  .**.** Allocate 
24100 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74  a new table in t
24110 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
24120 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f   file if P1==0 o
24130 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69  r in the.** auxi
24140 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
24150 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20  ile if P1==1 or 
24160 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
24170 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31  atabase if.** P1
24180 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72  >1.  Write the r
24190 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
241a0 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  of the new table
241b0 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
241c0 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  r P2.**.** The d
241d0 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
241e0 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e  n a table and an
241f0 20 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20   index is this: 
24200 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a   A table must.**
24210 20 68 61 76 65 20 61 20 34 2d 62 79 74 65 20 69   have a 4-byte i
24220 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63  nteger key and c
24230 61 6e 20 68 61 76 65 20 61 72 62 69 74 72 61 72  an have arbitrar
24240 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65  y data.  An inde
24250 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69  x.** has an arbi
24260 74 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f  trary key but no
24270 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   data..**.** See
24280 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64   also: CreateInd
24290 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ex.*/./* Opcode:
242a0 20 43 72 65 61 74 65 49 6e 64 65 78 20 50 31 20   CreateIndex P1 
242b0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  P2 * * *.**.** A
242c0 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e  llocate a new in
242d0 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  dex in the main 
242e0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
242f0 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
24300 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
24310 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
24320 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
24330 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
24340 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
24350 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
24360 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
24370 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
24380 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
24390 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  .** See document
243a0 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61  ation on OP_Crea
243b0 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69  teTable for addi
243c0 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
243d0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  on..*/.case OP_C
243e0 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20  reateIndex:     
243f0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
24400 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73  rerelease */.cas
24410 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  e OP_CreateTable
24420 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
24430 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
24440 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20  */.  int pgno;. 
24450 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62   int flags;.  Db
24460 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d   *pDb;..  pgno =
24470 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
24480 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
24490 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
244a0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
244b0 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
244c0 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70  ->p1))!=0 );.  p
244d0 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f  Db = &db->aDb[pO
244e0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
244f0 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b  ( pDb->pBt!=0 );
24500 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
24510 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62  de==OP_CreateTab
24520 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61  le ){.    /* fla
24530 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45  gs = BTREE_INTKE
24540 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20  Y; */.    flags 
24550 3d 20 42 54 52 45 45 5f 4c 45 41 46 44 41 54 41  = BTREE_LEAFDATA
24560 7c 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20  |BTREE_INTKEY;. 
24570 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67   }else{.    flag
24580 73 20 3d 20 42 54 52 45 45 5f 5a 45 52 4f 44 41  s = BTREE_ZERODA
24590 54 41 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  TA;.  }.  rc = s
245a0 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
245b0 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c  eTable(pDb->pBt,
245c0 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a   &pgno, flags);.
245d0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67    pOut->u.i = pg
245e0 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  no;.  break;.}..
245f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65  /* Opcode: Parse
24600 53 63 68 65 6d 61 20 50 31 20 50 32 20 2a 20 50  Schema P1 P2 * P
24610 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61  4 *.**.** Read a
24620 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74  nd parse all ent
24630 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51  ries from the SQ
24640 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c  LITE_MASTER tabl
24650 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  e of database P1
24660 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74  .** that match t
24670 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
24680 50 34 2e 20 20 50 32 20 69 73 20 74 68 65 20 22  P4.  P2 is the "
24690 66 6f 72 63 65 22 20 66 6c 61 67 2e 20 20 20 41  force" flag.   A
246a0 6c 77 61 79 73 20 64 6f 0a 2a 2a 20 74 68 65 20  lways do.** the 
246b0 70 61 72 73 69 6e 67 20 69 66 20 50 32 20 69 73  parsing if P2 is
246c0 20 74 72 75 65 2e 20 20 49 66 20 50 32 20 69 73   true.  If P2 is
246d0 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 74 68 69   false, then thi
246e0 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 0a 2a  s routine is a.*
246f0 2a 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 73  * no-op if the s
24700 63 68 65 6d 61 20 69 73 20 6e 6f 74 20 63 75 72  chema is not cur
24710 72 65 6e 74 6c 79 20 6c 6f 61 64 65 64 2e 20 20  rently loaded.  
24720 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
24730 69 66 20 50 32 0a 2a 2a 20 69 73 20 66 61 6c 73  if P2.** is fals
24740 65 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41  e, the SQLITE_MA
24750 53 54 45 52 20 74 61 62 6c 65 20 69 73 20 6f 6e  STER table is on
24760 6c 79 20 70 61 72 73 65 64 20 69 66 20 74 68 65  ly parsed if the
24770 20 72 65 73 74 20 6f 66 20 74 68 65 0a 2a 2a 20   rest of the.** 
24780 73 63 68 65 6d 61 20 69 73 20 61 6c 72 65 61 64  schema is alread
24790 79 20 6c 6f 61 64 65 64 20 69 6e 74 6f 20 74 68  y loaded into th
247a0 65 20 73 79 6d 62 6f 6c 20 74 61 62 6c 65 2e 0a  e symbol table..
247b0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
247c0 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61  e invokes the pa
247d0 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61  rser to create a
247e0 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
247f0 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75  hine,.** then ru
24800 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75  ns the new virtu
24810 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20  al machine.  It 
24820 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74  is thus a re-ent
24830 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  rant opcode..*/.
24840 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68  case OP_ParseSch
24850 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62  ema: {.  int iDb
24860 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
24870 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20  zMaster;.  char 
24880 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74  *zSql;.  InitDat
24890 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 69  a initData;..  i
248a0 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
248b0 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
248c0 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
248d0 0a 0a 20 20 2f 2a 20 49 66 20 70 4f 70 2d 3e 70  ..  /* If pOp->p
248e0 32 20 69 73 20 30 2c 20 74 68 65 6e 20 74 68 69  2 is 0, then thi
248f0 73 20 6f 70 63 6f 64 65 20 69 73 20 62 65 69 6e  s opcode is bein
24900 67 20 65 78 65 63 75 74 65 64 20 74 6f 20 72 65  g executed to re
24910 61 64 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65  ad a.  ** single
24920 20 72 6f 77 2c 20 66 6f 72 20 65 78 61 6d 70 6c   row, for exampl
24930 65 20 74 68 65 20 72 6f 77 20 63 6f 72 72 65 73  e the row corres
24940 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20 6e 65 77  ponding to a new
24950 20 69 6e 64 65 78 0a 20 20 2a 2a 20 63 72 65 61   index.  ** crea
24960 74 65 64 20 62 79 20 74 68 69 73 20 56 44 42 45  ted by this VDBE
24970 2c 20 66 72 6f 6d 20 74 68 65 20 73 71 6c 69 74  , from the sqlit
24980 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 2e 20  e_master table. 
24990 49 74 20 6f 6e 6c 79 0a 20 20 2a 2a 20 64 6f 65  It only.  ** doe
249a0 73 20 74 68 69 73 20 69 66 20 74 68 65 20 63 6f  s this if the co
249b0 72 72 65 73 70 6f 6e 64 69 6e 67 20 69 6e 2d 6d  rresponding in-m
249c0 65 6d 6f 72 79 20 73 63 68 65 6d 61 20 69 73 20  emory schema is 
249d0 63 75 72 72 65 6e 74 6c 79 0a 20 20 2a 2a 20 6c  currently.  ** l
249e0 6f 61 64 65 64 2e 20 4f 74 68 65 72 77 69 73 65  oaded. Otherwise
249f0 2c 20 74 68 65 20 6e 65 77 20 69 6e 64 65 78 20  , the new index 
24a00 64 65 66 69 6e 69 74 69 6f 6e 20 63 61 6e 20 62  definition can b
24a10 65 20 6c 6f 61 64 65 64 20 61 6c 6f 6e 67 0a 20  e loaded along. 
24a20 20 2a 2a 20 77 69 74 68 20 74 68 65 20 72 65 73   ** with the res
24a30 74 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20  t of the schema 
24a40 77 68 65 6e 20 69 74 20 69 73 20 72 65 71 75 69  when it is requi
24a50 72 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 41  red..  **.  ** A
24a60 6c 74 68 6f 75 67 68 20 74 68 65 20 6d 75 74 65  lthough the mute
24a70 78 20 6f 6e 20 74 68 65 20 42 74 53 68 61 72 65  x on the BtShare
24a80 64 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f  d object that co
24a90 72 72 65 73 70 6f 6e 64 73 20 74 6f 0a 20 20 2a  rresponds to.  *
24aa0 2a 20 64 61 74 61 62 61 73 65 20 69 44 62 20 28  * database iDb (
24ab0 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
24ac0 74 61 69 6e 69 6e 67 20 74 68 65 20 73 71 6c 69  taining the sqli
24ad0 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a  te_master table.
24ae0 20 20 2a 2a 20 72 65 61 64 20 62 79 20 74 68 69    ** read by thi
24af0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 29 20 69  s instruction) i
24b00 73 20 63 75 72 72 65 6e 74 6c 79 20 68 65 6c 64  s currently held
24b10 2c 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72  , it is necessar
24b20 79 20 74 6f 0a 20 20 2a 2a 20 6f 62 74 61 69 6e  y to.  ** obtain
24b30 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20   the mutexes on 
24b40 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
24b50 61 62 61 73 65 73 20 62 65 66 6f 72 65 20 63 68  abases before ch
24b60 65 63 6b 69 6e 67 20 69 66 0a 20 20 2a 2a 20 74  ecking if.  ** t
24b70 68 65 20 73 63 68 65 6d 61 20 6f 66 20 69 44 62  he schema of iDb
24b80 20 69 73 20 6c 6f 61 64 65 64 2e 20 54 68 69 73   is loaded. This
24b90 20 69 73 20 62 65 63 61 75 73 65 2c 20 61 74 20   is because, at 
24ba0 74 68 65 20 73 74 61 72 74 20 6f 66 0a 20 20 2a  the start of.  *
24bb0 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65 78  * the sqlite3_ex
24bc0 65 63 28 29 20 63 61 6c 6c 20 62 65 6c 6f 77 2c  ec() call below,
24bd0 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 69 6e 76   SQLite will inv
24be0 6f 6b 65 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65  oke .  ** sqlite
24bf0 33 42 74 72 65 65 45 6e 74 65 72 41 6c 6c 28 29  3BtreeEnterAll()
24c00 2e 20 49 66 20 61 6c 6c 20 6d 75 74 65 78 65 73  . If all mutexes
24c10 20 61 72 65 20 6e 6f 74 20 61 6c 72 65 61 64 79   are not already
24c20 20 68 65 6c 64 2c 20 74 68 65 0a 20 20 2a 2a 20   held, the.  ** 
24c30 69 44 62 20 6d 75 74 65 78 20 6d 61 79 20 62 65  iDb mutex may be
24c40 20 74 65 6d 70 6f 72 61 72 69 6c 79 20 72 65 6c   temporarily rel
24c50 65 61 73 65 64 20 74 6f 20 61 76 6f 69 64 20 64  eased to avoid d
24c60 65 61 64 6c 6f 63 6b 2e 20 49 66 20 0a 20 20 2a  eadlock. If .  *
24c70 2a 20 74 68 69 73 20 68 61 70 70 65 6e 73 2c 20  * this happens, 
24c80 74 68 65 6e 20 73 6f 6d 65 20 6f 74 68 65 72 20  then some other 
24c90 74 68 72 65 61 64 20 6d 61 79 20 64 65 6c 65 74  thread may delet
24ca0 65 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  e the in-memory 
24cb0 0a 20 20 2a 2a 20 73 63 68 65 6d 61 20 6f 66 20  .  ** schema of 
24cc0 64 61 74 61 62 61 73 65 20 69 44 62 20 62 65 66  database iDb bef
24cd0 6f 72 65 20 74 68 65 20 53 51 4c 20 73 74 61 74  ore the SQL stat
24ce0 65 6d 65 6e 74 20 72 75 6e 73 2e 20 54 68 65 20  ement runs. The 
24cf0 73 63 68 65 6d 61 0a 20 20 2a 2a 20 77 69 6c 6c  schema.  ** will
24d00 20 6e 6f 74 20 62 65 20 72 65 6c 6f 61 64 65 64   not be reloaded
24d10 20 62 65 63 75 61 73 65 20 74 68 65 20 64 62 2d   becuase the db-
24d20 3e 69 6e 69 74 2e 62 75 73 79 20 66 6c 61 67 20  >init.busy flag 
24d30 69 73 20 73 65 74 2e 20 54 68 69 73 0a 20 20 2a  is set. This.  *
24d40 2a 20 63 61 6e 20 72 65 73 75 6c 74 20 69 6e 20  * can result in 
24d50 61 20 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65  a "no such table
24d60 3a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22  : sqlite_master"
24d70 20 6f 72 20 22 6d 61 6c 66 6f 72 6d 65 64 0a 20   or "malformed. 
24d80 20 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68   ** database sch
24d90 65 6d 61 22 20 65 72 72 6f 72 20 62 65 69 6e 67  ema" error being
24da0 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65   returned to the
24db0 20 75 73 65 72 2e 0a 20 20 2a 2f 0a 20 20 61 73   user..  */.  as
24dc0 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
24dd0 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d  eeHoldsMutex(db-
24de0 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29  >aDb[iDb].pBt) )
24df0 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ;.  sqlite3Btree
24e00 45 6e 74 65 72 41 6c 6c 28 64 62 29 3b 0a 20 20  EnterAll(db);.  
24e10 69 66 28 20 70 4f 70 2d 3e 70 32 20 7c 7c 20 44  if( pOp->p2 || D
24e20 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c  bHasProperty(db,
24e30 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c   iDb, DB_SchemaL
24e40 6f 61 64 65 64 29 20 29 7b 0a 20 20 20 20 7a 4d  oaded) ){.    zM
24e50 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54  aster = SCHEMA_T
24e60 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69  ABLE(iDb);.    i
24e70 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b  nitData.db = db;
24e80 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44  .    initData.iD
24e90 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20  b = pOp->p1;.   
24ea0 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d   initData.pzErrM
24eb0 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67  sg = &p->zErrMsg
24ec0 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c  ;.    zSql = sql
24ed0 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a  ite3MPrintf(db,.
24ee0 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e         "SELECT n
24ef0 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73  ame, rootpage, s
24f00 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20  ql FROM '%q'.%s 
24f10 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42  WHERE %s ORDER B
24f20 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20  Y rowid",.      
24f30 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e   db->aDb[iDb].zN
24f40 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f  ame, zMaster, pO
24f50 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66  p->p4.z);.    if
24f60 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( zSql==0 ){.   
24f70 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e     rc = SQLITE_N
24f80 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  OMEM;.    }else{
24f90 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
24fa0 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20  b->init.busy==0 
24fb0 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  );.      db->ini
24fc0 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20  t.busy = 1;.    
24fd0 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20    initData.rc = 
24fe0 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
24ff0 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61   assert( !db->ma
25000 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
25010 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
25020 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20  _exec(db, zSql, 
25030 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
25040 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20  ack, &initData, 
25050 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  0);.      if( rc
25060 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63  ==SQLITE_OK ) rc
25070 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a   = initData.rc;.
25080 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
25090 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20  ree(db, zSql);. 
250a0 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
250b0 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  sy = 0;.    }.  
250c0 7d 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  }.  sqlite3Btree
250d0 4c 65 61 76 65 41 6c 6c 28 64 62 29 3b 0a 20 20  LeaveAll(db);.  
250e0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e  if( rc==SQLITE_N
250f0 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  OMEM ){.    goto
25100 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62   no_mem;.  }.  b
25110 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21  reak;  .}..#if !
25120 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
25130 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20  MIT_ANALYZE)./* 
25140 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c  Opcode: LoadAnal
25150 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  ysis P1 * * * *.
25160 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73  **.** Read the s
25170 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
25180 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50  e for database P
25190 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63  1 and load the c
251a0 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61  ontent.** of tha
251b0 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65  t table into the
251c0 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20   internal index 
251d0 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69  hash table.  Thi
251e0 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20  s will cause.** 
251f0 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20  the analysis to 
25200 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65  be used when pre
25210 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65  paring all subse
25220 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a  quent queries..*
25230 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e  /.case OP_LoadAn
25240 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65  alysis: {.  asse
25250 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
25260 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
25270 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  b );.  rc = sqli
25280 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
25290 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
252a0 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69  break;  .}.#endi
252b0 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
252c0 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
252d0 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  E) */../* Opcode
252e0 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a  : DropTable P1 *
252f0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
25300 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
25310 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
25320 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
25330 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
25340 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50  he table named P
25350 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
25360 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
25370 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a  d after a table.
25380 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e  ** is dropped in
25390 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74   order to keep t
253a0 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
253b0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
253c0 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
253d0 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
253e0 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
253f0 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c  case OP_DropTabl
25400 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  e: {.  sqlite3Un
25410 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
25420 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  le(db, pOp->p1, 
25430 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
25440 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
25450 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20  e: DropIndex P1 
25460 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
25470 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
25480 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
25490 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
254a0 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
254b0 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20  the index named 
254c0 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
254d0 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
254e0 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65  ed after an inde
254f0 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  x.** is dropped 
25500 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
25510 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
25520 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
25530 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
25540 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
25550 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
25560 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e  /.case OP_DropIn
25570 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  dex: {.  sqlite3
25580 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49  UnlinkAndDeleteI
25590 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31  ndex(db, pOp->p1
255a0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
255b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
255c0 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72  ode: DropTrigger
255d0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
255e0 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
255f0 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
25600 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
25610 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
25620 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20  .** the trigger 
25630 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
25640 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
25650 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
25660 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64   trigger.** is d
25670 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20  ropped in order 
25680 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
25690 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
256a0 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
256b0 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
256c0 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
256d0 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
256e0 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a  _DropTrigger: {.
256f0 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
25700 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
25710 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
25720 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
25730 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  ;.}...#ifndef SQ
25740 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
25750 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63  ITY_CHECK./* Opc
25760 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b  ode: IntegrityCk
25770 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a   P1 P2 P3 * P5.*
25780 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79  *.** Do an analy
25790 73 69 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  sis of the curre
257a0 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61  ntly open databa
257b0 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a  se.  Store in.**
257c0 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65   register P1 the
257d0 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f   text of an erro
257e0 72 20 6d 65 73 73 61 67 65 20 64 65 73 63 72 69  r message descri
257f0 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d  bing any problem
25800 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62  s..** If no prob
25810 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20  lems are found, 
25820 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20  store a NULL in 
25830 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
25840 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20  ** The register 
25850 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P3 contains the 
25860 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
25870 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73  f allowed errors
25880 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67  ..** At most reg
25890 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c  (P3) errors will
258a0 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a   be reported..**
258b0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
258c0 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74   the analysis st
258d0 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72  ops as soon as r
258e0 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61 72  eg(P1) errors ar
258f0 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67  e .** seen.  Reg
25900 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64 20  (P1) is updated 
25910 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20  with the number 
25920 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e  of errors remain
25930 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  ing..**.** The r
25940 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73  oot page numbers
25950 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69   of all tables i
25960 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  n the database a
25970 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74  re integer.** st
25980 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31 29 2c  ored in reg(P1),
25990 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67 28   reg(P1+1), reg(
259a0 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65  P1+2), ....  The
259b0 72 65 20 61 72 65 20 50 32 20 74 61 62 6c 65 73  re are P2 tables
259c0 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a  .** total..**.**
259d0 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65   If P5 is not ze
259e0 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73  ro, the check is
259f0 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78   done on the aux
25a00 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a  iliary database.
25a10 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65  ** file, not the
25a20 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
25a30 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ile..**.** This 
25a40 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74  opcode is used t
25a50 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  o implement the 
25a60 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20  integrity_check 
25a70 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20  pragma..*/.case 
25a80 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20  OP_IntegrityCk: 
25a90 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20  {.  int nRoot;  
25aa0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
25ab0 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b   tables to check
25ac0 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f  .  (Number of ro
25ad0 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20  ot pages.) */.  
25ae0 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20  int *aRoot;     
25af0 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74  /* Array of root
25b00 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72  page numbers for
25b10 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68   tables to be ch
25b20 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a  ecked */.  int j
25b30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f  ;          /* Lo
25b40 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
25b50 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
25b60 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
25b70 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a  ors reported */.
25b80 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20    char *z;      
25b90 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65    /* Text of the
25ba0 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f   error report */
25bb0 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20  .  Mem *pnErr;  
25bc0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b     /* Register k
25bd0 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20  eeping track of 
25be0 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67  errors remaining
25bf0 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f 6f 74 20 3d   */.  .  nRoot =
25c00 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
25c10 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20  rt( nRoot>0 );. 
25c20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33   aRoot = sqlite3
25c30 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20  DbMallocRaw(db, 
25c40 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f  sizeof(int)*(nRo
25c50 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20 61  ot+1) );.  if( a
25c60 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Root==0 ) goto n
25c70 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28  o_mem;.  assert(
25c80 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
25c90 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
25ca0 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65  ;.  pnErr = &aMe
25cb0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
25cc0 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c  sert( (pnErr->fl
25cd0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
25ce0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  0 );.  assert( (
25cf0 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28  pnErr->flags & (
25d00 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
25d10 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20  ))==0 );.  pIn1 
25d20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
25d30 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e  ;.  for(j=0; j<n
25d40 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  Root; j++){.    
25d50 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29  aRoot[j] = (int)
25d60 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
25d70 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20  lue(&pIn1[j]);. 
25d80 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20   }.  aRoot[j] = 
25d90 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
25da0 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p5<db->nDb );.
25db0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
25dc0 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f  reeMask & (1<<pO
25dd0 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20 20  p->p5))!=0 );.  
25de0 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  z = sqlite3Btree
25df0 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28 64  IntegrityCheck(d
25e00 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e  b->aDb[pOp->p5].
25e10 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f  pBt, aRoot, nRoo
25e20 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
25e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e40 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e      (int)pnErr->
25e50 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73  u.i, &nErr);.  s
25e60 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
25e70 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72   aRoot);.  pnErr
25e80 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20  ->u.i -= nErr;. 
25e90 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
25ea0 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
25eb0 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20  if( nErr==0 ){. 
25ec0 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20     assert( z==0 
25ed0 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a  );.  }else if( z
25ee0 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
25ef0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b  no_mem;.  }else{
25f00 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
25f10 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20  MemSetStr(pIn1, 
25f20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
25f30 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65  F8, sqlite3_free
25f40 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f  );.  }.  UPDATE_
25f50 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
25f60 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
25f70 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
25f80 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
25f90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
25fa0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
25fb0 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
25fc0 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  K */../* Opcode:
25fd0 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50 32   RowSetAdd P1 P2
25fe0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 73   * * *.**.** Ins
25ff0 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ert the integer 
26000 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65  value held by re
26010 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61  gister P2 into a
26020 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a   boolean index.*
26030 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74  * held in regist
26040 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  er P1..**.** An 
26050 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20  assertion fails 
26060 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20  if P2 is not an 
26070 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65  integer..*/.case
26080 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b   OP_RowSetAdd: {
26090 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69         /* in1, i
260a0 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n2 */.  pIn1 = &
260b0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
260c0 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
260d0 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
260e0 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  ( (pIn2->flags &
260f0 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
26100 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
26110 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
26120 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
26130 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
26140 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66  et(pIn1);.    if
26150 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
26160 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
26170 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
26180 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53   }.  sqlite3RowS
26190 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75  etInsert(pIn1->u
261a0 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e  .pRowSet, pIn2->
261b0 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  u.i);.  break;.}
261c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
261d0 53 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33  SetRead P1 P2 P3
261e0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61   * *.**.** Extra
261f0 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  ct the smallest 
26200 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65  value from boole
26210 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20  an index P1 and 
26220 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69  put that value i
26230 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  nto.** register 
26240 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c  P3.  Or, if bool
26250 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20  ean index P1 is 
26260 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c  initially empty,
26270 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63   leave P3.** unc
26280 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20  hanged and jump 
26290 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
262a0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  2..*/.case OP_Ro
262b0 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20  wSetRead: {     
262c0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20    /* jump, in1, 
262d0 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61  out3 */.  i64 va
262e0 6c 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49  l;.  CHECK_FOR_I
262f0 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 49 6e 31  NTERRUPT;.  pIn1
26300 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
26310 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
26320 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
26330 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71  et)==0 .   || sq
26340 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28  lite3RowSetNext(
26350 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
26360 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20   &val)==0.  ){. 
26370 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61     /* The boolea
26380 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  n index is empty
26390 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
263a0 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
263b0 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f  n1);.    pc = pO
263c0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c  p->p2 - 1;.  }el
263d0 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c  se{.    /* A val
263e0 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72  ue was pulled fr
263f0 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  om the index */.
26400 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
26410 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
26420 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b  [pOp->p3], val);
26430 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
26440 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
26450 65 74 54 65 73 74 20 50 31 20 50 32 20 50 33 20  etTest P1 P2 P3 
26460 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P4.**.** Registe
26470 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20  r P3 is assumed 
26480 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74  to hold a 64-bit
26490 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
264a0 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  If register P1.*
264b0 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77  * contains a Row
264c0 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74  Set object and t
264d0 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  hat RowSet objec
264e0 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68  t contains.** th
264f0 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20  e value held in 
26500 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69  P3, jump to regi
26510 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69  ster P2. Otherwi
26520 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a  se, insert the.*
26530 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20  * integer in P3 
26540 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20  into the RowSet 
26550 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20  and continue on 
26560 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f  to the.** next o
26570 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  pcode..**.** The
26580 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69   RowSet object i
26590 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20  s optimized for 
265a0 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73  the case where s
265b0 75 63 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a  uccessive sets.*
265c0 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77  * of integers, w
265d0 68 65 72 65 20 65 61 63 68 20 73 65 74 20 63 6f  here each set co
265e0 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63  ntains no duplic
265f0 61 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a  ates. Each set.*
26600 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69  * of values is i
26610 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 75  dentified by a u
26620 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20  nique P4 value. 
26630 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a  The first set.**
26640 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30   must have P4==0
26650 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20  , the final set 
26660 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20  P4=-1.  P4 must 
26670 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a  be either -1 or.
26680 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e  ** non-negative.
26690 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69    For non-negati
266a0 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20  ve values of P4 
266b0 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34  only the lower 4
266c0 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69 67  .** bits are sig
266d0 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20  nificant..**.** 
266e0 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69  This allows opti
266f0 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77  mizations: (a) w
26700 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20  hen P4==0 there 
26710 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65  is no need to te
26720 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74  st.** the rowset
26730 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20   object for P3, 
26740 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e 74  as it is guarant
26750 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61  eed not to conta
26760 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68  in it,.** (b) wh
26770 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20  en P4==-1 there 
26780 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e  is no need to in
26790 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20  sert the value, 
267a0 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65  as it will.** ne
267b0 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66 6f  ver be tested fo
267c0 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20  r, and (c) when 
267d0 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20  a value that is 
267e0 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69 73  part of set X is
267f0 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68  .** inserted, th
26800 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
26810 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65 20  o search to see 
26820 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  if the same valu
26830 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75  e was.** previou
26840 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73 20  sly inserted as 
26850 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f  part of set X (o
26860 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70 72  nly if it was pr
26870 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65  eviously.** inse
26880 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  rted as part of 
26890 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e  some other set).
268a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
268b0 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20  etTest: {       
268c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
268d0 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
268e0 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20  */.  int iSet;. 
268f0 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20   int exists;..  
26900 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
26910 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20  ->p1];.  pIn3 = 
26920 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
26930 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34    iSet = pOp->p4
26940 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  .i;.  assert( pI
26950 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n3->flags&MEM_In
26960 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  t );..  /* If th
26970 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20  ere is anything 
26980 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77  other than a row
26990 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65  set object in me
269a0 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20  mory cell P1,.  
269b0 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77  ** delete it now
269c0 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20   and initialize 
269d0 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79  P1 with an empty
269e0 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69   rowset.  */.  i
269f0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
26a00 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
26a10 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
26a20 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28  dbeMemSetRowSet(
26a30 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28  pIn1);.    if( (
26a40 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
26a50 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67  M_RowSet)==0 ) g
26a60 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
26a70 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
26a80 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
26a90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53   );.  assert( iS
26aa0 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d  et==-1 || iSet>=
26ab0 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20  0 );.  if( iSet 
26ac0 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20  ){.    exists = 
26ad0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73  sqlite3RowSetTes
26ae0 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
26af0 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  t, .            
26b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b10 20 20 20 28 75 38 29 28 69 53 65 74 3e 3d 30 20     (u8)(iSet>=0 
26b20 3f 20 69 53 65 74 20 26 20 30 78 66 20 3a 20 30  ? iSet & 0xf : 0
26b30 78 66 66 29 2c 0a 20 20 20 20 20 20 20 20 20 20  xff),.          
26b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b50 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29 3b       pIn3->u.i);
26b60 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73 20  .    if( exists 
26b70 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
26b80 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20  p->p2 - 1;.     
26b90 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
26ba0 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20  }.  if( iSet>=0 
26bb0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f  ){.    sqlite3Ro
26bc0 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d  wSetInsert(pIn1-
26bd0 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33  >u.pRowSet, pIn3
26be0 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72  ->u.i);.  }.  br
26bf0 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
26c00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
26c10 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  GGER../* Opcode:
26c20 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50   Program P1 P2 P
26c30 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65  3 P4 *.**.** Exe
26c40 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65 72  cute the trigger
26c50 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20   program passed 
26c60 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f 53  as P4 (type P4_S
26c70 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a  UBPROGRAM). .**.
26c80 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74  ** P1 contains t
26c90 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68  he address of th
26ca0 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68  e memory cell th
26cb0 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
26cc0 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a  first memory .**
26cd0 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61   cell in an arra
26ce0 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64  y of values used
26cf0 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   as arguments to
26d00 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
26d10 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e  . P2 .** contain
26d20 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74 6f  s the address to
26d30 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20   jump to if the 
26d40 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f  sub-program thro
26d50 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a  ws an IGNORE .**
26d60 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67   exception using
26d70 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75 6e   the RAISE() fun
26d80 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20  ction. Register 
26d90 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P3 contains the 
26da0 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61  address .** of a
26db0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
26dc0 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e 74  this (the parent
26dd0 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73 65  ) VM that is use
26de0 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68  d to allocate th
26df0 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71  e .** memory req
26e00 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75 62  uired by the sub
26e10 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65  -vdbe at runtime
26e20 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
26e30 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56  pointer to the V
26e40 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  M containing the
26e50 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
26e60 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f  ..*/.case OP_Pro
26e70 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f  gram: {        /
26e80 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  * jump */.  int 
26e90 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  nMem;           
26ea0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
26eb0 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   memory register
26ec0 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61  s for sub-progra
26ed0 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65  m */.  int nByte
26ee0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
26ef0 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69  * Bytes of runti
26f00 6d 65 20 73 70 61 63 65 20 72 65 71 75 69 72 65  me space require
26f10 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61  d for sub-progra
26f20 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b  m */.  Mem *pRt;
26f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26f40 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c  * Register to al
26f50 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73  locate runtime s
26f60 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  pace */.  Mem *p
26f70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
26f80 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65    /* Used to ite
26f90 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d  rate through mem
26fa0 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d  ory cells */.  M
26fb0 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  em *pEnd;       
26fc0 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d         /* Last m
26fd0 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65  emory cell in ne
26fe0 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62  w array */.  Vdb
26ff0 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20  eFrame *pFrame; 
27000 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65       /* New vdbe
27010 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74   frame to execut
27020 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f  e in */.  SubPro
27030 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
27040 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d    /* Sub-program
27050 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20   to execute */. 
27060 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20   void *t;       
27070 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
27080 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72  n identifying tr
27090 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f  igger */..  pPro
270a0 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  gram = pOp->p4.p
270b0 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d  Program;.  pRt =
270c0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
270d0 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67  .  assert( pProg
270e0 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20  ram->nOp>0 );.  
270f0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20  .  /* If the p5 
27100 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74  flag is clear, t
27110 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e  hen recursive in
27120 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67  vocation of trig
27130 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69  gers is .  ** di
27140 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77  sabled for backw
27150 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69  ards compatibili
27160 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69 66  ty (p5 is set if
27170 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61   this sub-progra
27180 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79  m.  ** is really
27190 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20   a trigger, not 
271a0 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63  a foreign key ac
271b0 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c  tion, and the fl
271c0 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20  ag set.  ** and 
271d0 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20 22  cleared by the "
271e0 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76 65  PRAGMA recursive
271f0 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61  _triggers" comma
27200 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20  nd is clear)..  
27210 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72  ** .  ** It is r
27220 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74  ecursive invocat
27230 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c  ion of triggers,
27240 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65   at the SQL leve
27250 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a  l, that is .  **
27260 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f   disabled. In so
27270 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c  me cases a singl
27280 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67 65  e trigger may ge
27290 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e  nerate more than
272a0 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72   one .  ** SubPr
272b0 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74 72  ogram (if the tr
272c0 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78 65  igger may be exe
272d0 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20  cuted with more 
272e0 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65  than one differe
272f0 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46  nt .  ** ON CONF
27300 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e  LICT algorithm).
27310 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75   SubProgram stru
27320 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74 65  ctures associate
27330 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69  d with a.  ** si
27340 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c  ngle trigger all
27350 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76   have the same v
27360 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75 62  alue for the Sub
27370 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20  Program.token . 
27380 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a   ** variable.  *
27390 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  /.  if( pOp->p5 
273a0 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67  ){.    t = pProg
273b0 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20  ram->token;.    
273c0 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
273d0 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20  rame; pFrame && 
273e0 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74  pFrame->token!=t
273f0 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
27400 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69  >pParent);.    i
27410 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65 61  f( pFrame ) brea
27420 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d  k;.  }..  if( p-
27430 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69  >nFrame>=db->aLi
27440 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
27450 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20  _TRIGGER_DEPTH] 
27460 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
27470 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71  TE_ERROR;.    sq
27480 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
27490 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
274a0 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73  "too many levels
274b0 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63 75   of trigger recu
274c0 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65  rsion");.    bre
274d0 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65  ak;.  }..  /* Re
274e0 67 69 73 74 65 72 20 70 52 74 20 69 73 20 75 73  gister pRt is us
274f0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
27500 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
27510 74 6f 20 73 61 76 65 20 74 68 65 20 73 74 61 74  to save the stat
27520 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75  e.  ** of the cu
27530 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61  rrent program, a
27540 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65  nd the memory re
27550 71 75 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d  quired at runtim
27560 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a  e to execute.  *
27570 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  * the trigger pr
27580 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74  ogram. If this t
27590 72 69 67 67 65 72 20 68 61 73 20 62 65 65 6e 20  rigger has been 
275a0 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68  fired before, th
275b0 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20  en pRt .  ** is 
275c0 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65  already allocate
275d0 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74  d. Otherwise, it
275e0 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c   must be initial
275f0 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20  ized.  */.  if( 
27600 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  (pRt->flags&MEM_
27610 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20  Frame)==0 ){.   
27620 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e   /* SubProgram.n
27630 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68  Mem is set to th
27640 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
27650 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79  ry cells used by
27660 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f   the .    ** pro
27670 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53  gram stored in S
27680 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41  ubProgram.aOp. A
27690 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c  s well as these,
276a0 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20   one memory.    
276b0 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69  ** cell is requi
276c0 72 65 64 20 66 6f 72 20 65 61 63 68 20 63 75 72  red for each cur
276d0 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 65 20  sor used by the 
276e0 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63  program. Set loc
276f0 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62  al.    ** variab
27700 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74  le nMem (and lat
27710 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43  er, VdbeFrame.nC
27720 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73  hildMem) to this
27730 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20   value..    */. 
27740 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72     nMem = pProgr
27750 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67  am->nMem + pProg
27760 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e  ram->nCsr;.    n
27770 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69  Byte = ROUND8(si
27780 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29  zeof(VdbeFrame))
27790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
277a0 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d   nMem * sizeof(M
277b0 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  em).            
277c0 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43    + pProgram->nC
277d0 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65  sr * sizeof(Vdbe
277e0 43 75 72 73 6f 72 20 2a 29 3b 0a 20 20 20 20 70  Cursor *);.    p
277f0 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44  Frame = sqlite3D
27800 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20  bMallocZero(db, 
27810 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20  nByte);.    if( 
27820 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  !pFrame ){.     
27830 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
27840 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
27850 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52  dbeMemRelease(pR
27860 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61  t);.    pRt->fla
27870 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a  gs = MEM_Frame;.
27880 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d      pRt->u.pFram
27890 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20  e = pFrame;..   
278a0 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a   pFrame->v = p;.
278b0 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69      pFrame->nChi
278c0 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20  ldMem = nMem;.  
278d0 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64    pFrame->nChild
278e0 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Csr = pProgram->
278f0 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  nCsr;.    pFrame
27900 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 70  ->pc = pc;.    p
27910 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d  Frame->aMem = p-
27920 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >aMem;.    pFram
27930 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65  e->nMem = p->nMe
27940 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  m;.    pFrame->a
27950 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b  pCsr = p->apCsr;
27960 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75  .    pFrame->nCu
27970 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f  rsor = p->nCurso
27980 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  r;.    pFrame->a
27990 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
279a0 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70   pFrame->nOp = p
279b0 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d  ->nOp;.    pFram
279c0 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67  e->token = pProg
279d0 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 0a 20 20 20  ram->token;..   
279e0 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61   pEnd = &VdbeFra
279f0 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46  meMem(pFrame)[pF
27a00 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d  rame->nChildMem]
27a10 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56  ;.    for(pMem=V
27a20 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
27a30 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b  me); pMem!=pEnd;
27a40 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20   pMem++){.      
27a50 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pMem->flags = ME
27a60 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 70 4d  M_Null;.      pM
27a70 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20  em->db = db;.   
27a80 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
27a90 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e  pFrame = pRt->u.
27aa0 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65  pFrame;.    asse
27ab0 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d  rt( pProgram->nM
27ac0 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  em+pProgram->nCs
27ad0 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
27ae0 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73 65  dMem );.    asse
27af0 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  rt( pProgram->nC
27b00 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
27b10 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73  ldCsr );.    ass
27b20 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d 65 2d  ert( pc==pFrame-
27b30 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d  >pc );.  }..  p-
27b40 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72  >nFrame++;.  pFr
27b50 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70  ame->pParent = p
27b60 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61  ->pFrame;.  pFra
27b70 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  me->lastRowid = 
27b80 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  db->lastRowid;. 
27b90 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65   pFrame->nChange
27ba0 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20   = p->nChange;. 
27bb0 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
27bc0 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70  .  p->pFrame = p
27bd0 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d  Frame;.  p->aMem
27be0 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62 65 46   = aMem = &VdbeF
27bf0 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b  rameMem(pFrame)[
27c00 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d  -1];.  p->nMem =
27c10 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d   pFrame->nChildM
27c20 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72  em;.  p->nCursor
27c30 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e   = (u16)pFrame->
27c40 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e  nChildCsr;.  p->
27c50 61 70 43 73 72 20 3d 20 28 56 64 62 65 43 75 72  apCsr = (VdbeCur
27c60 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e  sor **)&aMem[p->
27c70 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f  nMem+1];.  p->aO
27c80 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72  p = aOp = pProgr
27c90 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f  am->aOp;.  p->nO
27ca0 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  p = pProgram->nO
27cb0 70 3b 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 0a 20  p;.  pc = -1;.. 
27cc0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
27cd0 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50  code: Param P1 P
27ce0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
27cf0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  is opcode is onl
27d00 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69  y ever present i
27d10 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63  n sub-programs c
27d20 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a  alled via the .*
27d30 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73  * OP_Program ins
27d40 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61  truction. Copy a
27d50 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79   value currently
27d60 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d   stored in a mem
27d70 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20  ory .** cell of 
27d80 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72  the calling (par
27d90 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65  ent) frame to ce
27da0 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72  ll P2 in the cur
27db0 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20  rent frames .** 
27dc0 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54  address space. T
27dd0 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
27de0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20  rigger programs 
27df0 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65  to access the ne
27e00 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e  w.* .** and old.
27e10 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20  * values..**.** 
27e20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  The address of t
27e30 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70  he cell in the p
27e40 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64  arent frame is d
27e50 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64  etermined by add
27e60 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  ing.** the value
27e70 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
27e80 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ent to the value
27e90 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
27ea0 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61  ent to the.** ca
27eb0 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d  lling OP_Program
27ec0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
27ed0 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20  .case OP_Param: 
27ee0 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
27ef0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
27f00 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
27f10 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49  Frame;.  Mem *pI
27f20 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d  n;.  pFrame = p-
27f30 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d  >pFrame;.  pIn =
27f40 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
27f50 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d  Op->p1 + pFrame-
27f60 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d  >aOp[pFrame->pc]
27f70 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74  .p1];   .  sqlit
27f80 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
27f90 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20  Copy(pOut, pIn, 
27fa0 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72  MEM_Ephem);.  br
27fb0 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f  eak;.}..#endif /
27fc0 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
27fd0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f  _OMIT_TRIGGER */
27fe0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
27ff0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
28000 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43  Y./* Opcode: FkC
28010 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a  ounter P1 P2 * *
28020 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65   *.**.** Increme
28030 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74  nt a "constraint
28040 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20   counter" by P2 
28050 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74  (P2 may be negat
28060 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29  ive or positive)
28070 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  ..** If P1 is no
28080 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61  n-zero, the data
28090 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  base constraint 
280a0 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
280b0 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65  mented .** (defe
280c0 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79  rred foreign key
280d0 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f   constraints). O
280e0 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31 20  therwise, if P1 
280f0 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a  is zero, the .**
28100 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74   statement count
28110 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
28120 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  d (immediate for
28130 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
28140 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ints)..*/.case O
28150 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20  P_FkCounter: {. 
28160 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
28170 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
28180 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  dCons += pOp->p2
28190 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
281a0 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20  ->nFkConstraint 
281b0 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a  += pOp->p2;.  }.
281c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
281d0 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20  pcode: FkIfZero 
281e0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
281f0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65  * This opcode te
28200 73 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e  sts if a foreign
28210 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d   key constraint-
28220 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65  counter is curre
28230 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66  ntly zero..** If
28240 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73   so, jump to ins
28250 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68  truction P2. Oth
28260 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72  erwise, fall thr
28270 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
28280 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e   .** instruction
28290 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
282a0 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
282b0 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
282c0 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  n if the databas
282d0 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  e constraint-cou
282e0 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20  nter.** is zero 
282f0 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f  (the one that co
28300 75 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f  unts deferred co
28310 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
28320 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a  ons). If P1 is.*
28330 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70  * zero, the jump
28340 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
28350 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74   statement const
28360 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73  raint-counter is
28370 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69   zero.** (immedi
28380 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
28390 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
283a0 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20  tions)..*/.case 
283b0 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20  OP_FkIfZero: {  
283c0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
283d0 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  /.  if( pOp->p1 
283e0 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  ){.    if( db->n
283f0 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20  DeferredCons==0 
28400 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31  ) pc = pOp->p2-1
28410 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
28420 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61  f( p->nFkConstra
28430 69 6e 74 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f  int==0 ) pc = pO
28440 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62  p->p2-1;.  }.  b
28450 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
28460 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
28470 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
28480 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  Y */..#ifndef SQ
28490 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
284a0 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64  CREMENT./* Opcod
284b0 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20  e: MemMax P1 P2 
284c0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69  * * *.**.** P1 i
284d0 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20  s a register in 
284e0 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f  the root frame o
284f0 66 20 74 68 69 73 20 56 4d 20 28 74 68 65 20 72  f this VM (the r
28500 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20  oot frame is.** 
28510 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74  different from t
28520 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65  he current frame
28530 20 69 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   if this instruc
28540 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65 78  tion is being ex
28550 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e  ecuted.** within
28560 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e   a sub-program).
28570 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   Set the value o
28580 66 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  f register P1 to
28590 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
285a0 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74 20  .** its current 
285b0 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76 61  value and the va
285c0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
285d0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
285e0 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77  nstruction throw
285f0 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  s an error if th
28600 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73  e memory cell is
28610 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a   not initially.*
28620 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  * an integer..*/
28630 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a  .case OP_MemMax:
28640 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32   {        /* in2
28650 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 3b   */.  Mem *pIn1;
28660 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
28670 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70  rame;.  if( p->p
28680 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72  Frame ){.    for
28690 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
286a0 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  e; pFrame->pPare
286b0 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  nt; pFrame=pFram
286c0 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
286d0 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d   pIn1 = &pFrame-
286e0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
286f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e    }else{.    pIn
28700 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
28710 31 5d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  1];.  }.  sqlite
28720 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
28730 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32  fy(pIn1);.  pIn2
28740 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
28750 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
28760 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
28770 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  n2);.  if( pIn1-
28780 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b  >u.i<pIn2->u.i){
28790 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d  .    pIn1->u.i =
287a0 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a   pIn2->u.i;.  }.
287b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
287c0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
287d0 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a  _AUTOINCREMENT *
287e0 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  /../* Opcode: If
287f0 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Pos P1 P2 * * *.
28800 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  **.** If the val
28810 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
28820 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74 65  1 is 1 or greate
28830 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  r, jump to P2..*
28840 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
28850 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69  al to use this i
28860 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20  nstruction on a 
28870 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f  register that do
28880 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69  es.** not contai
28890 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41  n an integer.  A
288a0 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c  n assertion faul
288b0 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66  t will result if
288c0 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73   you try..*/.cas
288d0 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20  e OP_IfPos: {   
288e0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
288f0 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
28900 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
28910 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
28920 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
28930 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30   if( pIn1->u.i>0
28940 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f   ){.     pc = pO
28950 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
28960 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
28970 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50  code: IfNeg P1 P
28980 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  2 * * *.**.** If
28990 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
289a0 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73  gister P1 is les
289b0 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d  s than zero, jum
289c0 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20  p to P2. .**.** 
289d0 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f  It is illegal to
289e0 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72 75   use this instru
289f0 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73  ction on a regis
28a00 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a  ter that does.**
28a10 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20   not contain an 
28a20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73  integer.  An ass
28a30 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c  ertion fault wil
28a40 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20  l result if you 
28a50 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  try..*/.case OP_
28a60 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20  IfNeg: {        
28a70 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
28a80 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
28a90 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
28aa0 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
28ab0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20  EM_Int );.  if( 
28ac0 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20  pIn1->u.i<0 ){. 
28ad0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
28ae0 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
28af0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
28b00 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20 50 33   IfZero P1 P2 P3
28b10 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72   * *.**.** The r
28b20 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
28b30 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
28b40 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72 61 6c  er.  Add literal
28b50 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76 61   P3 to the.** va
28b60 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
28b70 50 31 2e 20 20 49 66 20 74 68 65 20 72 65 73 75  P1.  If the resu
28b80 6c 74 20 69 73 20 65 78 61 63 74 6c 79 20 30 2c  lt is exactly 0,
28b90 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a   jump to P2. .**
28ba0 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61  .** It is illega
28bb0 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e  l to use this in
28bc0 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72  struction on a r
28bd0 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65  egister that doe
28be0 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  s.** not contain
28bf0 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e   an integer.  An
28c00 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74   assertion fault
28c10 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20   will result if 
28c20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65  you try..*/.case
28c30 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20   OP_IfZero: {   
28c40 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
28c50 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
28c60 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
28c70 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
28c80 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
28c90 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f   pIn1->u.i += pO
28ca0 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 70 49 6e  p->p3;.  if( pIn
28cb0 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20  1->u.i==0 ){.   
28cc0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
28cd0 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
28ce0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
28cf0 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50  ggStep * P2 P3 P
28d00 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  4 P5.**.** Execu
28d10 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  te the step func
28d20 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72  tion for an aggr
28d30 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66  egate.  The.** f
28d40 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61  unction has P5 a
28d50 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69  rguments.   P4 i
28d60 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
28d70 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74  he FuncDef.** st
28d80 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65  ructure that spe
28d90 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74  cifies the funct
28da0 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73 74  ion.  Use regist
28db0 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65 20  er.** P3 as the 
28dc0 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a  accumulator..**.
28dd0 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65  ** The P5 argume
28de0 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72  nts are taken fr
28df0 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
28e00 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73  nd its.** succes
28e10 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  sors..*/.case OP
28e20 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e  _AggStep: {.  in
28e30 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  t n;.  int i;.  
28e40 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d  Mem *pMem;.  Mem
28e50 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69 74 65   *pRec;.  sqlite
28e60 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20  3_context ctx;. 
28e70 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
28e80 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70  *apVal;..  n = p
28e90 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74  Op->p5;.  assert
28ea0 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63  ( n>=0 );.  pRec
28eb0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
28ec0 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e  ];.  apVal = p->
28ed0 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28  apArg;.  assert(
28ee0 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29   apVal || n==0 )
28ef0 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e  ;.  for(i=0; i<n
28f00 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a  ; i++, pRec++){.
28f10 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70      apVal[i] = p
28f20 52 65 63 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Rec;.    sqlite3
28f30 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
28f40 28 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74  (pRec);.  }.  ct
28f50 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70  x.pFunc = pOp->p
28f60 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73 65 72  4.pFunc;.  asser
28f70 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
28f80 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
28f90 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d   );.  ctx.pMem =
28fa0 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
28fb0 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e  p->p3];.  pMem->
28fc0 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61  n++;.  ctx.s.fla
28fd0 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
28fe0 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20   ctx.s.z = 0;.  
28ff0 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20  ctx.s.zMalloc = 
29000 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20  0;.  ctx.s.xDel 
29010 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20  = 0;.  ctx.s.db 
29020 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73 45 72  = db;.  ctx.isEr
29030 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70  ror = 0;.  ctx.p
29040 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20  Coll = 0;.  if( 
29050 63 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73  ctx.pFunc->flags
29060 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e   & SQLITE_FUNC_N
29070 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61  EEDCOLL ){.    a
29080 73 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f  ssert( pOp>p->aO
29090 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p );.    assert(
290a0 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d   pOp[-1].p4type=
290b0 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20  =P4_COLLSEQ );. 
290c0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
290d0 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f  1].opcode==OP_Co
290e0 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78  llSeq );.    ctx
290f0 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d  .pColl = pOp[-1]
29100 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20  .p4.pColl;.  }. 
29110 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74   (ctx.pFunc->xSt
29120 65 70 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56  ep)(&ctx, n, apV
29130 61 6c 29 3b 0a 20 20 69 66 28 20 63 74 78 2e 69  al);.  if( ctx.i
29140 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71  sError ){.    sq
29150 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
29160 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
29170 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
29180 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29  lue_text(&ctx.s)
29190 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e  );.    rc = ctx.
291a0 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73  isError;.  }.  s
291b0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
291c0 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20  ease(&ctx.s);.  
291d0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
291e0 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31  ode: AggFinal P1
291f0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
29200 20 45 78 65 63 75 74 65 20 74 68 65 20 66 69 6e   Execute the fin
29210 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20  alizer function 
29220 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  for an aggregate
29230 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20  .  P1 is.** the 
29240 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  memory location 
29250 74 68 61 74 20 69 73 20 74 68 65 20 61 63 63 75  that is the accu
29260 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20  mulator for the 
29270 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a  aggregate..**.**
29280 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P2 is the numbe
29290 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
292a0 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75 6e  hat the step fun
292b0 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a  ction takes and.
292c0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
292d0 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65  er to the FuncDe
292e0 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74  f for this funct
292f0 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20  ion.  The P2.** 
29300 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20  argument is not 
29310 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  used by this opc
29320 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79  ode.  It is only
29330 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62   there to disamb
29340 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69  iguate.** functi
29350 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b  ons that can tak
29360 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72  e varying number
29370 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20  s of arguments. 
29380 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d   The.** P4 argum
29390 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64  ent is only need
293a0 65 64 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e  ed for the degen
293b0 65 72 61 74 65 20 63 61 73 65 20 77 68 65 72 65  erate case where
293c0 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e  .** the step fun
293d0 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72  ction was not pr
293e0 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e  eviously called.
293f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46  .*/.case OP_AggF
29400 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  inal: {.  Mem *p
29410 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Mem;.  assert( p
29420 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
29430 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p1<=p->nMem );.
29440 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70    pMem = &aMem[p
29450 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
29460 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
29470 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d  & ~(MEM_Null|MEM
29480 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72  _Agg))==0 );.  r
29490 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
294a0 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c  emFinalize(pMem,
294b0 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b   pOp->p4.pFunc);
294c0 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
294d0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
294e0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
294f0 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
29500 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d  _value_text(pMem
29510 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ));.  }.  sqlite
29520 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
29530 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69  ing(pMem, encodi
29540 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ng);.  UPDATE_MA
29550 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29  X_BLOBSIZE(pMem)
29560 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
29570 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65  dbeMemTooBig(pMe
29580 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  m) ){.    goto t
29590 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72  oo_big;.  }.  br
295a0 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
295b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
295c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b  /* Opcode: Check
295d0 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a  point P1 * * * *
295e0 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e  .**.** Checkpoin
295f0 74 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 54  t database P1. T
29600 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69  his is a no-op i
29610 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72  f P1 is not curr
29620 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20  ently in.** WAL 
29630 6d 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  mode..*/.case OP
29640 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20  _Checkpoint: {. 
29650 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65   rc = sqlite3Che
29660 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d  ckpoint(db, pOp-
29670 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  >p1);.  break;.}
29680 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;  .#endif..#ifn
29690 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
296a0 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65  PRAGMA./* Opcode
296b0 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31  : JournalMode P1
296c0 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a   P2 P3 * P5.**.*
296d0 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a 6f 75  * Change the jou
296e0 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74  rnal mode of dat
296f0 61 62 61 73 65 20 50 31 20 74 6f 20 50 33 2e 20  abase P1 to P3. 
29700 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f  P3 must be one o
29710 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a  f the.** PAGER_J
29720 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76  OURNALMODE_XXX v
29730 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e 67 69  alues. If changi
29740 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65 20 76  ng between the v
29750 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a  arious rollback.
29760 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65 74 65  ** modes (delete
29770 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65 72 73  , truncate, pers
29780 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d  ist, off and mem
29790 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20 61 20  ory), this is a 
297a0 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74  simple.** operat
297b0 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65  ion. No IO is re
297c0 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  quired..**.** If
297d0 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f   changing into o
297e0 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64  r out of WAL mod
297f0 65 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20  e the procedure 
29800 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61  is more complica
29810 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  ted..**.** Write
29820 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69   a string contai
29830 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 6a  ning the final j
29840 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72  ournal-mode to r
29850 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
29860 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f  ase OP_JournalMo
29870 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32  de: {    /* out2
29880 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
29890 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
298a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298b0 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61   /* Btree to cha
298c0 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  nge journal mode
298d0 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a   of */.  Pager *
298e0 70 50 61 67 65 72 3b 20 20 20 20 20 20 20 20 20  pPager;         
298f0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
29900 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
29910 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65  h pBt */.  int e
29920 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20 20 20  New;            
29930 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
29940 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a  w journal mode *
29950 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20  /.  int eOld;   
29960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29970 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a      /* The old j
29980 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20  ournal mode */. 
29990 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
299a0 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  lename;         
299b0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61   /* Name of data
299c0 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50  base file for pP
299d0 61 67 65 72 20 2a 2f 0a 0a 20 20 65 4e 65 77 20  ager */..  eNew 
299e0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
299f0 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52  ert( eNew==PAGER
29a00 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c  _JOURNALMODE_DEL
29a10 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65  ETE .       || e
29a20 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
29a30 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20  ALMODE_TRUNCATE 
29a40 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
29a50 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
29a60 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20 20  DE_PERSIST .    
29a70 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
29a80 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46  R_JOURNALMODE_OF
29a90 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  F.       || eNew
29aa0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
29ab0 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20  ODE_MEMORY.     
29ac0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
29ad0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
29ae0 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
29af0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
29b00 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20  DE_QUERY.  );.  
29b10 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
29b20 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
29b30 2d 3e 6e 44 62 20 29 3b 0a 0a 20 20 2f 2a 20 54  ->nDb );..  /* T
29b40 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
29b50 65 64 20 69 6e 20 74 77 6f 20 70 6c 61 63 65 73  ed in two places
29b60 3a 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c  : PRAGMA journal
29b70 5f 6d 6f 64 65 20 61 6e 64 20 41 54 54 41 43 48  _mode and ATTACH
29b80 2e 0a 20 20 2a 2a 20 49 6e 20 50 52 41 47 4d 41  ..  ** In PRAGMA
29b90 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 2c 20 74   journal_mode, t
29ba0 68 65 20 73 71 6c 69 74 65 33 56 64 62 65 55 73  he sqlite3VdbeUs
29bb0 65 73 42 74 72 65 65 28 29 20 72 6f 75 74 69 6e  esBtree() routin
29bc0 65 20 69 73 20 63 61 6c 6c 65 64 0a 20 20 2a 2a  e is called.  **
29bd0 20 77 68 65 6e 20 74 68 65 20 73 74 61 74 6d 65   when the statme
29be0 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20 61  nt is prepared a
29bf0 6e 64 20 73 6f 20 70 2d 3e 61 4d 75 74 65 78 2e  nd so p->aMutex.
29c00 6e 4d 75 74 65 78 3e 30 2e 20 20 41 6c 6c 20 6d  nMutex>0.  All m
29c10 75 74 65 78 65 73 0a 20 20 2a 2a 20 61 72 65 20  utexes.  ** are 
29c20 61 6c 72 65 61 64 79 20 61 63 71 75 69 72 65 64  already acquired
29c30 2e 20 20 42 75 74 20 77 68 65 6e 20 75 73 65 64  .  But when used
29c40 20 69 6e 20 41 54 54 41 43 48 2c 20 73 71 6c 69   in ATTACH, sqli
29c50 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65 65  te3VdbeUsesBtree
29c60 28 29 0a 20 20 2a 2a 20 69 73 20 6e 6f 74 20 63  ().  ** is not c
29c70 61 6c 6c 65 64 20 77 68 65 6e 20 74 68 65 20 73  alled when the s
29c80 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70  tatement is prep
29c90 61 72 65 64 20 62 65 63 61 75 73 65 20 69 74 20  ared because it 
29ca0 72 65 71 75 69 72 65 73 20 74 68 65 0a 20 20 2a  requires the.  *
29cb0 2a 20 69 44 62 20 69 6e 64 65 78 20 6f 66 20 74  * iDb index of t
29cc0 68 65 20 64 61 74 61 62 61 73 65 20 61 73 20 61  he database as a
29cd0 20 70 61 72 61 6d 65 74 65 72 2c 20 61 6e 64 20   parameter, and 
29ce0 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 73  the database has
29cf0 20 6e 6f 74 0a 20 20 2a 2a 20 79 65 74 20 62 65   not.  ** yet be
29d00 65 6e 20 61 74 74 61 63 68 65 64 20 73 6f 20 74  en attached so t
29d10 68 61 74 20 69 6e 64 65 78 20 69 73 20 75 6e 61  hat index is una
29d20 76 61 69 6c 61 62 6c 65 2e 20 20 57 65 20 68 61  vailable.  We ha
29d30 76 65 20 74 6f 20 77 61 69 74 0a 20 20 2a 2a 20  ve to wait.  ** 
29d40 75 6e 74 69 6c 20 72 75 6e 74 69 6d 65 20 28 6e  until runtime (n
29d50 6f 77 29 20 74 6f 20 67 65 74 20 74 68 65 20 6d  ow) to get the m
29d60 75 74 65 78 20 6f 6e 20 74 68 65 20 6e 65 77 6c  utex on the newl
29d70 79 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  y attached datab
29d80 61 73 65 2e 0a 20 20 2a 2a 20 4e 6f 20 6f 74 68  ase..  ** No oth
29d90 65 72 20 6d 75 74 65 78 65 73 20 61 72 65 20 72  er mutexes are r
29da0 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 41  equired by the A
29db0 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64 20 73 6f  TTACH command so
29dc0 20 74 68 69 73 20 69 73 20 73 61 66 65 0a 20 20   this is safe.  
29dd0 2a 2a 20 74 6f 20 64 6f 2e 0a 20 20 2a 2f 0a 20  ** to do..  */. 
29de0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
29df0 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
29e00 2d 3e 70 31 29 29 21 3d 30 20 7c 7c 20 70 2d 3e  ->p1))!=0 || p->
29e10 61 4d 75 74 65 78 2e 6e 4d 75 74 65 78 3d 3d 30  aMutex.nMutex==0
29e20 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4d 75   );.  if( p->aMu
29e30 74 65 78 2e 6e 4d 75 74 65 78 3d 3d 30 20 29 7b  tex.nMutex==0 ){
29e40 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 6f 63 63  .    /* This occ
29e50 75 72 73 20 72 69 67 68 74 20 61 66 74 65 72 20  urs right after 
29e60 41 54 54 41 43 48 2e 20 20 47 65 74 20 61 20 6d  ATTACH.  Get a m
29e70 75 74 65 78 20 6f 6e 20 74 68 65 20 6e 65 77 6c  utex on the newl
29e80 79 20 41 54 54 41 43 48 65 64 0a 20 20 20 20 2a  y ATTACHed.    *
29e90 2a 20 64 61 74 61 62 61 73 65 2e 20 2a 2f 0a 20  * database. */. 
29ea0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73     sqlite3VdbeUs
29eb0 65 73 42 74 72 65 65 28 70 2c 20 70 4f 70 2d 3e  esBtree(p, pOp->
29ec0 70 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  p1);.    sqlite3
29ed0 56 64 62 65 4d 75 74 65 78 41 72 72 61 79 45 6e  VdbeMutexArrayEn
29ee0 74 65 72 28 70 29 3b 0a 20 20 7d 0a 0a 20 20 70  ter(p);.  }..  p
29ef0 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
29f00 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61  ->p1].pBt;.  pPa
29f10 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
29f20 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20  eePager(pBt);.  
29f30 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61  eOld = sqlite3Pa
29f40 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerGetJournalMod
29f50 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28  e(pPager);.  if(
29f60 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
29f70 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29  RNALMODE_QUERY )
29f80 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
29f90 69 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65  if( !sqlite3Page
29fa0 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e  rOkToChangeJourn
29fb0 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29  alMode(pPager) )
29fc0 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23   eNew = eOld;..#
29fd0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
29fe0 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61  IT_WAL.  zFilena
29ff0 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  me = sqlite3Page
2a000 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72  rFilename(pPager
2a010 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  );..  /* Do not 
2a020 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69  allow a transiti
2a030 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  on to journal_mo
2a040 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74  de=WAL for a dat
2a050 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65  abase.  ** in te
2a060 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20  mporary storage 
2a070 6f 72 20 69 66 20 74 68 65 20 56 46 53 20 64 6f  or if the VFS do
2a080 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73  es not support s
2a090 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20  hared memory .  
2a0a0 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50  */.  if( eNew==P
2a0b0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2a0c0 5f 57 41 4c 0a 20 20 20 26 26 20 28 7a 46 69 6c  _WAL.   && (zFil
2a0d0 65 6e 61 6d 65 5b 30 5d 3d 3d 30 20 20 20 20 20  ename[0]==0     
2a0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0f0 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65      /* Temp file
2a100 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73   */.       || !s
2a110 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53 75  qlite3PagerWalSu
2a120 70 70 6f 72 74 65 64 28 70 50 61 67 65 72 29 29  pported(pPager))
2a130 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d     /* No shared-
2a140 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a  memory support *
2a150 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20  /.  ){.    eNew 
2a160 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69  = eOld;.  }..  i
2a170 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a  f( (eNew!=eOld).
2a180 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47     && (eOld==PAG
2a190 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2a1a0 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45  AL || eNew==PAGE
2a1b0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2a1c0 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20  L).  ){.    if( 
2a1d0 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  !db->autoCommit 
2a1e0 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62  || db->activeVdb
2a1f0 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 20 20  eCnt>1 ){.      
2a200 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
2a210 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  R;.      sqlite3
2a220 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2a230 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20  rrMsg, db, .    
2a240 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68        "cannot ch
2a250 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65  ange %s wal mode
2a260 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74   from within a t
2a270 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20  ransaction",.   
2a280 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41         (eNew==PA
2a290 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2a2a0 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22  WAL ? "into" : "
2a2b0 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29  out of").      )
2a2c0 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
2a2d0 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20     }else{. .    
2a2e0 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45    if( eOld==PAGE
2a2f0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2a300 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  L ){.        /* 
2a310 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d  If leaving WAL m
2a320 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c  ode, close the l
2a330 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63  og file. If succ
2a340 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c  essful, the call
2a350 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50  .        ** to P
2a360 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63  agerCloseWal() c
2a370 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64  heckpoints and d
2a380 65 6c 65 74 65 73 20 74 68 65 20 77 72 69 74 65  eletes the write
2a390 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20  -ahead-log .    
2a3a0 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20      ** file. An 
2a3b0 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d  EXCLUSIVE lock m
2a3c0 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64  ay still be held
2a3d0 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
2a3e0 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a   file .        *
2a3f0 2a 20 61 66 74 65 72 20 61 20 73 75 63 63 65 73  * after a succes
2a400 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20  sful return. .  
2a410 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
2a420 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67   rc = sqlite3Pag
2a430 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65  erCloseWal(pPage
2a440 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  r);.        if( 
2a450 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2a460 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
2a470 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
2a480 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e  lMode(pPager, eN
2a490 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ew);.        }. 
2a4a0 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65       }else if( e
2a4b0 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
2a4c0 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b  ALMODE_MEMORY ){
2a4d0 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e  .        /* Cann
2a4e0 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69  ot transition di
2a4f0 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f  rectly from MEMO
2a500 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20  RY to WAL.  Use 
2a510 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20  mode OFF.       
2a520 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d   ** as an interm
2a530 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20  ediate */.      
2a540 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65    sqlite3PagerSe
2a550 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2a560 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ger, PAGER_JOURN
2a570 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20  ALMODE_OFF);.   
2a580 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
2a590 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74   Open a transact
2a5a0 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ion on the datab
2a5b0 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64  ase file. Regard
2a5c0 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72  less of the jour
2a5d0 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64  nal.      ** mod
2a5e0 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  e, this transact
2a5f0 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20  ion always uses 
2a600 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  a rollback journ
2a610 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  al..      */.   
2a620 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
2a630 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
2a640 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  (pBt)==0 );.    
2a650 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2a660 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  _OK ){.        r
2a670 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2a680 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20  SetVersion(pBt, 
2a690 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eNew==PAGER_JOU
2a6a0 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32  RNALMODE_WAL ? 2
2a6b0 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a   : 1));.      }.
2a6c0 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
2a6d0 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54   /* ifndef SQLIT
2a6e0 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20  E_OMIT_WAL */.. 
2a6f0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 65   if( rc ){.    e
2a700 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a  New = eOld;.  }.
2a710 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    eNew = sqlite3
2a720 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
2a730 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77  ode(pPager, eNew
2a740 29 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  );..  pOut = &aM
2a750 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
2a760 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
2a770 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c  _Str|MEM_Static|
2a780 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
2a790 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71  ->z = (char *)sq
2a7a0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
2a7b0 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f  name(eNew);.  pO
2a7c0 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53  ut->n = sqlite3S
2a7d0 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29  trlen30(pOut->z)
2a7e0 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
2a7f0 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73  SQLITE_UTF8;.  s
2a800 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
2a810 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65  Encoding(pOut, e
2a820 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61  ncoding);.  brea
2a830 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.};.#endif /* 
2a840 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
2a850 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69  MA */..#if !defi
2a860 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2a870 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69  VACUUM) && !defi
2a880 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2a890 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64  ATTACH)./* Opcod
2a8a0 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20  e: Vacuum * * * 
2a8b0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d  * *.**.** Vacuum
2a8c0 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61   the entire data
2a8d0 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f  base.  This opco
2a8e0 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74  de will cause ot
2a8f0 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d  her virtual.** m
2a900 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72  achines to be cr
2a910 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20  eated and run.  
2a920 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61  It may not be ca
2a930 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
2a940 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f  .** a transactio
2a950 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61  n..*/.case OP_Va
2a960 63 75 75 6d 3a 20 7b 0a 20 20 72 63 20 3d 20 73  cuum: {.  rc = s
2a970 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
2a980 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29  &p->zErrMsg, db)
2a990 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2a9a0 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  dif..#if !define
2a9b0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  d(SQLITE_OMIT_AU
2a9c0 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63  TOVACUUM)./* Opc
2a9d0 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20  ode: IncrVacuum 
2a9e0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
2a9f0 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67  * Perform a sing
2aa00 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20 69  le step of the i
2aa10 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75  ncremental vacuu
2aa20 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a  m procedure on.*
2aa30 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61 73  * the P1 databas
2aa40 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75 6d  e. If the vacuum
2aa50 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a   has finished, j
2aa60 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2aa70 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77  on.** P2. Otherw
2aa80 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
2aa90 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2aaa0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2aab0 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d  se OP_IncrVacuum
2aac0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2aad0 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  mp */.  Btree *p
2aae0 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Bt;..  assert( p
2aaf0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2ab00 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
2ab10 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
2ab20 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f  reeMask & (1<<pO
2ab30 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
2ab40 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
2ab50 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63  p->p1].pBt;.  rc
2ab60 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
2ab70 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a  ncrVacuum(pBt);.
2ab80 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2ab90 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20  _DONE ){.    pc 
2aba0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
2abb0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
2abc0 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  K;.  }.  break;.
2abd0 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
2abe0 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a  ode: Expire P1 *
2abf0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75   * * *.**.** Cau
2ac00 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73  se precompiled s
2ac10 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 62 65 63  tatements to bec
2ac20 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 41 6e 20  ome expired. An 
2ac30 65 78 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e  expired statemen
2ac40 74 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74 68 20  t.** fails with 
2ac50 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66  an error code of
2ac60 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 69   SQLITE_SCHEMA i
2ac70 66 20 69 74 20 69 73 20 65 76 65 72 20 65 78 65  f it is ever exe
2ac80 63 75 74 65 64 20 0a 2a 2a 20 28 76 69 61 20 73  cuted .** (via s
2ac90 71 6c 69 74 65 33 5f 73 74 65 70 28 29 29 2e 0a  qlite3_step())..
2aca0 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  ** .** If P1 is 
2acb0 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20  0, then all SQL 
2acc0 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d  statements becom
2acd0 65 20 65 78 70 69 72 65 64 2e 20 49 66 20 50 31  e expired. If P1
2ace0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a   is non-zero,.**
2acf0 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63   then only the c
2ad00 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69  urrently executi
2ad10 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ng statement is 
2ad20 61 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61  affected. .*/.ca
2ad30 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a  se OP_Expire: {.
2ad40 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29    if( !pOp->p1 )
2ad50 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  {.    sqlite3Exp
2ad60 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
2ad70 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c  ments(db);.  }el
2ad80 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  se{.    p->expir
2ad90 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  ed = 1;.  }.  br
2ada0 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
2adb0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
2adc0 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f  ED_CACHE./* Opco
2add0 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31  de: TableLock P1
2ade0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
2adf0 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20  * Obtain a lock 
2ae00 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  on a particular 
2ae10 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74  table. This inst
2ae20 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  ruction is only 
2ae30 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65  used when.** the
2ae40 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 66 65   shared-cache fe
2ae50 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
2ae60 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  . .**.** P1 is t
2ae70 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
2ae80 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69  database in sqli
2ae90 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65  te3.aDb[] of the
2aea0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20   database.** on 
2aeb0 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69  which the lock i
2aec0 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20 72  s acquired.  A r
2aed0 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69  eadlock is obtai
2aee0 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a  ned if P3==0 or.
2aef0 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20  ** a write lock 
2af00 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20  if P3==1..**.** 
2af10 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P2 contains the 
2af20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65  root-page of the
2af30 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a   table to lock..
2af40 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e  **.** P4 contain
2af50 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
2af60 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
2af70 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65  able being locke
2af80 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a  d. This is only.
2af90 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  ** used to gener
2afa0 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  ate an error mes
2afb0 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b  sage if the lock
2afc0 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69   cannot be obtai
2afd0 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ned..*/.case OP_
2afe0 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75  TableLock: {.  u
2aff0 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20  8 isWriteLock = 
2b000 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69  (u8)pOp->p3;.  i
2b010 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c  f( isWriteLock |
2b020 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26  | 0==(db->flags&
2b030 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d  SQLITE_ReadUncom
2b040 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20 69  mitted) ){.    i
2b050 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  nt p1 = pOp->p1;
2b060 20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31   .    assert( p1
2b070 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44  >=0 && p1<db->nD
2b080 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  b );.    assert(
2b090 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
2b0a0 20 28 31 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a   (1<<p1))!=0 );.
2b0b0 20 20 20 20 61 73 73 65 72 74 28 20 69 73 57 72      assert( isWr
2b0c0 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73  iteLock==0 || is
2b0d0 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a  WriteLock==1 );.
2b0e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2b0f0 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64  BtreeLockTable(d
2b100 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20  b->aDb[p1].pBt, 
2b110 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65  pOp->p2, isWrite
2b120 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 28  Lock);.    if( (
2b130 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45  rc&0xFF)==SQLITE
2b140 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20  _LOCKED ){.     
2b150 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d   const char *z =
2b160 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20   pOp->p4.z;.    
2b170 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2b180 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2b190 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 74 61  db, "database ta
2b1a0 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25  ble is locked: %
2b1b0 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  s", z);.    }.  
2b1c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2b1d0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2b1e0 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20  IT_SHARED_CACHE 
2b1f0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2b200 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2b210 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2b220 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20  VBegin * * * P4 
2b230 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62  *.**.** P4 may b
2b240 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  e a pointer to a
2b250 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
2b260 74 72 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c  tructure. If so,
2b270 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42   call the .** xB
2b280 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20  egin method for 
2b290 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  that table..**.*
2b2a0 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20  * Also, whether 
2b2b0 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74  or not P4 is set
2b2c0 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74 68 69  , check that thi
2b2d0 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63  s is not being c
2b2e0 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69  alled from.** wi
2b2f0 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20  thin a callback 
2b300 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
2b310 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f  le xSync() metho
2b320 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74 68 65  d. If it is, the
2b330 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77   error.** code w
2b340 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51  ill be set to SQ
2b350 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a  LITE_LOCKED..*/.
2b360 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20  case OP_VBegin: 
2b370 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  {.  VTable *pVTa
2b380 62 3b 0a 20 20 70 56 54 61 62 20 3d 20 70 4f 70  b;.  pVTab = pOp
2b390 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63  ->p4.pVtab;.  rc
2b3a0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 42 65   = sqlite3VtabBe
2b3b0 67 69 6e 28 64 62 2c 20 70 56 54 61 62 29 3b 0a  gin(db, pVTab);.
2b3c0 20 20 69 66 28 20 70 56 54 61 62 20 29 20 69 6d    if( pVTab ) im
2b3d0 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70  portVtabErrMsg(p
2b3e0 2c 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b  , pVTab->pVtab);
2b3f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2b400 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2b410 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
2b420 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2b430 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2b440 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2b450 43 72 65 61 74 65 20 50 31 20 2a 20 2a 20 50 34  Create P1 * * P4
2b460 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74   *.**.** P4 is t
2b470 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72  he name of a vir
2b480 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61  tual table in da
2b490 74 61 62 61 73 65 20 50 31 2e 20 43 61 6c 6c 20  tabase P1. Call 
2b4a0 74 68 65 20 78 43 72 65 61 74 65 20 6d 65 74 68  the xCreate meth
2b4b0 6f 64 0a 2a 2a 20 66 6f 72 20 74 68 61 74 20 74  od.** for that t
2b4c0 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
2b4d0 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 72 63  _VCreate: {.  rc
2b4e0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61   = sqlite3VtabCa
2b4f0 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70  llCreate(db, pOp
2b500 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  ->p1, pOp->p4.z,
2b510 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20   &p->zErrMsg);. 
2b520 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2b530 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2b540 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2b550 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2b560 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2b570 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65  E./* Opcode: VDe
2b580 73 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20  stroy P1 * * P4 
2b590 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68  *.**.** P4 is th
2b5a0 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74  e name of a virt
2b5b0 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74  ual table in dat
2b5c0 61 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20  abase P1.  Call 
2b5d0 74 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74  the xDestroy met
2b5e0 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74  hod.** of that t
2b5f0 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
2b600 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70  _VDestroy: {.  p
2b610 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
2b620 20 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   2;.  rc = sqlit
2b630 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f  e3VtabCallDestro
2b640 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  y(db, pOp->p1, p
2b650 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e  Op->p4.z);.  p->
2b660 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30  inVtabMethod = 0
2b670 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2b680 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2b690 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2b6a0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2b6b0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2b6c0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2b6d0 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20  VOpen P1 * * P4 
2b6e0 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
2b6f0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
2b700 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
2b710 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
2b720 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
2b730 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20   P1 is a cursor 
2b740 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70  number.  This op
2b750 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72  code opens a cur
2b760 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74 75  sor to the virtu
2b770 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20  al.** table and 
2b780 73 74 6f 72 65 73 20 74 68 61 74 20 63 75 72 73  stores that curs
2b790 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73  or in P1..*/.cas
2b7a0 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20  e OP_VOpen: {.  
2b7b0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
2b7c0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
2b7d0 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75  _cursor *pVtabCu
2b7e0 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  rsor;.  sqlite3_
2b7f0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73  vtab *pVtab;.  s
2b800 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
2b810 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 43 75 72 20  Module;..  pCur 
2b820 3d 20 30 3b 0a 20 20 70 56 74 61 62 43 75 72 73  = 0;.  pVtabCurs
2b830 6f 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20  or = 0;.  pVtab 
2b840 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
2b850 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
2b860 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64  e = (sqlite3_mod
2b870 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f  ule *)pVtab->pMo
2b880 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 70  dule;.  assert(p
2b890 56 74 61 62 20 26 26 20 70 4d 6f 64 75 6c 65 29  Vtab && pModule)
2b8a0 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
2b8b0 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26  ->xOpen(pVtab, &
2b8c0 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2b8d0 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67  importVtabErrMsg
2b8e0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
2b8f0 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20  ( SQLITE_OK==rc 
2b900 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ){.    /* Initia
2b910 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61  lize sqlite3_vta
2b920 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c  b_cursor base cl
2b930 61 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62  ass */.    pVtab
2b940 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20  Cursor->pVtab = 
2b950 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49  pVtab;..    /* I
2b960 6e 69 74 69 61 6c 69 73 65 20 76 64 62 65 20 63  nitialise vdbe c
2b970 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a  ursor object */.
2b980 20 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63      pCur = alloc
2b990 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
2b9a0 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b  ->p1, 0, -1, 0);
2b9b0 0a 20 20 20 20 69 66 28 20 70 43 75 72 20 29 7b  .    if( pCur ){
2b9c0 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74  .      pCur->pVt
2b9d0 61 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62  abCursor = pVtab
2b9e0 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 70 43  Cursor;.      pC
2b9f0 75 72 2d 3e 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ur->pModule = pV
2ba00 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
2ba10 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 7d  ->pModule;.    }
2ba20 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
2ba30 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
2ba40 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d  ;.      pModule-
2ba50 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75 72  >xClose(pVtabCur
2ba60 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
2ba70 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2ba80 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2ba90 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2baa0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2bab0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2bac0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46  LE./* Opcode: VF
2bad0 69 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50  ilter P1 P2 P3 P
2bae0 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  4 *.**.** P1 is 
2baf0 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20  a cursor opened 
2bb00 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32  using VOpen.  P2
2bb10 20 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74   is an address t
2bb20 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20  o jump to if.** 
2bb30 74 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73  the filtered res
2bb40 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
2bb50 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69  ..**.** P4 is ei
2bb60 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73  ther NULL or a s
2bb70 74 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67  tring that was g
2bb80 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20  enerated by the 
2bb90 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65  xBestIndex.** me
2bba0 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
2bbb0 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72  le.  The interpr
2bbc0 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50  etation of the P
2bbd0 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74  4 string is left
2bbe0 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  .** to the modul
2bbf0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
2bc00 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
2bc10 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
2bc20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f  xFilter method o
2bc30 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
2bc40 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a  ble specified.**
2bc50 20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74   by P1.  The int
2bc60 65 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20  eger query plan 
2bc70 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69  parameter to xFi
2bc80 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69  lter is stored i
2bc90 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33  n register.** P3
2bca0 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20  . Register P3+1 
2bcb0 73 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20  stores the argc 
2bcc0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20  parameter to be 
2bcd0 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a  passed to the.**
2bce0 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e   xFilter method.
2bcf0 20 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e   Registers P3+2.
2bd00 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74  .P3+1+argc are t
2bd10 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74  he argc.** addit
2bd20 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73  ional parameters
2bd30 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65   which are passe
2bd40 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20  d to.** xFilter 
2bd50 61 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65  as argv. Registe
2bd60 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61  r P3+2 becomes a
2bd70 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73  rgv[0] when pass
2bd80 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a  ed to xFilter..*
2bd90 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d  *.** A jump is m
2bda0 61 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65  ade to P2 if the
2bdb0 20 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65   result set afte
2bdc0 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c  r filtering woul
2bdd0 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63  d be empty..*/.c
2bde0 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20  ase OP_VFilter: 
2bdf0 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
2be00 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74   int nArg;.  int
2be10 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74   iQuery;.  const
2be20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
2be30 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20  *pModule;.  Mem 
2be40 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a  *pQuery;.  Mem *
2be50 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33  pArgc;.  sqlite3
2be60 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
2be70 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c  tabCursor;.  sql
2be80 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
2be90 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
2bea0 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  pCur;.  int res;
2beb0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
2bec0 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65  **apArg;..  pQue
2bed0 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ry = &aMem[pOp->
2bee0 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26  p3];.  pArgc = &
2bef0 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75  pQuery[1];.  pCu
2bf00 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
2bf10 2d 3e 70 31 5d 3b 0a 20 20 52 45 47 49 53 54 45  ->p1];.  REGISTE
2bf20 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
2bf30 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65   pQuery);.  asse
2bf40 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43  rt( pCur->pVtabC
2bf50 75 72 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62  ursor );.  pVtab
2bf60 43 75 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70  Cursor = pCur->p
2bf70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56  VtabCursor;.  pV
2bf80 74 61 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f  tab = pVtabCurso
2bf90 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
2bfa0 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
2bfb0 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62  dule;..  /* Grab
2bfc0 20 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65   the index numbe
2bfd0 72 20 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d  r and argc param
2bfe0 65 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72  eters */.  asser
2bff0 74 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67  t( (pQuery->flag
2c000 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26  s&MEM_Int)!=0 &&
2c010 20 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d   pArgc->flags==M
2c020 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67  EM_Int );.  nArg
2c030 20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75   = (int)pArgc->u
2c040 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28  .i;.  iQuery = (
2c050 69 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b  int)pQuery->u.i;
2c060 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
2c070 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  e xFilter method
2c080 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72 65 73 20   */.  {.    res 
2c090 3d 20 30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d  = 0;.    apArg =
2c0a0 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 66   p->apArg;.    f
2c0b0 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67  or(i = 0; i<nArg
2c0c0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70  ; i++){.      ap
2c0d0 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b  Arg[i] = &pArgc[
2c0e0 69 2b 31 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69  i+1];.      sqli
2c0f0 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54  te3VdbeMemStoreT
2c100 79 70 65 28 61 70 41 72 67 5b 69 5d 29 3b 0a 20  ype(apArg[i]);. 
2c110 20 20 20 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56     }..    p->inV
2c120 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20  tabMethod = 1;. 
2c130 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
2c140 3e 78 46 69 6c 74 65 72 28 70 56 74 61 62 43 75  >xFilter(pVtabCu
2c150 72 73 6f 72 2c 20 69 51 75 65 72 79 2c 20 70 4f  rsor, iQuery, pO
2c160 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61  p->p4.z, nArg, a
2c170 70 41 72 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e  pArg);.    p->in
2c180 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a  VtabMethod = 0;.
2c190 20 20 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72      importVtabEr
2c1a0 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rMsg(p, pVtab);.
2c1b0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2c1c0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
2c1d0 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
2c1e0 6f 66 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  of(pVtabCursor);
2c1f0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
2c200 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  res ){.      pc 
2c210 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
2c220 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d     }.  }.  pCur-
2c230 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20  >nullRow = 0;.. 
2c240 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2c250 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2c260 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2c270 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2c280 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2c290 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f  E./* Opcode: VCo
2c2a0 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20  lumn P1 P2 P3 * 
2c2b0 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  *.**.** Store th
2c2c0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
2c2d0 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a  2-th column of.*
2c2e0 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65  * the row of the
2c2f0 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74   virtual-table t
2c300 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63  hat the .** P1 c
2c310 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e  ursor is pointin
2c320 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74  g to into regist
2c330 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
2c340 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73  P_VColumn: {.  s
2c350 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
2c360 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
2c370 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
2c380 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73  ule;.  Mem *pDes
2c390 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  t;.  sqlite3_con
2c3a0 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a  text sContext;..
2c3b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2c3c0 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
2c3d0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2c3e0 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
2c3f0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
2c400 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
2c410 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
2c420 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65  ;.  pDest = &aMe
2c430 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
2c440 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  ( pCur->nullRow 
2c450 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
2c460 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65  beMemSetNull(pDe
2c470 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  st);.    break;.
2c480 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43    }.  pVtab = pC
2c490 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d  ur->pVtabCursor-
2c4a0 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
2c4b0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
2c4c0 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
2c4d0 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29  odule->xColumn )
2c4e0 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e  ;.  memset(&sCon
2c4f0 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28  text, 0, sizeof(
2c500 73 43 6f 6e 74 65 78 74 29 29 3b 0a 0a 20 20 2f  sContext));..  /
2c510 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c  * The output cel
2c520 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61  l may already ha
2c530 76 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f  ve a buffer allo
2c540 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a  cated. Move.  **
2c550 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6e   the current con
2c560 74 65 6e 74 73 20 74 6f 20 73 43 6f 6e 74 65 78  tents to sContex
2c570 74 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74  t.s so in case t
2c580 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e  he user-function
2c590 20 0a 20 20 2a 2a 20 63 61 6e 20 75 73 65 20 74   .  ** can use t
2c5a0 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  he already alloc
2c5b0 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74  ated buffer inst
2c5c0 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e  ead of allocatin
2c5d0 67 20 61 20 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e  g a .  ** new on
2c5e0 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  e..  */.  sqlite
2c5f0 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 43  3VdbeMemMove(&sC
2c600 6f 6e 74 65 78 74 2e 73 2c 20 70 44 65 73 74 29  ontext.s, pDest)
2c610 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
2c620 61 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20  ag(&sContext.s, 
2c630 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 72 63  MEM_Null);..  rc
2c640 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c   = pModule->xCol
2c650 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61 62 43  umn(pCur->pVtabC
2c660 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65 78 74  ursor, &sContext
2c670 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 69 6d  , pOp->p2);.  im
2c680 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70  portVtabErrMsg(p
2c690 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
2c6a0 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72  sContext.isError
2c6b0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 43 6f   ){.    rc = sCo
2c6c0 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20  ntext.isError;. 
2c6d0 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68   }..  /* Copy th
2c6e0 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
2c6f0 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65 20  function to the 
2c700 50 33 20 72 65 67 69 73 74 65 72 2e 20 57 65 0a  P3 register. We.
2c710 20 20 2a 2a 20 64 6f 20 74 68 69 73 20 72 65 67    ** do this reg
2c720 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
2c730 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 72 72  er or not an err
2c740 6f 72 20 6f 63 63 75 72 72 65 64 20 74 6f 20 65  or occurred to e
2c750 6e 73 75 72 65 20 61 6e 79 0a 20 20 2a 2a 20 64  nsure any.  ** d
2c760 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61 74 69 6f  ynamic allocatio
2c770 6e 20 69 6e 20 73 43 6f 6e 74 65 78 74 2e 73 20  n in sContext.s 
2c780 28 61 20 4d 65 6d 20 73 74 72 75 63 74 29 20 69  (a Mem struct) i
2c790 73 20 20 72 65 6c 65 61 73 65 64 2e 0a 20 20 2a  s  released..  *
2c7a0 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  /.  sqlite3VdbeC
2c7b0 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 73  hangeEncoding(&s
2c7c0 43 6f 6e 74 65 78 74 2e 73 2c 20 65 6e 63 6f 64  Context.s, encod
2c7d0 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ing);.  sqlite3V
2c7e0 64 62 65 4d 65 6d 4d 6f 76 65 28 70 44 65 73 74  dbeMemMove(pDest
2c7f0 2c 20 26 73 43 6f 6e 74 65 78 74 2e 73 29 3b 0a  , &sContext.s);.
2c800 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
2c810 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
2c820 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
2c830 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
2c840 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
2c850 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73  beMemTooBig(pDes
2c860 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  t) ){.    goto t
2c870 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72  oo_big;.  }.  br
2c880 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2c890 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2c8a0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2c8b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2c8c0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2c8d0 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20  * Opcode: VNext 
2c8e0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
2c8f0 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74 75 61  * Advance virtua
2c900 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68  l table P1 to th
2c910 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74  e next row in it
2c920 73 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64  s result set and
2c930 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  .** jump to inst
2c940 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c  ruction P2.  Or,
2c950 20 69 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   if the virtual 
2c960 74 61 62 6c 65 20 68 61 73 20 72 65 61 63 68 65  table has reache
2c970 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  d.** the end of 
2c980 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20  its result set, 
2c990 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
2c9a0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2c9b0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2c9c0 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20  se OP_VNext: {  
2c9d0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71   /* jump */.  sq
2c9e0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2c9f0 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
2ca00 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
2ca10 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  le;.  int res;. 
2ca20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
2ca30 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20  r;..  res = 0;. 
2ca40 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
2ca50 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2ca60 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62  ert( pCur->pVtab
2ca70 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20  Cursor );.  if( 
2ca80 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  pCur->nullRow ){
2ca90 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
2caa0 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e    pVtab = pCur->
2cab0 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
2cac0 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
2cad0 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
2cae0 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
2caf0 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f  e->xNext );..  /
2cb00 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65  * Invoke the xNe
2cb10 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74  xt() method of t
2cb20 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65  he module. There
2cb30 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74   is no way for t
2cb40 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69  he.  ** underlyi
2cb50 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ng implementatio
2cb60 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65  n to return an e
2cb70 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75  rror if one occu
2cb80 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78  rs during.  ** x
2cb90 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c  Next(). Instead,
2cba0 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63   if an error occ
2cbb0 75 72 73 2c 20 74 72 75 65 20 69 73 20 72 65 74  urs, true is ret
2cbc0 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e  urned (indicatin
2cbd0 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74  g that .  ** dat
2cbe0 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20  a is available) 
2cbf0 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f  and the error co
2cc00 64 65 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e  de returned when
2cc10 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a   xColumn or.  **
2cc20 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68   some other meth
2cc30 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b  od is next invok
2cc40 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76  ed on the save v
2cc50 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72  irtual table cur
2cc60 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 70 2d 3e 69  sor..  */.  p->i
2cc70 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b  nVtabMethod = 1;
2cc80 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
2cc90 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 70 56 74  >xNext(pCur->pVt
2cca0 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 70 2d 3e  abCursor);.  p->
2ccb0 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30  inVtabMethod = 0
2ccc0 3b 0a 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72  ;.  importVtabEr
2ccd0 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rMsg(p, pVtab);.
2cce0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2ccf0 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d  _OK ){.    res =
2cd00 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70   pModule->xEof(p
2cd10 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2cd20 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 21 72  );.  }..  if( !r
2cd30 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  es ){.    /* If 
2cd40 74 68 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a  there is data, j
2cd50 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20  ump to P2 */.   
2cd60 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
2cd70 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
2cd80 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2cd90 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2cda0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2cdb0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2cdc0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2cdd0 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20  ode: VRename P1 
2cde0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
2cdf0 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2ce00 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
2ce10 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
2ce20 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
2ce30 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ure..** This opc
2ce40 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
2ce50 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52  corresponding xR
2ce60 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68  ename method. Th
2ce70 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65  e value.** in re
2ce80 67 69 73 74 65 72 20 50 31 20 69 73 20 70 61 73  gister P1 is pas
2ce90 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65  sed as the zName
2cea0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
2ceb0 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e   xRename method.
2cec0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e  .*/.case OP_VRen
2ced0 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ame: {.  sqlite3
2cee0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
2cef0 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70  Mem *pName;..  p
2cf00 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
2cf10 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70  Vtab->pVtab;.  p
2cf20 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Name = &aMem[pOp
2cf30 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2cf40 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d   pVtab->pModule-
2cf50 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 52 45  >xRename );.  RE
2cf60 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
2cf70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20  ->p1, pName);.  
2cf80 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66  assert( pName->f
2cf90 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29  lags & MEM_Str )
2cfa0 3b 0a 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e  ;.  rc = pVtab->
2cfb0 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
2cfc0 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a  (pVtab, pName->z
2cfd0 29 3b 0a 20 20 69 6d 70 6f 72 74 56 74 61 62 45  );.  importVtabE
2cfe0 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrMsg(p, pVtab);
2cff0 0a 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20  .  p->expired = 
2d000 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  0;..  break;.}.#
2d010 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
2d020 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2d030 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2d040 65 3a 20 56 55 70 64 61 74 65 20 50 31 20 50 32  e: VUpdate P1 P2
2d050 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50   P3 P4 *.**.** P
2d060 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2d070 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
2d080 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
2d090 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
2d0a0 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ure..** This opc
2d0b0 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
2d0c0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 55  corresponding xU
2d0d0 70 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50 32  pdate method. P2
2d0e0 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63   values.** are c
2d0f0 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79  ontiguous memory
2d100 20 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67 20   cells starting 
2d110 61 74 20 50 33 20 74 6f 20 70 61 73 73 20 74 6f  at P3 to pass to
2d120 20 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a 2a   the xUpdate .**
2d130 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65   invocation. The
2d140 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
2d150 65 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f 72  er (P3+P2-1) cor
2d160 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
2d170 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e 74  .** p2th element
2d180 20 6f 66 20 74 68 65 20 61 72 67 76 20 61 72 72   of the argv arr
2d190 61 79 20 70 61 73 73 65 64 20 74 6f 20 78 55 70  ay passed to xUp
2d1a0 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  date..**.** The 
2d1b0 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20 77  xUpdate method w
2d1c0 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45 20  ill do a DELETE 
2d1d0 6f 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20  or an INSERT or 
2d1e0 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67  both..** The arg
2d1f0 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68  v[0] element (wh
2d200 69 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ich corresponds 
2d210 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  to memory cell P
2d220 33 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f 77  3).** is the row
2d230 69 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20 64  id of a row to d
2d240 65 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76 5b  elete.  If argv[
2d250 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  0] is NULL then 
2d260 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20  no .** deletion 
2d270 6f 63 63 75 72 73 2e 20 20 54 68 65 20 61 72 67  occurs.  The arg
2d280 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20  v[1] element is 
2d290 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
2d2a0 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54   new .** row.  T
2d2b0 68 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20  his can be NULL 
2d2c0 74 6f 20 68 61 76 65 20 74 68 65 20 76 69 72 74  to have the virt
2d2d0 75 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63 74  ual table select
2d2e0 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77   the new .** row
2d2f0 69 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20 20  id for itself.  
2d300 54 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 65  The subsequent e
2d310 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61  lements in the a
2d320 72 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68 65  rray are .** the
2d330 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d   values of colum
2d340 6e 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f  ns in the new ro
2d350 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d  w..**.** If P2==
2d360 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74  1 then no insert
2d370 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20 20   is performed.  
2d380 61 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20 72  argv[0] is the r
2d390 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77  owid of.** a row
2d3a0 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a   to delete..**.*
2d3b0 2a 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65 61  * P1 is a boolea
2d3c0 6e 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69 73  n flag. If it is
2d3d0 20 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e 64   set to true and
2d3e0 20 74 68 65 20 78 55 70 64 61 74 65 20 63 61 6c   the xUpdate cal
2d3f0 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73 66  l.** is successf
2d400 75 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ul, then the val
2d410 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
2d420 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
2d430 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69  rt_rowid() .** i
2d440 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  s set to the val
2d450 75 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64 20  ue of the rowid 
2d460 66 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73 74  for the row just
2d470 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2f 0a 63 61   inserted..*/.ca
2d480 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b  se OP_VUpdate: {
2d490 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2d4a0 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65  *pVtab;.  sqlite
2d4b0 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
2d4c0 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20  e;.  int nArg;. 
2d4d0 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65   int i;.  sqlite
2d4e0 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20 20  _int64 rowid;.  
2d4f0 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d  Mem **apArg;.  M
2d500 65 6d 20 2a 70 58 3b 0a 0a 20 20 70 56 74 61 62  em *pX;..  pVtab
2d510 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
2d520 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
2d530 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f  le = (sqlite3_mo
2d540 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d  dule *)pVtab->pM
2d550 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20  odule;.  nArg = 
2d560 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
2d570 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
2d580 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28  P4_VTAB );.  if(
2d590 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d   ALWAYS(pModule-
2d5a0 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20 20  >xUpdate) ){.   
2d5b0 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72   apArg = p->apAr
2d5c0 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 61 4d 65  g;.    pX = &aMe
2d5d0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
2d5e0 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
2d5f0 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c   i++){.      sql
2d600 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65  ite3VdbeMemStore
2d610 54 79 70 65 28 70 58 29 3b 0a 20 20 20 20 20 20  Type(pX);.      
2d620 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20  apArg[i] = pX;. 
2d630 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d       pX++;.    }
2d640 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  .    rc = pModul
2d650 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74 61 62  e->xUpdate(pVtab
2d660 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26  , nArg, apArg, &
2d670 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 6d 70 6f  rowid);.    impo
2d680 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20  rtVtabErrMsg(p, 
2d690 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20  pVtab);.    if( 
2d6a0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
2d6b0 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
2d6c0 20 20 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31    assert( nArg>1
2d6d0 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20   && apArg[0] && 
2d6e0 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73  (apArg[0]->flags
2d6f0 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20  &MEM_Null) );.  
2d700 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69      db->lastRowi
2d710 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d  d = rowid;.    }
2d720 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  .    p->nChange+
2d730 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  +;.  }.  break;.
2d740 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2d750 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2d760 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2d770 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41    SQLITE_OMIT_PA
2d780 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f  GER_PRAGMAS./* O
2d790 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74  pcode: Pagecount
2d7a0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2d7b0 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72  ** Write the cur
2d7c0 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70  rent number of p
2d7d0 61 67 65 73 20 69 6e 20 64 61 74 61 62 61 73 65  ages in database
2d7e0 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65   P1 to memory ce
2d7f0 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ll P2..*/.case O
2d800 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20  P_Pagecount: {  
2d810 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
2d820 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
2d830 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71    pOut->u.i = sq
2d840 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61  lite3BtreeLastPa
2d850 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  ge(db->aDb[pOp->
2d860 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65 61  p1].pBt);.  brea
2d870 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
2d880 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2d890 5f 54 52 41 43 45 0a 2f 2a 20 4f 70 63 6f 64 65  _TRACE./* Opcode
2d8a0 3a 20 54 72 61 63 65 20 2a 20 2a 20 2a 20 50 34  : Trace * * * P4
2d8b0 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63   *.**.** If trac
2d8c0 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28  ing is enabled (
2d8d0 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74  by the sqlite3_t
2d8e0 72 61 63 65 28 29 29 20 69 6e 74 65 72 66 61 63  race()) interfac
2d8f0 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55  e, then.** the U
2d900 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74  TF-8 string cont
2d910 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65  ained in P4 is e
2d920 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72  mitted on the tr
2d930 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f  ace callback..*/
2d940 0a 63 61 73 65 20 4f 50 5f 54 72 61 63 65 3a 20  .case OP_Trace: 
2d950 7b 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65  {.  char *zTrace
2d960 3b 0a 0a 20 20 7a 54 72 61 63 65 20 3d 20 28 70  ;..  zTrace = (p
2d970 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e  Op->p4.z ? pOp->
2d980 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b  p4.z : p->zSql);
2d990 0a 20 20 69 66 28 20 7a 54 72 61 63 65 20 29 7b  .  if( zTrace ){
2d9a0 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 54 72  .    if( db->xTr
2d9b0 61 63 65 20 29 7b 0a 20 20 20 20 20 20 63 68 61  ace ){.      cha
2d9c0 72 20 2a 7a 20 3d 20 73 71 6c 69 74 65 33 56 64  r *z = sqlite3Vd
2d9d0 62 65 45 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a  beExpandSql(p, z
2d9e0 54 72 61 63 65 29 3b 0a 20 20 20 20 20 20 64 62  Trace);.      db
2d9f0 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72  ->xTrace(db->pTr
2da00 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20  aceArg, z);.    
2da10 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
2da20 64 62 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 23 69  db, z);.    }.#i
2da30 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2da40 47 0a 20 20 20 20 69 66 28 20 28 64 62 2d 3e 66  G.    if( (db->f
2da50 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 53 71  lags & SQLITE_Sq
2da60 6c 54 72 61 63 65 29 21 3d 30 20 29 7b 0a 20 20  lTrace)!=0 ){.  
2da70 20 20 20 20 73 71 6c 69 74 65 33 44 65 62 75 67      sqlite3Debug
2da80 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63  Printf("SQL-trac
2da90 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65  e: %s\n", zTrace
2daa0 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20  );.    }.#endif 
2dab0 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
2dac0 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  */.  }.  break;.
2dad0 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70  }.#endif.../* Op
2dae0 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a  code: Noop * * *
2daf0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f   * *.**.** Do no
2db00 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73  thing.  This ins
2db10 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65  truction is ofte
2db20 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75  n useful as a ju
2db30 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f  mp.** destinatio
2db40 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20  n..*/./*.** The 
2db50 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70  magic Explain op
2db60 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e  code are only in
2db70 73 65 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c  serted when expl
2db80 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a  ain==2 (which.**
2db90 20 69 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20   is to say when 
2dba0 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52  the EXPLAIN QUER
2dbb0 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73  Y PLAN syntax is
2dbc0 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20   used.).** This 
2dbd0 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69  opcode records i
2dbe0 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
2dbf0 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20  the optimizer.  
2dc00 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65  It is the.** the
2dc10 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70   same as a no-op
2dc20 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e  .  This opcodesn
2dc30 65 76 65 72 20 61 70 70 65 61 72 73 20 69 6e 20  ever appears in 
2dc40 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61  a real VM progra
2dc50 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b  m..*/.default: {
2dc60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69            /* Thi
2dc70 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e  s is really OP_N
2dc80 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61  oop and OP_Expla
2dc90 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  in */.  assert( 
2dca0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2dcb0 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Noop || pOp->opc
2dcc0 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20  ode==OP_Explain 
2dcd0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
2dce0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2dcf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2dd00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2dd10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2dd20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
2dd30 20 54 68 65 20 63 61 73 65 73 20 6f 66 20 74 68   The cases of th
2dd40 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  e switch stateme
2dd50 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20 6c 69  nt above this li
2dd60 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65  ne should all be
2dd70 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20   indented.** by 
2dd80 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 20 74  6 spaces.  But t
2dd90 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73  he left-most 6 s
2dda0 70 61 63 65 73 20 68 61 76 65 20 62 65 65 6e 20  paces have been 
2ddb0 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f  removed to impro
2ddc0 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62  ve the.** readab
2ddd0 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74 68 69  ility.  From thi
2dde0 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c  s point on down,
2ddf0 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65   the normal inde
2de00 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72  ntation rules ar
2de10 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a  e.** restored..*
2de20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2de30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2de40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2de50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2de60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20  ************/.  
2de70 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44 42 45    }..#ifdef VDBE
2de80 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20  _PROFILE.    {. 
2de90 20 20 20 20 20 75 36 34 20 65 6c 61 70 73 65 64       u64 elapsed
2dea0 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
2deb0 28 29 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20  () - start;.    
2dec0 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d    pOp->cycles +=
2ded0 20 65 6c 61 70 73 65 64 3b 0a 20 20 20 20 20 20   elapsed;.      
2dee0 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20  pOp->cnt++;.#if 
2def0 30 0a 20 20 20 20 20 20 20 20 66 70 72 69 6e 74  0.        fprint
2df00 66 28 73 74 64 6f 75 74 2c 20 22 25 31 30 6c 6c  f(stdout, "%10ll
2df10 75 20 22 2c 20 65 6c 61 70 73 65 64 29 3b 0a 20  u ", elapsed);. 
2df20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
2df30 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
2df40 2c 20 6f 72 69 67 50 63 2c 20 26 61 4f 70 5b 6f  , origPc, &aOp[o
2df50 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64 69 66 0a  rigPc]);.#endif.
2df60 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
2df70 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
2df80 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e 6f 74  ng code adds not
2df90 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63 74 75  hing to the actu
2dfa0 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  al functionality
2dfb0 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 70  .    ** of the p
2dfc0 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73 20 6f  rogram.  It is o
2dfd0 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74 65 73  nly here for tes
2dfe0 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69  ting and debuggi
2dff0 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68  ng..    ** On th
2e000 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69 74  e other hand, it
2e010 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55 20 63   does burn CPU c
2e020 79 63 6c 65 73 20 65 76 65 72 79 20 74 69 6d 65  ycles every time
2e030 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20   through.    ** 
2e040 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f  the evaluator lo
2e050 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e 20 6c  op.  So we can l
2e060 65 61 76 65 20 69 74 20 6f 75 74 20 77 68 65 6e  eave it out when
2e070 20 4e 44 45 42 55 47 20 69 73 20 64 65 66 69 6e   NDEBUG is defin
2e080 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64  ed..    */.#ifnd
2e090 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20 61 73  ef NDEBUG.    as
2e0a0 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26 26 20  sert( pc>=-1 && 
2e0b0 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69  pc<p->nOp );..#i
2e0c0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2e0d0 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61  G.    if( p->tra
2e0e0 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ce ){.      if( 
2e0f0 72 63 21 3d 30 20 29 20 66 70 72 69 6e 74 66 28  rc!=0 ) fprintf(
2e100 70 2d 3e 74 72 61 63 65 2c 22 72 63 3d 25 64 5c  p->trace,"rc=%d\
2e110 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20 20 69 66  n",rc);.      if
2e120 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26  ( pOp->opflags &
2e130 20 28 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45   (OPFLG_OUT2_PRE
2e140 52 45 4c 45 41 53 45 7c 4f 50 46 4c 47 5f 4f 55  RELEASE|OPFLG_OU
2e150 54 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  T2) ){.        r
2e160 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e  egisterTrace(p->
2e170 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 32 2c 20  trace, pOp->p2, 
2e180 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
2e190 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
2e1a0 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  f( pOp->opflags 
2e1b0 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a  & OPFLG_OUT3 ){.
2e1c0 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72          register
2e1d0 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20  Trace(p->trace, 
2e1e0 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70  pOp->p3, &aMem[p
2e1f0 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20  Op->p3]);.      
2e200 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 20  }.    }.#endif  
2e210 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
2e220 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44  */.#endif  /* ND
2e230 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20  EBUG */.  }  /* 
2e240 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66  The end of the f
2e250 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20  or(;;) loop the 
2e260 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f 70  loops through op
2e270 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  codes */..  /* I
2e280 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20  f we reach this 
2e290 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20  point, it means 
2e2a0 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20 69  that execution i
2e2b0 73 20 66 69 6e 69 73 68 65 64 20 77 69 74 68 0a  s finished with.
2e2c0 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66    ** an error of
2e2d0 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f   some kind..  */
2e2e0 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74  .vdbe_error_halt
2e2f0 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63 20 29  :.  assert( rc )
2e300 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a  ;.  p->rc = rc;.
2e310 20 20 74 65 73 74 63 61 73 65 28 20 73 71 6c 69    testcase( sqli
2e320 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
2e330 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73 71 6c  xLog!=0 );.  sql
2e340 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22 73 74  ite3_log(rc, "st
2e350 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73 20 61  atement aborts a
2e360 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22 2c 20  t %d: [%s] %s", 
2e370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e380 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c      pc, p->zSql,
2e390 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
2e3a0 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
2e3b0 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  p);.  if( rc==SQ
2e3c0 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
2e3d0 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69   ) db->mallocFai
2e3e0 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  led = 1;.  rc = 
2e3f0 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
2e400 69 66 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f  if( resetSchemaO
2e410 6e 46 61 75 6c 74 20 29 20 73 71 6c 69 74 65 33  nFault ) sqlite3
2e420 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
2e430 65 6d 61 28 64 62 2c 20 30 29 3b 0a 0a 20 20 2f  ema(db, 0);..  /
2e440 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * This is the on
2e450 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68  ly way out of th
2e460 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57  is procedure.  W
2e470 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72  e have to.  ** r
2e480 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65 78  elease the mutex
2e490 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61  es on btrees tha
2e4a0 74 20 77 65 72 65 20 61 63 71 75 69 72 65 64 20  t were acquired 
2e4b0 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e  at the.  ** top.
2e4c0 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a   */.vdbe_return:
2e4d0 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d  .  sqlite3BtreeM
2e4e0 75 74 65 78 41 72 72 61 79 4c 65 61 76 65 28 26  utexArrayLeave(&
2e4f0 70 2d 3e 61 4d 75 74 65 78 29 3b 0a 20 20 72 65  p->aMutex);.  re
2e500 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a  turn rc;..  /* J
2e510 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61  ump to here if a
2e520 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
2e530 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49  larger than SQLI
2e540 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20  TE_MAX_LENGTH.  
2e550 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  ** is encountere
2e560 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a  d..  */.too_big:
2e570 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
2e580 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2e590 20 64 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20   db, "string or 
2e5a0 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a  blob too big");.
2e5b0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f    rc = SQLITE_TO
2e5c0 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OBIG;.  goto vdb
2e5d0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
2e5e0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
2e5f0 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
2e600 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65  ails..  */.no_me
2e610 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  m:.  db->mallocF
2e620 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c  ailed = 1;.  sql
2e630 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2e640 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
2e650 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b  out of memory");
2e660 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e  .  rc = SQLITE_N
2e670 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OMEM;.  goto vdb
2e680 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
2e690 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
2e6a0 20 66 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b   for any other k
2e6b0 69 6e 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72  ind of fatal err
2e6c0 6f 72 2e 20 20 54 68 65 20 22 72 63 22 20 76 61  or.  The "rc" va
2e6d0 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75  riable.  ** shou
2e6e0 6c 64 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f  ld hold the erro
2e6f0 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61  r number..  */.a
2e700 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2e710 72 3a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  r:.  assert( p->
2e720 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20  zErrMsg==0 );.  
2e730 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
2e740 69 6c 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49  iled ) rc = SQLI
2e750 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20  TE_NOMEM;.  if( 
2e760 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52  rc!=SQLITE_IOERR
2e770 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71  _NOMEM ){.    sq
2e780 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2e790 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2e7a0 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
2e7b0 53 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20  Str(rc));.  }.  
2e7c0 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
2e7d0 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
2e7e0 20 74 6f 20 68 65 72 65 20 69 66 20 74 68 65 20   to here if the 
2e7f0 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
2e800 74 28 29 20 41 50 49 20 73 65 74 73 20 74 68 65  t() API sets the
2e810 20 69 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20   interrupt.  ** 
2e820 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74  flag..  */.abort
2e830 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
2e840 74 3a 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  t:.  assert( db-
2e850 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
2e860 64 20 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  d );.  rc = SQLI
2e870 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
2e880 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71  p->rc = rc;.  sq
2e890 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2e8a0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2e8b0 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
2e8c0 53 74 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f  Str(rc));.  goto
2e8d0 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
2e8e0 3b 0a 7d 0a                                      ;.}.