/ Hex Artifact Content
Login

Artifact 1e2c66f2612275a26e156889ec123e8e13c4821d:


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 73 71 6c 69 74 65 33 56  um;.    sqlite3V
2200: 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61  dbeMemNulTermina
2210: 74 65 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66  te(pRec);.    if
2220: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  ( (pRec->flags&M
2230: 45 4d 5f 53 74 72 29 0a 20 20 20 20 20 20 20 20  EM_Str).        
2240: 20 26 26 20 73 71 6c 69 74 65 33 49 73 4e 75 6d   && sqlite3IsNum
2250: 62 65 72 28 70 52 65 63 2d 3e 7a 2c 20 26 72 65  ber(pRec->z, &re
2260: 61 6c 6e 75 6d 2c 20 70 52 65 63 2d 3e 65 6e 63  alnum, pRec->enc
2270: 29 20 29 7b 0a 20 20 20 20 20 20 69 36 34 20 76  ) ){.      i64 v
2280: 61 6c 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  alue;.      sqli
2290: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
22a0: 6f 64 69 6e 67 28 70 52 65 63 2c 20 53 51 4c 49  oding(pRec, SQLI
22b0: 54 45 5f 55 54 46 38 29 3b 0a 20 20 20 20 20 20  TE_UTF8);.      
22c0: 69 66 28 20 21 72 65 61 6c 6e 75 6d 20 26 26 20  if( !realnum && 
22d0: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 52  sqlite3Atoi64(pR
22e0: 65 63 2d 3e 7a 2c 20 26 76 61 6c 75 65 29 20 29  ec->z, &value) )
22f0: 7b 0a 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e  {.        pRec->
2300: 75 2e 69 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20  u.i = value;.   
2310: 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46       MemSetTypeF
2320: 6c 61 67 28 70 52 65 63 2c 20 4d 45 4d 5f 49 6e  lag(pRec, MEM_In
2330: 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  t);.      }else{
2340: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2350: 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70  VdbeMemRealify(p
2360: 52 65 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Rec);.      }.  
2370: 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a    }.  }.}../*.**
2380: 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64   Processing is d
2390: 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20  etermine by the 
23a0: 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74  affinity paramet
23b0: 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  er:.**.** SQLITE
23c0: 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a  _AFF_INTEGER:.**
23d0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c   SQLITE_AFF_REAL
23e0: 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  :.** SQLITE_AFF_
23f0: 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54  NUMERIC:.**    T
2400: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52  ry to convert pR
2410: 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ec to an integer
2420: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2430: 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61  or a .**    floa
2440: 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65  ting-point repre
2450: 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20  sentation if an 
2460: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
2470: 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20  tation.**    is 
2480: 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e  not possible.  N
2490: 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e 74  ote that the int
24a0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
24b0: 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77  ion is.**    alw
24c0: 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20 65  ays preferred, e
24d0: 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e  ven if the affin
24e0: 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63  ity is REAL, bec
24f0: 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e  ause.**    an in
2500: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2510: 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61  tion is more spa
2520: 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20  ce efficient on 
2530: 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49  disk..**.** SQLI
2540: 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20  TE_AFF_TEXT:.** 
2550: 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20     Convert pRec 
2560: 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65 73  to a text repres
2570: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
2580: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a  SQLITE_AFF_NONE:
2590: 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70  .**    No-op.  p
25a0: 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64  Rec is unchanged
25b0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
25c0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a   applyAffinity(.
25d0: 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20    Mem *pRec,    
25e0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c        /* The val
25f0: 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69  ue to apply affi
2600: 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61  nity to */.  cha
2610: 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20  r affinity,     
2620: 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
2630: 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a   to be applied *
2640: 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20 20  /.  u8 enc      
2650: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74          /* Use t
2660: 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  his text encodin
2670: 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66  g */.){.  if( af
2680: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2690: 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f  FF_TEXT ){.    /
26a0: 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74  * Only attempt t
26b0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f  he conversion to
26c0: 20 54 45 58 54 20 69 66 20 74 68 65 72 65 20 69   TEXT if there i
26d0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  s an integer or 
26e0: 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72  real.    ** repr
26f0: 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62  esentation (blob
2700: 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74   and NULL do not
2710: 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20   get converted) 
2720: 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20  but no string.  
2730: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2740: 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ion..    */.    
2750: 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c  if( 0==(pRec->fl
2760: 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 26 26 20  ags&MEM_Str) && 
2770: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45  (pRec->flags&(ME
2780: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29  M_Real|MEM_Int))
2790: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
27a0: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
27b0: 79 28 70 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20  y(pRec, enc);.  
27c0: 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c    }.    pRec->fl
27d0: 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61  ags &= ~(MEM_Rea
27e0: 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65  l|MEM_Int);.  }e
27f0: 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79  lse if( affinity
2800: 21 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e  !=SQLITE_AFF_NON
2810: 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  E ){.    assert(
2820: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
2830: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c  E_AFF_INTEGER ||
2840: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
2850: 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20 20 20 20  E_AFF_REAL.     
2860: 20 20 20 20 20 20 20 20 7c 7c 20 61 66 66 69 6e          || affin
2870: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2880: 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 20 20 61  NUMERIC );.    a
2890: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
28a0: 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 69  ity(pRec);.    i
28b0: 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
28c0: 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20   MEM_Real ){.   
28d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e     sqlite3VdbeIn
28e0: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
28f0: 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d  ec);.    }.  }.}
2900: 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63  ../*.** Try to c
2910: 6f 6e 76 65 72 74 20 74 68 65 20 74 79 70 65 20  onvert the type 
2920: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72  of a function ar
2930: 67 75 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75  gument or a resu
2940: 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74  lt column.** int
2950: 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72  o a numeric repr
2960: 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65  esentation.  Use
2970: 20 65 69 74 68 65 72 20 49 4e 54 45 47 45 52 20   either INTEGER 
2980: 6f 72 20 52 45 41 4c 20 77 68 69 63 68 65 76 65  or REAL whicheve
2990: 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69  r.** is appropri
29a0: 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64  ate.  But only d
29b0: 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  o the conversion
29c0: 20 69 66 20 69 74 20 69 73 20 70 6f 73 73 69 62   if it is possib
29d0: 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f  le without.** lo
29e0: 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
29f0: 6e 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65  n and return the
2a00: 20 72 65 76 69 73 65 64 20 74 79 70 65 20 6f 66   revised type of
2a10: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a   the argument..*
2a20: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 6e 20  *.** This is an 
2a30: 45 58 50 45 52 49 4d 45 4e 54 41 4c 20 61 70 69  EXPERIMENTAL api
2a40: 20 61 6e 64 20 69 73 20 73 75 62 6a 65 63 74 20   and is subject 
2a50: 74 6f 20 63 68 61 6e 67 65 20 6f 72 20 72 65 6d  to change or rem
2a60: 6f 76 61 6c 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  oval..*/.int sql
2a70: 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72  ite3_value_numer
2a80: 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65 33 5f  ic_type(sqlite3_
2a90: 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20  value *pVal){.  
2aa0: 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d  Mem *pMem = (Mem
2ab0: 2a 29 70 56 61 6c 3b 0a 20 20 61 70 70 6c 79 4e  *)pVal;.  applyN
2ac0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
2ad0: 4d 65 6d 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Mem);.  sqlite3V
2ae0: 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
2af0: 70 4d 65 6d 29 3b 0a 20 20 72 65 74 75 72 6e 20  pMem);.  return 
2b00: 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a 7d 0a 0a 2f  pMem->type;.}../
2b10: 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76 65  *.** Exported ve
2b20: 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66  rsion of applyAf
2b30: 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20 6f  finity(). This o
2b40: 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69  ne works on sqli
2b50: 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20  te3_value*, .** 
2b60: 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  not the internal
2b70: 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76   Mem* type..*/.v
2b80: 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2b90: 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20  ApplyAffinity(. 
2ba0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
2bb0: 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66 69  pVal, .  u8 affi
2bc0: 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a  nity, .  u8 enc.
2bd0: 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69  ){.  applyAffini
2be0: 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20  ty((Mem *)pVal, 
2bf0: 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a  affinity, enc);.
2c00: 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
2c10: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69  _DEBUG./*.** Wri
2c20: 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e 67  te a nice string
2c30: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2c40: 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  of the contents 
2c50: 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20  of cell pMem.** 
2c60: 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75 66  into buffer zBuf
2c70: 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a  , length nBuf..*
2c80: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
2c90: 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74  beMemPrettyPrint
2ca0: 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72  (Mem *pMem, char
2cb0: 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72 20   *zBuf){.  char 
2cc0: 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20  *zCsr = zBuf;.  
2cd0: 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c  int f = pMem->fl
2ce0: 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20 63  ags;..  static c
2cf0: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
2d00: 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22   encnames[] = {"
2d10: 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28 31  (X)", "(8)", "(1
2d20: 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22 7d  6LE)", "(16BE)"}
2d30: 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f 42  ;..  if( f&MEM_B
2d40: 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  lob ){.    int i
2d50: 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20 20  ;.    char c;.  
2d60: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
2d70: 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  n ){.      c = '
2d80: 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  z';.      assert
2d90: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
2da0: 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  ic|MEM_Ephem))==
2db0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
2dc0: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69  f( f & MEM_Stati
2dd0: 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  c ){.      c = '
2de0: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
2df0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
2e00: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
2e10: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
2e20: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
2e30: 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b 0a  .      c = 'e';.
2e40: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
2e50: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
2e60: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
2e70: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2e80: 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 0a  c = 's';.    }..
2e90: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
2ea0: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
2eb0: 22 25 63 22 2c 20 63 29 3b 0a 20 20 20 20 7a 43  "%c", c);.    zC
2ec0: 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  sr += sqlite3Str
2ed0: 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20  len30(zCsr);.   
2ee0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
2ef0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 64  f(100, zCsr, "%d
2f00: 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20  [", pMem->n);.  
2f10: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
2f20: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
2f30: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
2f40: 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b  16 && i<pMem->n;
2f50: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c   i++){.      sql
2f60: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
2f70: 30 2c 20 7a 43 73 72 2c 20 22 25 30 32 58 22 2c  0, zCsr, "%02X",
2f80: 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69   ((int)pMem->z[i
2f90: 5d 20 26 20 30 78 46 46 29 29 3b 0a 20 20 20 20  ] & 0xFF));.    
2fa0: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
2fb0: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
2fc0: 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69  .    }.    for(i
2fd0: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
2fe0: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
2ff0: 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d     char z = pMem
3000: 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66  ->z[i];.      if
3010: 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20  ( z<32 || z>126 
3020: 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b  ) *zCsr++ = '.';
3030: 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a 43 73  .      else *zCs
3040: 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 0a  r++ = z;.    }..
3050: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3060: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
3070: 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d 65 73 5b  "]%s", encnames[
3080: 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20  pMem->enc]);.   
3090: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
30a0: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
30b0: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
30c0: 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71  Zero ){.      sq
30d0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
30e0: 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c  00, zCsr,"+%dz",
30f0: 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a  pMem->u.nZero);.
3100: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71        zCsr += sq
3110: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
3120: 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a  sr);.    }.    *
3130: 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d  zCsr = '\0';.  }
3140: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3150: 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20  _Str ){.    int 
3160: 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30  j, k;.    zBuf[0
3170: 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28  ] = ' ';.    if(
3180: 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a   f & MEM_Dyn ){.
3190: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
31a0: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
31b0: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
31c0: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
31d0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
31e0: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
31f0: 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  ic ){.      zBuf
3200: 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20  [1] = 't';.     
3210: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
3220: 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d  EM_Dyn|MEM_Ephem
3230: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3240: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45  se if( f & MEM_E
3250: 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42  phem ){.      zB
3260: 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20  uf[1] = 'e';.   
3270: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3280: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3290: 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  Dyn))==0 );.    
32a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75  }else{.      zBu
32b0: 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20  f[1] = 's';.    
32c0: 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20  }.    k = 2;.   
32d0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
32e0: 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c  f(100, &zBuf[k],
32f0: 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b   "%d", pMem->n);
3300: 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65  .    k += sqlite
3310: 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b  3Strlen30(&zBuf[
3320: 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b  k]);.    zBuf[k+
3330: 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f  +] = '[';.    fo
3340: 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a  r(j=0; j<15 && j
3350: 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a  <pMem->n; j++){.
3360: 20 20 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65        u8 c = pMe
3370: 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69  m->z[j];.      i
3380: 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c  f( c>=0x20 && c<
3390: 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20  0x7f ){.        
33a0: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20  zBuf[k++] = c;. 
33b0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
33c0: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
33d0: 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  '.';.      }.   
33e0: 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d   }.    zBuf[k++]
33f0: 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69   = ']';.    sqli
3400: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
3410: 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61  ,&zBuf[k], encna
3420: 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b  mes[pMem->enc]);
3430: 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65  .    k += sqlite
3440: 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b  3Strlen30(&zBuf[
3450: 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b  k]);.    zBuf[k+
3460: 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65  +] = 0;.  }.}.#e
3470: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
3480: 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
3490: 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20  Print the value 
34a0: 6f 66 20 61 20 72 65 67 69 73 74 65 72 20 66 6f  of a register fo
34b0: 72 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73  r tracing purpos
34c0: 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  es:.*/.static vo
34d0: 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74  id memTracePrint
34e0: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 4d 65 6d 20  (FILE *out, Mem 
34f0: 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c  *p){.  if( p->fl
3500: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
3510: 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75  {.    fprintf(ou
3520: 74 2c 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d  t, " NULL");.  }
3530: 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61  else if( (p->fla
3540: 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
3550: 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e  M_Str))==(MEM_In
3560: 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20  t|MEM_Str) ){.  
3570: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3580: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3590: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
35a0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
35b0: 6e 74 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74  nt ){.    fprint
35c0: 66 28 6f 75 74 2c 20 22 20 69 3a 25 6c 6c 64 22  f(out, " i:%lld"
35d0: 2c 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64  , p->u.i);.#ifnd
35e0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
35f0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
3600: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
3610: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b  gs & MEM_Real ){
3620: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74  .    fprintf(out
3630: 2c 20 22 20 72 3a 25 67 22 2c 20 70 2d 3e 72 29  , " r:%g", p->r)
3640: 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65  ;.#endif.  }else
3650: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3660: 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20  MEM_RowSet ){.  
3670: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3680: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
3690: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
36a0: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
36b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
36c0: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
36d0: 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75  ;.    fprintf(ou
36e0: 74 2c 20 22 20 22 29 3b 0a 20 20 20 20 66 70 72  t, " ");.    fpr
36f0: 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20  intf(out, "%s", 
3700: 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61  zBuf);.  }.}.sta
3710: 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65  tic void registe
3720: 72 54 72 61 63 65 28 46 49 4c 45 20 2a 6f 75 74  rTrace(FILE *out
3730: 2c 20 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20  , int iReg, Mem 
3740: 2a 70 29 7b 0a 20 20 66 70 72 69 6e 74 66 28 6f  *p){.  fprintf(o
3750: 75 74 2c 20 22 52 45 47 5b 25 64 5d 20 3d 20 22  ut, "REG[%d] = "
3760: 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72  , iReg);.  memTr
3770: 61 63 65 50 72 69 6e 74 28 6f 75 74 2c 20 70 29  acePrint(out, p)
3780: 3b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c  ;.  fprintf(out,
3790: 20 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66   "\n");.}.#endif
37a0: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
37b0: 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20  DEBUG.#  define 
37c0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52  REGISTER_TRACE(R
37d0: 2c 4d 29 20 69 66 28 70 2d 3e 74 72 61 63 65 29  ,M) if(p->trace)
37e0: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d  registerTrace(p-
37f0: 3e 74 72 61 63 65 2c 52 2c 4d 29 0a 23 65 6c 73  >trace,R,M).#els
3800: 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49  e.#  define REGI
3810: 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a  STER_TRACE(R,M).
3820: 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66 20  #endif...#ifdef 
3830: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a  VDBE_PROFILE../*
3840: 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f   .** hwtime.h co
3850: 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73  ntains inline as
3860: 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f 72  sembler code for
3870: 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a   implementing .*
3880: 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e  * high-performan
3890: 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e  ce timing routin
38a0: 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  es..*/.#include 
38b0: 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64  "hwtime.h"..#end
38c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 43 48  if../*.** The CH
38d0: 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50  ECK_FOR_INTERRUP
38e0: 54 20 6d 61 63 72 6f 20 64 65 66 69 6e 65 64 20  T macro defined 
38f0: 68 65 72 65 20 6c 6f 6f 6b 73 20 74 6f 20 73 65  here looks to se
3900: 65 20 69 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69  e if the.** sqli
3910: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20  te3_interrupt() 
3920: 72 6f 75 74 69 6e 65 20 68 61 73 20 62 65 65 6e  routine has been
3930: 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 69 74 20   called.  If it 
3940: 68 61 73 20 62 65 65 6e 2c 20 74 68 65 6e 0a 2a  has been, then.*
3950: 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20  * processing of 
3960: 74 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d  the VDBE program
3970: 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64 2e   is interrupted.
3980: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  .**.** This macr
3990: 6f 20 61 64 64 65 64 20 74 6f 20 65 76 65 72 79  o added to every
39a0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 61   instruction tha
39b0: 74 20 64 6f 65 73 20 61 20 6a 75 6d 70 20 69 6e  t does a jump in
39c0: 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 69 6d 70   order to.** imp
39d0: 6c 65 6d 65 6e 74 20 61 20 6c 6f 6f 70 2e 20 20  lement a loop.  
39e0: 54 68 69 73 20 74 65 73 74 20 75 73 65 64 20 74  This test used t
39f0: 6f 20 62 65 20 6f 6e 20 65 76 65 72 79 20 73 69  o be on every si
3a00: 6e 67 6c 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  ngle instruction
3a10: 2c 0a 2a 2a 20 62 75 74 20 74 68 61 74 20 6d 65  ,.** but that me
3a20: 61 6e 74 20 77 65 20 6d 6f 72 65 20 74 65 73 74  ant we more test
3a30: 69 6e 67 20 74 68 61 74 20 77 65 20 6e 65 65 64  ing that we need
3a40: 65 64 2e 20 20 42 79 20 6f 6e 6c 79 20 74 65 73  ed.  By only tes
3a50: 74 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6c 61 67  ting the.** flag
3a60: 20 6f 6e 20 6a 75 6d 70 20 69 6e 73 74 72 75 63   on jump instruc
3a70: 74 69 6f 6e 73 2c 20 77 65 20 67 65 74 20 61 20  tions, we get a 
3a80: 28 73 6d 61 6c 6c 29 20 73 70 65 65 64 20 69 6d  (small) speed im
3a90: 70 72 6f 76 65 6d 65 6e 74 2e 0a 2a 2f 0a 23 64  provement..*/.#d
3aa0: 65 66 69 6e 65 20 43 48 45 43 4b 5f 46 4f 52 5f  efine CHECK_FOR_
3ab0: 49 4e 54 45 52 52 55 50 54 20 5c 0a 20 20 20 69  INTERRUPT \.   i
3ac0: 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  f( db->u1.isInte
3ad0: 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61  rrupted ) goto a
3ae0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
3af0: 72 72 75 70 74 3b 0a 0a 23 69 66 64 65 66 20 53  rrupt;..#ifdef S
3b00: 51 4c 49 54 45 5f 44 45 42 55 47 0a 73 74 61 74  QLITE_DEBUG.stat
3b10: 69 63 20 69 6e 74 20 66 69 6c 65 45 78 69 73 74  ic int fileExist
3b20: 73 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63  s(sqlite3 *db, c
3b30: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
3b40: 29 7b 0a 20 20 69 6e 74 20 72 65 73 20 3d 20 30  ){.  int res = 0
3b50: 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  ;.  int rc = SQL
3b60: 49 54 45 5f 4f 4b 3b 0a 23 69 66 64 65 66 20 53  ITE_OK;.#ifdef S
3b70: 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 2f 2a 20  QLITE_TEST.  /* 
3b80: 49 66 20 77 65 20 61 72 65 20 63 75 72 72 65 6e  If we are curren
3b90: 74 6c 79 20 74 65 73 74 69 6e 67 20 49 4f 20 65  tly testing IO e
3ba0: 72 72 6f 72 73 2c 20 74 68 65 6e 20 64 6f 20 6e  rrors, then do n
3bb0: 6f 74 20 63 61 6c 6c 20 4f 73 41 63 63 65 73 73  ot call OsAccess
3bc0: 28 29 20 74 6f 0a 20 20 2a 2a 20 74 65 73 74 20  () to.  ** test 
3bd0: 66 6f 72 20 74 68 65 20 70 72 65 73 65 6e 63 65  for the presence
3be0: 20 6f 66 20 7a 46 69 6c 65 2e 20 54 68 69 73 20   of zFile. This 
3bf0: 69 73 20 62 65 63 61 75 73 65 20 61 6e 79 20 49  is because any I
3c00: 4f 20 65 72 72 6f 72 20 74 68 61 74 0a 20 20 2a  O error that.  *
3c10: 2a 20 6f 63 63 75 72 73 20 68 65 72 65 20 77 69  * occurs here wi
3c20: 6c 6c 20 6e 6f 74 20 62 65 20 72 65 70 6f 72 74  ll not be report
3c30: 65 64 2c 20 63 61 75 73 69 6e 67 20 74 68 65 20  ed, causing the 
3c40: 74 65 73 74 20 74 6f 20 66 61 69 6c 2e 0a 20 20  test to fail..  
3c50: 2a 2f 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  */.  extern int 
3c60: 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72 6f 72  sqlite3_io_error
3c70: 5f 70 65 6e 64 69 6e 67 3b 0a 20 20 69 66 28 20  _pending;.  if( 
3c80: 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72 6f 72  sqlite3_io_error
3c90: 5f 70 65 6e 64 69 6e 67 3c 3d 30 20 29 0a 23 65  _pending<=0 ).#e
3ca0: 6e 64 69 66 0a 20 20 20 20 72 63 20 3d 20 73 71  ndif.    rc = sq
3cb0: 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28 64 62  lite3OsAccess(db
3cc0: 2d 3e 70 56 66 73 2c 20 7a 46 69 6c 65 2c 20 53  ->pVfs, zFile, S
3cd0: 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 45 58 49  QLITE_ACCESS_EXI
3ce0: 53 54 53 2c 20 26 72 65 73 29 3b 0a 20 20 72 65  STS, &res);.  re
3cf0: 74 75 72 6e 20 28 72 65 73 20 26 26 20 72 63 3d  turn (res && rc=
3d00: 3d 53 51 4c 49 54 45 5f 4f 4b 29 3b 0a 7d 0a 23  =SQLITE_OK);.}.#
3d10: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e  endif..#ifndef N
3d20: 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73  DEBUG./*.** This
3d30: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c   function is onl
3d40: 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  y called from wi
3d50: 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29  thin an assert()
3d60: 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a   expression. It.
3d70: 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74 20 74  ** checks that t
3d80: 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e  he sqlite3.nTran
3d90: 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65  saction variable
3da0: 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65   is correctly se
3db0: 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62  t to.** the numb
3dc0: 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61  er of non-transa
3dd0: 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73  ction savepoints
3de0: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68   currently in th
3df0: 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73  e .** linked lis
3e00: 74 20 73 74 61 72 74 69 6e 67 20 61 74 20 73 71  t starting at sq
3e10: 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74  lite3.pSavepoint
3e20: 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a  ..** .** Usage:.
3e30: 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
3e40: 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74  ( checkSavepoint
3e50: 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a  Count(db) );.*/.
3e60: 73 74 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b  static int check
3e70: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73  SavepointCount(s
3e80: 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69  qlite3 *db){.  i
3e90: 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65  nt n = 0;.  Save
3ea0: 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28  point *p;.  for(
3eb0: 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  p=db->pSavepoint
3ec0: 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29  ; p; p=p->pNext)
3ed0: 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20   n++;.  assert( 
3ee0: 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69  n==(db->nSavepoi
3ef0: 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73  nt + db->isTrans
3f00: 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29  actionSavepoint)
3f10: 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a   );.  return 1;.
3f20: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
3f30: 45 78 65 63 75 74 65 20 61 73 20 6d 75 63 68 20  Execute as much 
3f40: 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  of a VDBE progra
3f50: 6d 20 61 73 20 77 65 20 63 61 6e 20 74 68 65 6e  m as we can then
3f60: 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20 73   return..**.** s
3f70: 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 52 65  qlite3VdbeMakeRe
3f80: 61 64 79 28 29 20 6d 75 73 74 20 62 65 20 63 61  ady() must be ca
3f90: 6c 6c 65 64 20 62 65 66 6f 72 65 20 74 68 69 73  lled before this
3fa0: 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65   routine in orde
3fb0: 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20 74 68  r to.** close th
3fc0: 65 20 70 72 6f 67 72 61 6d 20 77 69 74 68 20 61  e program with a
3fd0: 20 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74 20 61   final OP_Halt a
3fe0: 6e 64 20 74 6f 20 73 65 74 20 75 70 20 74 68 65  nd to set up the
3ff0: 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20 61 6e   callbacks.** an
4000: 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  d the error mess
4010: 61 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a 2a 0a  age pointer..**.
4020: 2a 2a 20 57 68 65 6e 65 76 65 72 20 61 20 72 6f  ** Whenever a ro
4030: 77 20 6f 72 20 72 65 73 75 6c 74 20 64 61 74 61  w or result data
4040: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 74   is available, t
4050: 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c  his routine will
4060: 20 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76 6f 6b   either.** invok
4070: 65 20 74 68 65 20 72 65 73 75 6c 74 20 63 61 6c  e the result cal
4080: 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72 65 20  lback (if there 
4090: 69 73 20 6f 6e 65 29 20 6f 72 20 72 65 74 75 72  is one) or retur
40a0: 6e 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45  n with.** SQLITE
40b0: 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  _ROW..**.** If a
40c0: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
40d0: 65 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f 63 6b  e to open a lock
40e0: 65 64 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  ed database, the
40f0: 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a  n this routine.*
4100: 2a 20 77 69 6c 6c 20 65 69 74 68 65 72 20 69 6e  * will either in
4110: 76 6f 6b 65 20 74 68 65 20 62 75 73 79 20 63 61  voke the busy ca
4120: 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72 65  llback (if there
4130: 20 69 73 20 6f 6e 65 29 20 6f 72 20 69 74 20 77   is one) or it w
4140: 69 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20 53 51  ill.** return SQ
4150: 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a  LITE_BUSY..**.**
4160: 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63   If an error occ
4170: 75 72 73 2c 20 61 6e 20 65 72 72 6f 72 20 6d 65  urs, an error me
4180: 73 73 61 67 65 20 69 73 20 77 72 69 74 74 65 6e  ssage is written
4190: 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69   to memory obtai
41a0: 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69  ned.** from sqli
41b0: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61 6e 64  te3_malloc() and
41c0: 20 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73 20 6d   p->zErrMsg is m
41d0: 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  ade to point to 
41e0: 74 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 20  that memory..** 
41f0: 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 69  The error code i
4200: 73 20 73 74 6f 72 65 64 20 69 6e 20 70 2d 3e 72  s stored in p->r
4210: 63 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74 69  c and this routi
4220: 6e 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54  ne returns SQLIT
4230: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 49  E_ERROR..**.** I
4240: 66 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 65  f the callback e
4250: 76 65 72 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ver returns non-
4260: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 70  zero, then the p
4270: 72 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a 2a 20  rogram exits.** 
4280: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 54 68  immediately.  Th
4290: 65 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f 20 65  ere will be no e
42a0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 62 75 74  rror message but
42b0: 20 74 68 65 20 70 2d 3e 72 63 20 66 69 65 6c 64   the p->rc field
42c0: 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 53 51   is.** set to SQ
42d0: 4c 49 54 45 5f 41 42 4f 52 54 20 61 6e 64 20 74  LITE_ABORT and t
42e0: 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c  his routine will
42f0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
4300: 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d 65  RROR..**.** A me
4310: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
4320: 65 72 72 6f 72 20 63 61 75 73 65 73 20 70 2d 3e  error causes p->
4330: 72 63 20 74 6f 20 62 65 20 73 65 74 20 74 6f 20  rc to be set to 
4340: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64  SQLITE_NOMEM and
4350: 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69 6e 65   this.** routine
4360: 20 74 6f 20 72 65 74 75 72 6e 20 53 51 4c 49 54   to return SQLIT
4370: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 4f  E_ERROR..**.** O
4380: 74 68 65 72 20 66 61 74 61 6c 20 65 72 72 6f 72  ther fatal error
4390: 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  s return SQLITE_
43a0: 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 66 74  ERROR..**.** Aft
43b0: 65 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  er this routine 
43c0: 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 73 71  has finished, sq
43d0: 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c 69 7a  lite3VdbeFinaliz
43e0: 65 28 29 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a  e() should be.**
43f0: 20 75 73 65 64 20 74 6f 20 63 6c 65 61 6e 20 75   used to clean u
4400: 70 20 74 68 65 20 6d 65 73 73 20 74 68 61 74 20  p the mess that 
4410: 77 61 73 20 6c 65 66 74 20 62 65 68 69 6e 64 2e  was left behind.
4420: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  .*/.int sqlite3V
4430: 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65 20  dbeExec(.  Vdbe 
4440: 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *p              
4450: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
4460: 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 70 63  E */.){.  int pc
4470: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4480: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
4490: 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  ram counter */. 
44a0: 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f   Op *aOp = p->aO
44b0: 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  p;          /* C
44c0: 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f  opy of p->aOp */
44d0: 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20  .  Op *pOp;     
44e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
44f0: 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69   Current operati
4500: 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d  on */.  int rc =
4510: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
4520: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
4530: 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  eturn */.  sqlit
4540: 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20  e3 *db = p->db; 
4550: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
4560: 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65  abase */.  u8 re
4570: 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
4580: 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73   = 0; /* Reset s
4590: 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65  chema after an e
45a0: 72 72 6f 72 20 69 66 20 74 72 75 65 20 2a 2f 0a  rror if true */.
45b0: 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20    u8 encoding = 
45c0: 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20  ENC(db);     /* 
45d0: 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63  The database enc
45e0: 6f 64 69 6e 67 20 2a 2f 0a 23 69 66 6e 64 65 66  oding */.#ifndef
45f0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
4600: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
4610: 20 69 6e 74 20 63 68 65 63 6b 50 72 6f 67 72 65   int checkProgre
4620: 73 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ss;         /* T
4630: 72 75 65 20 69 66 20 70 72 6f 67 72 65 73 73 20  rue if progress 
4640: 63 61 6c 6c 62 61 63 6b 73 20 61 72 65 20 65 6e  callbacks are en
4650: 61 62 6c 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  abled */.  int n
4660: 50 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b  ProgressOps = 0;
4670: 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 73        /* Opcodes
4680: 20 65 78 65 63 75 74 65 64 20 73 69 6e 63 65 20   executed since 
4690: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
46a0: 6b 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d  k. */.#endif.  M
46b0: 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d  em *aMem = p->aM
46c0: 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  em;       /* Cop
46d0: 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a  y of p->aMem */.
46e0: 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b    Mem *pIn1 = 0;
46f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4700: 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  1st input operan
4710: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32  d */.  Mem *pIn2
4720: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
4730: 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f    /* 2nd input o
4740: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20  perand */.  Mem 
4750: 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20  *pIn3 = 0;      
4760: 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e         /* 3rd in
4770: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
4780: 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20   Mem *pOut = 0; 
4790: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
47a0: 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  utput operand */
47b0: 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20  .  int iCompare 
47c0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
47d0: 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20   Result of last 
47e0: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
47f0: 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  tion */.  int *a
4800: 50 65 72 6d 75 74 65 20 3d 20 30 3b 20 20 20 20  Permute = 0;    
4810: 20 20 20 20 20 2f 2a 20 50 65 72 6d 75 74 61 74       /* Permutat
4820: 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66  ion of columns f
4830: 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20 2a 2f  or OP_Compare */
4840: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
4850: 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74  FILE.  u64 start
4860: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4870: 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63    /* CPU clock c
4880: 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66  ount at start of
4890: 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74   opcode */.  int
48a0: 20 6f 72 69 67 50 63 3b 20 20 20 20 20 20 20 20   origPc;        
48b0: 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f 67 72          /* Progr
48c0: 61 6d 20 63 6f 75 6e 74 65 72 20 61 74 20 73 74  am counter at st
48d0: 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f  art of opcode */
48e0: 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49  .#endif.  /*** I
48f0: 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e 49 4f  NSERT STACK UNIO
4900: 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61  N HERE ***/..  a
4910: 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d  ssert( p->magic=
4920: 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20  =VDBE_MAGIC_RUN 
4930: 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73  );  /* sqlite3_s
4940: 74 65 70 28 29 20 76 65 72 69 66 69 65 73 20 74  tep() verifies t
4950: 68 69 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  his */.  assert(
4960: 20 64 62 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49   db->magic==SQLI
4970: 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 29 3b  TE_MAGIC_BUSY );
4980: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75  .  sqlite3VdbeMu
4990: 74 65 78 41 72 72 61 79 45 6e 74 65 72 28 70 29  texArrayEnter(p)
49a0: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53  ;.  if( p->rc==S
49b0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
49c0: 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
49d0: 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  ns if a malloc()
49e0: 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74   inside a call t
49f0: 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  o sqlite3_column
4a00: 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a  _text() or.    *
4a10: 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  * sqlite3_column
4a20: 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64  _text16() failed
4a30: 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e  .  */.    goto n
4a40: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73  o_mem;.  }.  ass
4a50: 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49  ert( p->rc==SQLI
4a60: 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d  TE_OK || p->rc==
4a70: 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20  SQLITE_BUSY );. 
4a80: 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f   p->rc = SQLITE_
4a90: 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d  OK;.  assert( p-
4aa0: 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20  >explain==0 );. 
4ab0: 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d   p->pResultSet =
4ac0: 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61   0;.  db->busyHa
4ad0: 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b  ndler.nBusy = 0;
4ae0: 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54  .  CHECK_FOR_INT
4af0: 45 52 52 55 50 54 3b 0a 20 20 73 71 6c 69 74 65  ERRUPT;.  sqlite
4b00: 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
4b10: 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  p);.#ifndef SQLI
4b20: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
4b30: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 63 68 65 63  _CALLBACK.  chec
4b40: 6b 50 72 6f 67 72 65 73 73 20 3d 20 64 62 2d 3e  kProgress = db->
4b50: 78 50 72 6f 67 72 65 73 73 21 3d 30 3b 0a 23 65  xProgress!=0;.#e
4b60: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
4b70: 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74  TE_DEBUG.  sqlit
4b80: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
4b90: 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e  loc();.  if( p->
4ba0: 70 63 3d 3d 30 20 0a 20 20 20 26 26 20 28 28 70  pc==0 .   && ((p
4bb0: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
4bc0: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
4bd0: 29 20 7c 7c 20 66 69 6c 65 45 78 69 73 74 73 28  ) || fileExists(
4be0: 64 62 2c 20 22 76 64 62 65 5f 65 78 70 6c 61 69  db, "vdbe_explai
4bf0: 6e 22 29 29 0a 20 20 29 7b 0a 20 20 20 20 69 6e  n")).  ){.    in
4c00: 74 20 69 3b 0a 20 20 20 20 70 72 69 6e 74 66 28  t i;.    printf(
4c10: 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69  "VDBE Program Li
4c20: 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20  sting:\n");.    
4c30: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4c40: 53 71 6c 28 70 29 3b 0a 20 20 20 20 66 6f 72 28  Sql(p);.    for(
4c50: 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69  i=0; i<p->nOp; i
4c60: 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ++){.      sqlit
4c70: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
4c80: 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d  dout, i, &aOp[i]
4c90: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  );.    }.  }.  i
4ca0: 66 28 20 66 69 6c 65 45 78 69 73 74 73 28 64 62  f( fileExists(db
4cb0: 2c 20 22 76 64 62 65 5f 74 72 61 63 65 22 29 20  , "vdbe_trace") 
4cc0: 29 7b 0a 20 20 20 20 70 2d 3e 74 72 61 63 65 20  ){.    p->trace 
4cd0: 3d 20 73 74 64 6f 75 74 3b 0a 20 20 7d 0a 20 20  = stdout;.  }.  
4ce0: 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
4cf0: 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66  Malloc();.#endif
4d00: 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63 3b  .  for(pc=p->pc;
4d10: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20   rc==SQLITE_OK; 
4d20: 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  pc++){.    asser
4d30: 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63 3c 70  t( pc>=0 && pc<p
4d40: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66 28  ->nOp );.    if(
4d50: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
4d60: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
4d70: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
4d80: 46 49 4c 45 0a 20 20 20 20 6f 72 69 67 50 63 20  FILE.    origPc 
4d90: 3d 20 70 63 3b 0a 20 20 20 20 73 74 61 72 74 20  = pc;.    start 
4da0: 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28  = sqlite3Hwtime(
4db0: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 4f  );.#endif.    pO
4dc0: 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 0a 20  p = &aOp[pc];.. 
4dd0: 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77     /* Only allow
4de0: 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49   tracing if SQLI
4df0: 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69  TE_DEBUG is defi
4e00: 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64  ned..    */.#ifd
4e10: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
4e20: 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65      if( p->trace
4e30: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 63   ){.      if( pc
4e40: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ==0 ){.        p
4e50: 72 69 6e 74 66 28 22 56 44 42 45 20 45 78 65 63  rintf("VDBE Exec
4e60: 75 74 69 6f 6e 20 54 72 61 63 65 3a 5c 6e 22 29  ution Trace:\n")
4e70: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
4e80: 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29  3VdbePrintSql(p)
4e90: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
4ea0: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4eb0: 4f 70 28 70 2d 3e 74 72 61 63 65 2c 20 70 63 2c  Op(p->trace, pc,
4ec0: 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 20 20 20   pOp);.    }.   
4ed0: 20 69 66 28 20 70 2d 3e 74 72 61 63 65 3d 3d 30   if( p->trace==0
4ee0: 20 26 26 20 70 63 3d 3d 30 20 29 7b 0a 20 20 20   && pc==0 ){.   
4ef0: 20 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42     sqlite3BeginB
4f00: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20  enignMalloc();. 
4f10: 20 20 20 20 20 69 66 28 20 66 69 6c 65 45 78 69       if( fileExi
4f20: 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f 73 71  sts(db, "vdbe_sq
4f30: 6c 74 72 61 63 65 22 29 20 29 7b 0a 20 20 20 20  ltrace") ){.    
4f40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4f50: 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20  rintSql(p);.    
4f60: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
4f70: 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
4f80: 28 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ();.    }.#endif
4f90: 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20  .      ..    /* 
4fa0: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
4fb0: 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c  we need to simul
4fc0: 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74  ate an interrupt
4fd0: 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70  .  This only hap
4fe0: 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77  pens.    ** if w
4ff0: 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c  e have a special
5000: 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20   test build..   
5010: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
5020: 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73  E_TEST.    if( s
5030: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5040: 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20  _count>0 ){.    
5050: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
5060: 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20  upt_count--;.   
5070: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
5080: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d  nterrupt_count==
5090: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
50a0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64  ite3_interrupt(d
50b0: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
50c0: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
50d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
50e0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
50f0: 20 20 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20      /* Call the 
5100: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
5110: 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69  k if it is confi
5120: 67 75 72 65 64 20 61 6e 64 20 74 68 65 20 72 65  gured and the re
5130: 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20  quired number.  
5140: 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73    ** of VDBE ops
5150: 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75   have been execu
5160: 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63  ted (either sinc
5170: 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f  e this invocatio
5180: 6e 20 6f 66 0a 20 20 20 20 2a 2a 20 73 71 6c 69  n of.    ** sqli
5190: 74 65 33 56 64 62 65 45 78 65 63 28 29 20 6f 72  te3VdbeExec() or
51a0: 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65   since last time
51b0: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
51c0: 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65  llback was calle
51d0: 64 29 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68  d)..    ** If th
51e0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
51f0: 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ack returns non-
5200: 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76  zero, exit the v
5210: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77  irtual machine w
5220: 69 74 68 0a 20 20 20 20 2a 2a 20 61 20 72 65 74  ith.    ** a ret
5230: 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f  urn code SQLITE_
5240: 41 42 4f 52 54 2e 0a 20 20 20 20 2a 2f 0a 20 20  ABORT..    */.  
5250: 20 20 69 66 28 20 63 68 65 63 6b 50 72 6f 67 72    if( checkProgr
5260: 65 73 73 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ess ){.      if(
5270: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
5280: 73 3d 3d 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  s==nProgressOps 
5290: 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 70  ){.        int p
52a0: 72 63 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  rc;.        if( 
52b0: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
52c0: 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
52d0: 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
52e0: 0a 20 20 20 20 20 20 20 20 70 72 63 20 3d 64 62  .        prc =db
52f0: 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e  ->xProgress(db->
5300: 70 50 72 6f 67 72 65 73 73 41 72 67 29 3b 0a 20  pProgressArg);. 
5310: 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
5320: 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
5330: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
5340: 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 20  to_misuse;.     
5350: 20 20 20 69 66 28 20 70 72 63 21 3d 30 20 29 7b     if( prc!=0 ){
5360: 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
5370: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
5380: 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
5390: 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
53a0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
53b0: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f 70 73      nProgressOps
53c0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
53d0: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f 70 73      nProgressOps
53e0: 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ++;.    }.#endif
53f0: 0a 0a 20 20 20 20 2f 2a 20 4f 6e 20 61 6e 79 20  ..    /* On any 
5400: 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20  opcode with the 
5410: 22 6f 75 74 32 2d 70 72 65 72 65 6c 61 73 65 22  "out2-prerelase"
5420: 20 74 61 67 2c 20 66 72 65 65 20 61 6e 79 0a 20   tag, free any. 
5430: 20 20 20 2a 2a 20 65 78 74 65 72 6e 61 6c 20 61     ** external a
5440: 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f 75 74 20 6f  llocations out o
5450: 66 20 6d 65 6d 5b 70 32 5d 20 61 6e 64 20 73 65  f mem[p2] and se
5460: 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 62 65 0a  t mem[p2] to be.
5470: 20 20 20 20 2a 2a 20 61 6e 20 75 6e 64 65 66 69      ** an undefi
5480: 6e 65 64 20 69 6e 74 65 67 65 72 2e 20 20 4f 70  ned integer.  Op
5490: 63 6f 64 65 73 20 77 69 6c 6c 20 65 69 74 68 65  codes will eithe
54a0: 72 20 66 69 6c 6c 20 69 6e 20 74 68 65 20 69 6e  r fill in the in
54b0: 74 65 67 65 72 0a 20 20 20 20 2a 2a 20 76 61 6c  teger.    ** val
54c0: 75 65 20 6f 72 20 63 6f 6e 76 65 72 74 20 6d 65  ue or convert me
54d0: 6d 5b 70 32 5d 20 74 6f 20 61 20 64 69 66 66 65  m[p2] to a diffe
54e0: 72 65 6e 74 20 74 79 70 65 2e 0a 20 20 20 20 2a  rent type..    *
54f0: 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  /.    assert( pO
5500: 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d 73 71 6c 69  p->opflags==sqli
5510: 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
5520: 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 20 29  y[pOp->opcode] )
5530: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  ;.    if( pOp->o
5540: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
5550: 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 20 29  UT2_PRERELEASE )
5560: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5570: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5580: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5590: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p2<=p->nMem );. 
55a0: 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65       pOut = &aMe
55b0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
55c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
55d0: 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61 6c 28  ReleaseExternal(
55e0: 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 70 4f 75  pOut);.      pOu
55f0: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
5600: 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  nt;.    }..    /
5610: 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69 6e  * Sanity checkin
5620: 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72 61  g on other opera
5630: 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  nds */.#ifdef SQ
5640: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
5650: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
5660: 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30   & OPFLG_IN1)!=0
5670: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
5680: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
5690: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
56a0: 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p1<=p->nMem );
56b0: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
56c0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26  TRACE(pOp->p1, &
56d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  aMem[pOp->p1]);.
56e0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
56f0: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
5700: 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20  FLG_IN2)!=0 ){. 
5710: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5720: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
5730: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5740: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
5750: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5760: 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b  (pOp->p2, &aMem[
5770: 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d  pOp->p2]);.    }
5780: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
5790: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49  pflags & OPFLG_I
57a0: 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N3)!=0 ){.      
57b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
57c0: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
57d0: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  t( pOp->p3<=p->n
57e0: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 52 45 47  Mem );.      REG
57f0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5800: 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p3, &aMem[pOp->
5810: 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p3]);.    }.    
5820: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
5830: 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21  s & OPFLG_OUT2)!
5840: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
5850: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
5860: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5870: 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p2<=p->nMem 
5880: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
5890: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
58a0: 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20   OPFLG_OUT3)!=0 
58b0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
58c0: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
58d0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
58e0: 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
58f0: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a      }.#endif.  .
5900: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
5910: 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a  >opcode ){../***
5920: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5930: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5940: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5950: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5960: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68  **********.** Wh
5970: 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20  at follows is a 
5980: 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73  massive switch s
5990: 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65  tatement where e
59a0: 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65  ach case impleme
59b0: 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74  nts a.** separat
59c0: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  e instruction in
59d0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
59e0: 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c  hine.  If we fol
59f0: 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a  low the usual.**
5a00: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e   indentation con
5a10: 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63  ventions, each c
5a20: 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ase should be in
5a30: 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63  dented by 6 spac
5a40: 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  es.  But.** that
5a50: 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73   is a lot of was
5a60: 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65  ted space on the
5a70: 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53   left margin.  S
5a80: 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69  o the code withi
5a90: 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20  n.** the switch 
5aa0: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62  statement will b
5ab0: 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e  reak with conven
5ac0: 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73  tion and be flus
5ad0: 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a  h-left. Another.
5ae0: 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28  ** big comment (
5af0: 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20  similar to this 
5b00: 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74  one) will mark t
5b10: 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20  he point in the 
5b20: 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65  code where.** we
5b30: 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b   transition back
5b40: 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e   to normal inden
5b50: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
5b60: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20  e formatting of 
5b70: 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70  each case is imp
5b80: 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b  ortant.  The mak
5b90: 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65  efile for SQLite
5ba0: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77  .** generates tw
5bb0: 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64  o C files "opcod
5bc0: 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64  es.h" and "opcod
5bd0: 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e  es.c" by scannin
5be0: 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c  g this.** file l
5bf0: 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73  ooking for lines
5c00: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
5c10: 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68   "case OP_".  Th
5c20: 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65  e opcodes.h file
5c30: 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c  s.** will be fil
5c40: 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65  led with #define
5c50: 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71  s that give uniq
5c60: 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ue integer value
5c70: 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63  s to each.** opc
5c80: 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f  ode and the opco
5c90: 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69  des.c file is fi
5ca0: 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72  lled with an arr
5cb0: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68  ay of strings wh
5cc0: 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69  ere.** each stri
5cd0: 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c  ng is the symbol
5ce0: 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ic name for the 
5cf0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70  corresponding op
5d00: 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a  code.  If the.**
5d10: 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20   case statement 
5d20: 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
5d30: 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20   comment of the 
5d40: 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73  form "/# same as
5d50: 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74   ... #/".** that
5d60: 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64   comment is used
5d70: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
5d80: 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c  e particular val
5d90: 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ue of the opcode
5da0: 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65  ..**.** Other ke
5db0: 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f  ywords in the co
5dc0: 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f  mment that follo
5dd0: 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65  ws each case are
5de0: 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73   used to.** cons
5df0: 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f  truct the OPFLG_
5e00: 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75  INITIALIZER valu
5e10: 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a  e that initializ
5e20: 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74  es opcodePropert
5e30: 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73  y[]..** Keywords
5e40: 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69   include: in1, i
5e50: 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72  n2, in3, out2_pr
5e60: 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20  erelease, out2, 
5e70: 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68  out3.  See.** th
5e80: 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20  e mkopcodeh.awk 
5e90: 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74  script for addit
5ea0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
5eb0: 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e  n..**.** Documen
5ec0: 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42  tation about VDB
5ed0: 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e  E opcodes is gen
5ee0: 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69  erated by scanni
5ef0: 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20  ng this file.** 
5f00: 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61  for lines of tha
5f10: 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64  t contain "Opcod
5f20: 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20  e:".  That line 
5f30: 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65  and all subseque
5f40: 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69  nt.** comment li
5f50: 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20  nes are used in 
5f60: 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
5f70: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d  f the opcode.htm
5f80: 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a  l documentation.
5f90: 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  ** file..**.** S
5fa0: 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20  UMMARY:.**.**   
5fb0: 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20    Formatting is 
5fc0: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72  important to scr
5fd0: 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74  ipts that scan t
5fe0: 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20  his file..**    
5ff0: 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20   Do not deviate 
6000: 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74  from the formatt
6010: 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e  ing style curren
6020: 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a  tly in use..**.*
6030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6040: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6050: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6060: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6070: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f  ************/../
6080: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20  * Opcode:  Goto 
6090: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
60a0: 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61   An unconditiona
60b0: 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  l jump to addres
60c0: 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78  s P2..** The nex
60d0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78  t instruction ex
60e0: 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a  ecuted will be .
60f0: 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e  ** the one at in
6100: 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20  dex P2 from the 
6110: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20  beginning of.** 
6120: 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
6130: 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20  case OP_Goto: { 
6140: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
6150: 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46  ump */.  CHECK_F
6160: 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
6170: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
6180: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6190: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20   Opcode:  Gosub 
61a0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
61b0: 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
61c0: 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f  ent address onto
61d0: 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
61e0: 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  and then jump to
61f0: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a   address P2..*/.
6200: 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b  case OP_Gosub: {
6210: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
6220: 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
6230: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
6240: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p1];.  assert( (
6250: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
6260: 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 70  M_Dyn)==0 );.  p
6270: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6280: 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  _Int;.  pIn1->u.
6290: 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54  i = pc;.  REGIST
62a0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
62b0: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20  , pIn1);.  pc = 
62c0: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62  pOp->p2 - 1;.  b
62d0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
62e0: 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a  de:  Return P1 *
62f0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d   * * *.**.** Jum
6300: 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  p to the next in
6310: 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20  struction after 
6320: 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72  the address in r
6330: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63  egister P1..*/.c
6340: 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b  ase OP_Return: {
6350: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
6360: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
6370: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6380: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6390: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
63a0: 0a 20 20 70 63 20 3d 20 28 69 6e 74 29 70 49 6e  .  pc = (int)pIn
63b0: 31 2d 3e 75 2e 69 3b 0a 20 20 62 72 65 61 6b 3b  1->u.i;.  break;
63c0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
63d0: 59 69 65 6c 64 20 50 31 20 2a 20 2a 20 2a 20 2a  Yield P1 * * * *
63e0: 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20  .**.** Swap the 
63f0: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
6400: 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 69  with the value i
6410: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
6420: 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a  /.case OP_Yield:
6430: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
6440: 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 70 63   in1 */.  int pc
6450: 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26  Dest;.  pIn1 = &
6460: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
6470: 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e   assert( (pIn1->
6480: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
6490: 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  ==0 );.  pIn1->f
64a0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
64b0: 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29    pcDest = (int)
64c0: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e  pIn1->u.i;.  pIn
64d0: 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52  1->u.i = pc;.  R
64e0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
64f0: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
6500: 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62  pc = pcDest;.  b
6510: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6520: 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20  de:  HaltIfNull 
6530: 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
6540: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76  *.** Check the v
6550: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
6560: 20 50 33 2e 20 20 49 66 20 69 73 20 69 73 20 4e   P3.  If is is N
6570: 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73  ULL then Halt us
6580: 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  ing.** parameter
6590: 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20   P1, P2, and P4 
65a0: 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65 20  as if this were 
65b0: 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69  a Halt instructi
65c0: 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76  on.  If the.** v
65d0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
65e0: 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P3 is not NULL,
65f0: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
6600: 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  ne is a no-op..*
6610: 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66  /.case OP_HaltIf
6620: 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20  Null: {      /* 
6630: 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20  in3 */.  pIn3 = 
6640: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
6650: 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
6660: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
6670: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20  0 ) break;.  /* 
6680: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
6690: 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a  o OP_Halt */.}..
66a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74  /* Opcode:  Halt
66b0: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
66c0: 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61  .** Exit immedia
66d0: 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20  tely.  All open 
66e0: 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65  cursors, etc are
66f0: 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d   closed.** autom
6700: 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20  atically..**.** 
6710: 50 31 20 69 73 20 74 68 65 20 72 65 73 75 6c 74  P1 is the result
6720: 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62   code returned b
6730: 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  y sqlite3_exec()
6740: 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28  , sqlite3_reset(
6750: 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33  ),.** or sqlite3
6760: 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f  _finalize().  Fo
6770: 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c  r a normal halt,
6780: 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20   this should be 
6790: 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a  SQLITE_OK (0)..*
67a0: 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74  * For errors, it
67b0: 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68   can be some oth
67c0: 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31  er value.  If P1
67d0: 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c  !=0 then P2 will
67e0: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
67f0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20  ether or not to 
6800: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72  rollback the cur
6810: 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
6820: 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61  .  Do not rollba
6830: 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f  ck.** if P2==OE_
6840: 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c  Fail. Do the rol
6850: 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f  lback if P2==OE_
6860: 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32  Rollback.  If P2
6870: 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74  ==OE_Abort,.** t
6880: 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c  hen back out all
6890: 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68 61   changes that ha
68a0: 76 65 20 6f 63 63 75 72 72 65 64 20 64 75 72 69  ve occurred duri
68b0: 6e 67 20 74 68 69 73 20 65 78 65 63 75 74 69 6f  ng this executio
68c0: 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45  n of the.** VDBE
68d0: 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c  , but do not rol
68e0: 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
68f0: 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  ction. .**.** If
6900: 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20   P4 is not null 
6910: 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72  then it is an er
6920: 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69  ror message stri
6930: 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  ng..**.** There 
6940: 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48  is an implied "H
6950: 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72  alt 0 0 0" instr
6960: 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20  uction inserted 
6970: 61 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20  at the very end 
6980: 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67  of.** every prog
6990: 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20  ram.  So a jump 
69a0: 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e  past the last in
69b0: 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65  struction of the
69c0: 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74   program.** is t
69d0: 68 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75  he same as execu
69e0: 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61  ting Halt..*/.ca
69f0: 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20  se OP_Halt: {.  
6a00: 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c  if( pOp->p1==SQL
6a10: 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72  ITE_OK && p->pFr
6a20: 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61  ame ){.    /* Ha
6a30: 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  lt the sub-progr
6a40: 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72  am. Return contr
6a50: 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74  ol to the parent
6a60: 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56   frame. */.    V
6a70: 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
6a80: 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
6a90: 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46    p->pFrame = pF
6aa0: 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20  rame->pParent;. 
6ab0: 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a     p->nFrame--;.
6ac0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
6ad0: 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
6ae0: 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70  >nChange);.    p
6af0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46  c = sqlite3VdbeF
6b00: 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61  rameRestore(pFra
6b10: 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  me);.    if( pOp
6b20: 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20  ->p2==OE_Ignore 
6b30: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74  ){.      /* Inst
6b40: 72 75 63 74 69 6f 6e 20 70 63 20 69 73 20 74 68  ruction pc is th
6b50: 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61  e OP_Program tha
6b60: 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75  t invoked the su
6b70: 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20  b-program .     
6b80: 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65   ** currently be
6b90: 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74  ing halted. If t
6ba0: 68 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f  he p2 instructio
6bb0: 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c  n of this OP_Hal
6bc0: 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72  t.      ** instr
6bd0: 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f  uction is set to
6be0: 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e   OE_Ignore, then
6bf0: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
6c00: 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20   is throwing.   
6c10: 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20     ** an IGNORE 
6c20: 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68  exception. In th
6c30: 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20  is case jump to 
6c40: 74 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63  the address spec
6c50: 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61  ified.      ** a
6c60: 73 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20  s the p2 of the 
6c70: 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
6c80: 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63  am.  */.      pc
6c90: 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32   = p->aOp[pc].p2
6ca0: 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f  -1;.    }.    aO
6cb0: 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20  p = p->aOp;.    
6cc0: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
6cd0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
6ce0: 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70    p->rc = pOp->p
6cf0: 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74  1;.  p->errorAct
6d00: 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70  ion = (u8)pOp->p
6d10: 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b  2;.  p->pc = pc;
6d20: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a  .  if( pOp->p4.z
6d30: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
6d40: 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
6d50: 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
6d60: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 7d 0a  pOp->p4.z);.  }.
6d70: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
6d80: 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73  beHalt(p);.  ass
6d90: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
6da0: 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  BUSY || rc==SQLI
6db0: 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
6dc0: 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69  ITE_ERROR );.  i
6dd0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
6de0: 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20  SY ){.    p->rc 
6df0: 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
6e00: 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  SY;.  }else{.   
6e10: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
6e20: 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d  ITE_OK || p->rc=
6e30: 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49  =SQLITE_CONSTRAI
6e40: 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  NT );.    assert
6e50: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
6e60: 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  || db->nDeferred
6e70: 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63  Cons>0 );.    rc
6e80: 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54   = p->rc ? SQLIT
6e90: 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45  E_ERROR : SQLITE
6ea0: 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74  _DONE;.  }.  got
6eb0: 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d  o vdbe_return;.}
6ec0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  ../* Opcode: Int
6ed0: 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  eger P1 P2 * * *
6ee0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69  .**.** The 32-bi
6ef0: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  t integer value 
6f00: 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e  P1 is written in
6f10: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
6f20: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
6f30: 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  er: {         /*
6f40: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
6f50: 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   */.  pOut->u.i 
6f60: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65  = pOp->p1;.  bre
6f70: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6f80: 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50  : Int64 * P2 * P
6f90: 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
6fa0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36  a pointer to a 6
6fb0: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  4-bit integer va
6fc0: 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68  lue..** Write th
6fd0: 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  at value into re
6fe0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
6ff0: 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20  se OP_Int64: {  
7000: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
7010: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
7020: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
7030: 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f  .pI64!=0 );.  pO
7040: 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e  ut->u.i = *pOp->
7050: 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b  p4.pI64;.  break
7060: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
7070: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
7080: 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64  G_POINT./* Opcod
7090: 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50  e: Real * P2 * P
70a0: 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
70b0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36  a pointer to a 6
70c0: 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70  4-bit floating p
70d0: 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  oint value..** W
70e0: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
70f0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
7100: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
7110: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
7120: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c  /* same as TK_FL
7130: 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c  OAT, out2-prerel
7140: 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
7150: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c  flags = MEM_Real
7160: 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c  ;.  assert( !sql
7170: 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e  ite3IsNaN(*pOp->
7180: 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70  p4.pReal) );.  p
7190: 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70  Out->r = *pOp->p
71a0: 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b  4.pReal;.  break
71b0: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
71c0: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a  pcode: String8 *
71d0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
71e0: 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   P4 points to a 
71f0: 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55  nul terminated U
7200: 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69  TF-8 string. Thi
7210: 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e  s opcode is tran
7220: 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f  sformed .** into
7230: 20 61 6e 20 4f 50 5f 53 74 72 69 6e 67 20 62 65   an OP_String be
7240: 66 6f 72 65 20 69 74 20 69 73 20 65 78 65 63 75  fore it is execu
7250: 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 72 73  ted for the firs
7260: 74 20 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20  t time..*/.case 
7270: 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20  OP_String8: {   
7280: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
7290: 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32   TK_STRING, out2
72a0: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
72b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
72c0: 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e  .z!=0 );.  pOp->
72d0: 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69  opcode = OP_Stri
72e0: 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20  ng;.  pOp->p1 = 
72f0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
7300: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66  pOp->p4.z);..#if
7310: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
7320: 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63  _UTF16.  if( enc
7330: 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54  oding!=SQLITE_UT
7340: 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  F8 ){.    rc = s
7350: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
7360: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
7370: 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  4.z, -1, SQLITE_
7380: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
7390: 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  TIC);.    if( rc
73a0: 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20  ==SQLITE_TOOBIG 
73b0: 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a  ) goto too_big;.
73c0: 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f      if( SQLITE_O
73d0: 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68  K!=sqlite3VdbeCh
73e0: 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75  angeEncoding(pOu
73f0: 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67  t, encoding) ) g
7400: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
7410: 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a 4d  assert( pOut->zM
7420: 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29  alloc==pOut->z )
7430: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
7440: 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ut->flags & MEM_
7450: 44 79 6e 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d  Dyn );.    pOut-
7460: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  >zMalloc = 0;.  
7470: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
7480: 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20   MEM_Static;.   
7490: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20   pOut->flags &= 
74a0: 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69 66  ~MEM_Dyn;.    if
74b0: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
74c0: 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20  4_DYNAMIC ){.   
74d0: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
74e0: 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  (db, pOp->p4.z);
74f0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e  .    }.    pOp->
7500: 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41  p4type = P4_DYNA
7510: 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34  MIC;.    pOp->p4
7520: 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20  .z = pOut->z;.  
7530: 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74    pOp->p1 = pOut
7540: 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  ->n;.  }.#endif.
7550: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62    if( pOp->p1>db
7560: 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
7570: 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
7580: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
7590: 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c  g;.  }.  /* Fall
75a0: 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
75b0: 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74  next case, OP_St
75c0: 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20  ring */.}.  ./* 
75d0: 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50  Opcode: String P
75e0: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
75f0: 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c  * The string val
7600: 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20  ue P4 of length 
7610: 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73 74  P1 (bytes) is st
7620: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
7630: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
7640: 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20  String: {       
7650: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
7660: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
7670: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
7680: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
7690: 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53   = MEM_Str|MEM_S
76a0: 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
76b0: 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d    pOut->z = pOp-
76c0: 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e  >p4.z;.  pOut->n
76d0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f   = pOp->p1;.  pO
76e0: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
76f0: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
7700: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
7710: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7720: 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 2a 20 50  Opcode: Null * P
7730: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
7740: 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20  ite a NULL into 
7750: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
7760: 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20  case OP_Null: { 
7770: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
7780: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7790: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
77a0: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 62 72 65 61  MEM_Null;.  brea
77b0: 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
77c0: 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50  : Blob P1 P2 * P
77d0: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74  4.**.** P4 point
77e0: 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64  s to a blob of d
77f0: 61 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e  ata P1 bytes lon
7800: 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a  g.  Store this.*
7810: 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74  * blob in regist
7820: 65 72 20 50 32 2e 20 54 68 69 73 20 69 6e 73 74  er P2. This inst
7830: 72 75 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63  ruction is not c
7840: 6f 64 65 64 20 64 69 72 65 63 74 6c 79 0a 2a 2a  oded directly.**
7850: 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   by the compiler
7860: 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 20 63  . Instead, the c
7870: 6f 6d 70 69 6c 65 72 20 6c 61 79 65 72 20 73 70  ompiler layer sp
7880: 65 63 69 66 69 65 73 0a 2a 2a 20 61 6e 20 4f 50  ecifies.** an OP
7890: 5f 48 65 78 42 6c 6f 62 20 6f 70 63 6f 64 65 2c  _HexBlob opcode,
78a0: 20 77 69 74 68 20 74 68 65 20 68 65 78 20 73 74   with the hex st
78b0: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
78c0: 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 6c  ion of.** the bl
78d0: 6f 62 20 61 73 20 50 34 2e 20 54 68 69 73 20 6f  ob as P4. This o
78e0: 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f  pcode is transfo
78f0: 72 6d 65 64 20 74 6f 20 61 6e 20 4f 50 5f 42 6c  rmed to an OP_Bl
7900: 6f 62 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20  ob.** the first 
7910: 74 69 6d 65 20 69 74 20 69 73 20 65 78 65 63 75  time it is execu
7920: 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ted..*/.case OP_
7930: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
7940: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
7950: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
7960: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c  ssert( pOp->p1 <
7970: 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  = SQLITE_MAX_LEN
7980: 47 54 48 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  GTH );.  sqlite3
7990: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f  VdbeMemSetStr(pO
79a0: 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70  ut, pOp->p4.z, p
79b0: 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20  Op->p1, 0, 0);. 
79c0: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
79d0: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
79e0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
79f0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
7a00: 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61  /* Opcode: Varia
7a10: 62 6c 65 20 50 31 20 50 32 20 50 33 20 50 34 20  ble P1 P2 P3 P4 
7a20: 2a 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  *.**.** Transfer
7a30: 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62   the values of b
7a40: 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 20  ound parameters 
7a50: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 69 6e 74 6f  P1..P1+P3-1 into
7a60: 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 50 32   registers.** P2
7a70: 2e 2e 50 32 2b 50 33 2d 31 2e 0a 2a 2a 0a 2a 2a  ..P2+P3-1..**.**
7a80: 20 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65   If the paramete
7a90: 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e  r is named, then
7aa0: 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72   its name appear
7ab0: 73 20 69 6e 20 50 34 20 61 6e 64 20 50 33 3d 3d  s in P4 and P3==
7ac0: 31 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  1..** The P4 val
7ad0: 75 65 20 69 73 20 75 73 65 64 20 62 79 20 73 71  ue is used by sq
7ae0: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
7af0: 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a  eter_name()..*/.
7b00: 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65  case OP_Variable
7b10: 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20  : {.  int p1;   
7b20: 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 61 62         /* Variab
7b30: 6c 65 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20  le to copy from 
7b40: 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20  */.  int p2;    
7b50: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
7b60: 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a  r to copy to */.
7b70: 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
7b80: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
7b90: 76 61 6c 75 65 73 20 6c 65 66 74 20 74 6f 20 63  values left to c
7ba0: 6f 70 79 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56  opy */.  Mem *pV
7bb0: 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c  ar;       /* Val
7bc0: 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66 65  ue being transfe
7bd0: 72 72 65 64 20 2a 2f 0a 0a 20 20 70 31 20 3d 20  rred */..  p1 = 
7be0: 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 70  pOp->p1 - 1;.  p
7bf0: 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 6e  2 = pOp->p2;.  n
7c00: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
7c10: 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70  sert( p1>=0 && p
7c20: 31 2b 6e 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a  1+n<=p->nVar );.
7c30: 20 20 61 73 73 65 72 74 28 20 70 32 3e 3d 31 20    assert( p2>=1 
7c40: 26 26 20 70 32 2b 6e 2d 31 3c 3d 70 2d 3e 6e 4d  && p2+n-1<=p->nM
7c50: 65 6d 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  em );.  assert( 
7c60: 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20  pOp->p4.z==0 || 
7c70: 70 4f 70 2d 3e 70 33 3d 3d 31 20 7c 7c 20 70 4f  pOp->p3==1 || pO
7c80: 70 2d 3e 70 33 3d 3d 30 20 29 3b 0a 0a 20 20 77  p->p3==0 );..  w
7c90: 68 69 6c 65 28 20 6e 2d 2d 20 3e 20 30 20 29 7b  hile( n-- > 0 ){
7ca0: 0a 20 20 20 20 70 56 61 72 20 3d 20 26 70 2d 3e  .    pVar = &p->
7cb0: 61 56 61 72 5b 70 31 2b 2b 5d 3b 0a 20 20 20 20  aVar[p1++];.    
7cc0: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
7cd0: 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29  emTooBig(pVar) )
7ce0: 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
7cf0: 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _big;.    }.    
7d00: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 2b  pOut = &aMem[p2+
7d10: 2b 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  +];.    sqlite3V
7d20: 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74  dbeMemReleaseExt
7d30: 65 72 6e 61 6c 28 70 4f 75 74 29 3b 0a 20 20 20  ernal(pOut);.   
7d40: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
7d50: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 73 71 6c  EM_Null;.    sql
7d60: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
7d70: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61  owCopy(pOut, pVa
7d80: 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  r, MEM_Static);.
7d90: 20 20 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42      UPDATE_MAX_B
7da0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
7db0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
7dc0: 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50  * Opcode: Move P
7dd0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
7de0: 2a 20 4d 6f 76 65 20 74 68 65 20 76 61 6c 75 65  * Move the value
7df0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
7e00: 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69  ..P1+P3-1 over i
7e10: 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73  nto.** registers
7e20: 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52   P2..P2+P3-1.  R
7e30: 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b  egisters P1..P1+
7e40: 50 31 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74  P1-1 are.** left
7e50: 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e   holding a NULL.
7e60: 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72    It is an error
7e70: 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61   for register ra
7e80: 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50  nges.** P1..P1+P
7e90: 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50  3-1 and P2..P2+P
7ea0: 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 0a  3-1 to overlap..
7eb0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a  */.case OP_Move:
7ec0: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c   {.  char *zMall
7ed0: 6f 63 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67  oc;   /* Holding
7ee0: 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20 61 6c   variable for al
7ef0: 6c 6f 63 61 74 65 64 20 6d 65 6d 6f 72 79 20 2a  located memory *
7f00: 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20  /.  int n;      
7f10: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
7f20: 66 20 72 65 67 69 73 74 65 72 73 20 6c 65 66 74  f registers left
7f30: 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e   to copy */.  in
7f40: 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f  t p1;          /
7f50: 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f  * Register to co
7f60: 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74  py from */.  int
7f70: 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   p2;          /*
7f80: 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70   Register to cop
7f90: 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70  y to */..  n = p
7fa0: 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70  Op->p3;.  p1 = p
7fb0: 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
7fc0: 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
7fd0: 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26  ( n>0 && p1>0 &&
7fe0: 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72   p2>0 );.  asser
7ff0: 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70  t( p1+n<=p2 || p
8000: 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49  2+n<=p1 );..  pI
8010: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a  n1 = &aMem[p1];.
8020: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
8030: 32 5d 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d  2];.  while( n--
8040: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
8050: 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e  pOut<=&aMem[p->n
8060: 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  Mem] );.    asse
8070: 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b  rt( pIn1<=&aMem[
8080: 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20  p->nMem] );.    
8090: 7a 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e  zMalloc = pOut->
80a0: 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f 75  zMalloc;.    pOu
80b0: 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  t->zMalloc = 0;.
80c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
80d0: 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e  emMove(pOut, pIn
80e0: 31 29 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d  1);.    pIn1->zM
80f0: 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b  alloc = zMalloc;
8100: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
8110: 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b  ACE(p2++, pOut);
8120: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20  .    pIn1++;.   
8130: 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62   pOut++;.  }.  b
8140: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
8150: 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 2a  de: Copy P1 P2 *
8160: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20   * *.**.** Make 
8170: 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74  a copy of regist
8180: 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73  er P1 into regis
8190: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
81a0: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d  is instruction m
81b0: 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79  akes a deep copy
81c0: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
81d0: 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69  A duplicate.** i
81e0: 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74  s made of any st
81f0: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e  ring or blob con
8200: 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f  stant.  See also
8210: 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61   OP_SCopy..*/.ca
8220: 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 20 20 20  se OP_Copy: {   
8230: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
8240: 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
8250: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
8260: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
8270: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
8280: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
8290: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
82a0: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
82b0: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
82c0: 45 70 68 65 6d 29 3b 0a 20 20 44 65 65 70 68 65  Ephem);.  Deephe
82d0: 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
82e0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
82f0: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
8300: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8310: 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31  Opcode: SCopy P1
8320: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
8330: 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63  Make a shallow c
8340: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20  opy of register 
8350: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
8360: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
8370: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
8380: 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79  s a shallow copy
8390: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
83a0: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
83b0: 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  is a string or b
83c0: 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  lob, then the co
83d0: 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69  py is only a poi
83e0: 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f  nter to the.** o
83f0: 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63  riginal and henc
8400: 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e if the origina
8410: 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c  l changes so wil
8420: 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57  l the copy..** W
8430: 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69  orse, if the ori
8440: 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63  ginal is dealloc
8450: 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62  ated, the copy b
8460: 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a  ecomes invalid..
8470: 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f 67  ** Thus the prog
8480: 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74  ram must guarant
8490: 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69 67  ee that the orig
84a0: 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68  inal will not ch
84b0: 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74  ange.** during t
84c0: 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74  he lifetime of t
84d0: 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50  he copy.  Use OP
84e0: 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20  _Copy to make a 
84f0: 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79  complete.** copy
8500: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f  ..*/.case OP_SCo
8510: 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  py: {           
8520: 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f   /* in1, out2 */
8530: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
8540: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
8550: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
8560: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  ];.  assert( pOu
8570: 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c  t!=pIn1 );.  sql
8580: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
8590: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
85a0: 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  1, MEM_Ephem);. 
85b0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
85c0: 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
85d0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
85e0: 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77  pcode: ResultRow
85f0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
8600: 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 73  ** The registers
8610: 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50   P1 through P1+P
8620: 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69  2-1 contain a si
8630: 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72  ngle row of.** r
8640: 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63  esults. This opc
8650: 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73  ode causes the s
8660: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61  qlite3_step() ca
8670: 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a  ll to terminate.
8680: 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ** with an SQLIT
8690: 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64  E_ROW return cod
86a0: 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70  e and it sets up
86b0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d   the sqlite3_stm
86c0: 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74  t.** structure t
86d0: 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73  o provide access
86e0: 20 74 6f 20 74 68 65 20 74 6f 70 20 50 31 20 76   to the top P1 v
86f0: 61 6c 75 65 73 20 61 73 20 74 68 65 20 72 65 73  alues as the res
8700: 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a 63  ult.** row..*/.c
8710: 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  ase OP_ResultRow
8720: 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
8730: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65  .  int i;.  asse
8740: 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d  rt( p->nResColum
8750: 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  n==pOp->p2 );.  
8760: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
8770: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
8780: 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d  Op->p1+pOp->p2<=
8790: 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 0a 20 20  p->nMem+1 );..  
87a0: 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61 74 65  /* If this state
87b0: 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65  ment has violate
87c0: 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65  d immediate fore
87d0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
87e0: 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74  nts, do.  ** not
87f0: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
8800: 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66  er of rows modif
8810: 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20  ied. And do not 
8820: 52 45 4c 45 41 53 45 20 74 68 65 20 73 74 61 74  RELEASE the stat
8830: 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73  ement.  ** trans
8840: 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73  action. It needs
8850: 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
8860: 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51  ck.  */.  if( SQ
8870: 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73  LITE_OK!=(rc = s
8880: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
8890: 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20  k(p, 0)) ){.    
88a0: 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67  assert( db->flag
88b0: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
88c0: 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ws );.    assert
88d0: 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  ( p->usesStmtJou
88e0: 72 6e 61 6c 20 29 3b 0a 20 20 20 20 62 72 65 61  rnal );.    brea
88f0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  k;.  }..  /* If 
8900: 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  the SQLITE_Count
8910: 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65 74  Rows flag is set
8920: 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67   in sqlite3.flag
8930: 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20  s mask, then .  
8940: 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74  ** DML statement
8950: 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  s invoke this op
8960: 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74  code to return t
8970: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
8980: 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64  s .  ** modified
8990: 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68   to the user. Th
89a0: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77  is is the only w
89b0: 61 79 20 74 68 61 74 20 61 20 56 4d 20 74 68 61  ay that a VM tha
89c0: 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73  t.  ** opens a s
89d0: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
89e0: 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20  tion may invoke 
89f0: 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a  this opcode..  *
8a00: 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74  *.  ** In case t
8a10: 68 69 73 20 69 73 20 73 75 63 68 20 61 20 73 74  his is such a st
8a20: 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61  atement, close a
8a30: 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  ny statement tra
8a40: 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70  nsaction.  ** op
8a50: 65 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d 20  ened by this VM 
8a60: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
8a70: 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20   control to the 
8a80: 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f  user. This is to
8a90: 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61  .  ** ensure tha
8aa0: 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  t statement-tran
8ab0: 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77  sactions are alw
8ac0: 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20  ays nested, not 
8ad0: 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a  overlapping..  *
8ae0: 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74  * If the open st
8af0: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
8b00: 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65  ion is not close
8b10: 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65  d here, then the
8b20: 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73   user.  ** may s
8b30: 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74  tep another VM t
8b40: 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77  hat opens its ow
8b50: 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  n statement tran
8b60: 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20  saction. This.  
8b70: 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f  ** may lead to o
8b80: 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65  verlapping state
8b90: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
8ba0: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  s..  **.  ** The
8bb0: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
8bc0: 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20  action is never 
8bd0: 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e  a top-level tran
8be0: 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a  saction.  Hence.
8bf0: 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45    ** the RELEASE
8c00: 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20   call below can 
8c10: 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f  never fail..  */
8c20: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53  .  assert( p->iS
8c30: 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64  tatement==0 || d
8c40: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
8c50: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72  CountRows );.  r
8c60: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
8c70: 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c  loseStatement(p,
8c80: 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41   SAVEPOINT_RELEA
8c90: 53 45 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  SE);.  if( NEVER
8ca0: 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
8cb0: 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ){.    break;.  
8cc0: 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  }..  /* Invalida
8cd0: 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c  te all ephemeral
8ce0: 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68   cursor row cach
8cf0: 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65  es */.  p->cache
8d00: 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43  Ctr = (p->cacheC
8d10: 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a  tr + 2)|1;..  /*
8d20: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 72   Make sure the r
8d30: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75  esults of the cu
8d40: 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30  rrent row are \0
8d50: 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20  00 terminated.  
8d60: 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61  ** and have an a
8d70: 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54  ssigned type.  T
8d80: 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 64  he results are d
8d90: 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20  e-ephemeralized 
8da0: 61 73 0a 20 20 2a 2a 20 61 73 20 73 69 64 65 20  as.  ** as side 
8db0: 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70  effect..  */.  p
8dc0: 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74  Mem = p->pResult
8dd0: 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Set = &aMem[pOp-
8de0: 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  >p1];.  for(i=0;
8df0: 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29   i<pOp->p2; i++)
8e00: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
8e10: 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65  eMemNulTerminate
8e20: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
8e30: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
8e40: 6f 72 65 54 79 70 65 28 26 70 4d 65 6d 5b 69 5d  oreType(&pMem[i]
8e50: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
8e60: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c  TRACE(pOp->p1+i,
8e70: 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a   &pMem[i]);.  }.
8e80: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
8e90: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
8ea0: 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75  _mem;..  /* Retu
8eb0: 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20  rn SQLITE_ROW.  
8ec0: 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20  */.  p->pc = pc 
8ed0: 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  + 1;.  rc = SQLI
8ee0: 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76  TE_ROW;.  goto v
8ef0: 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f  dbe_return;.}../
8f00: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74  * Opcode: Concat
8f10: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
8f20: 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74  .** Add the text
8f30: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
8f40: 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20  onto the end of 
8f50: 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72  the text in.** r
8f60: 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73  egister P2 and s
8f70: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
8f80: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
8f90: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65  ** If either the
8fa0: 20 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61   P1 or P2 text a
8fb0: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f  re NULL then sto
8fc0: 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a  re NULL in P3..*
8fd0: 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c  *.**   P3 = P2 |
8fe0: 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73  | P1.**.** It is
8ff0: 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20   illegal for P1 
9000: 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65  and P3 to be the
9010: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20   same register. 
9020: 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66  Sometimes,.** if
9030: 20 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20   P3 is the same 
9040: 72 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20  register as P2, 
9050: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
9060: 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f  on is able.** to
9070: 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28   avoid a memcpy(
9080: 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  )..*/.case OP_Co
9090: 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ncat: {         
90a0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
90b0: 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32  CONCAT, in1, in2
90c0: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
90d0: 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d  nByte;..  pIn1 =
90e0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
90f0: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
9100: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
9110: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
9120: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
9130: 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28  1!=pOut );.  if(
9140: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
9150: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
9160: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
9170: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
9180: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
9190: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28  break;.  }.  if(
91a0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
91b0: 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28  ) || ExpandBlob(
91c0: 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pIn2) ) goto no_
91d0: 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  mem;.  Stringify
91e0: 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
91f0: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
9200: 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n2, encoding);. 
9210: 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e   nByte = pIn1->n
9220: 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66   + pIn2->n;.  if
9230: 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d  ( nByte>db->aLim
9240: 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
9250: 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
9260: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
9270: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
9280: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29  g(pOut, MEM_Str)
9290: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
92a0: 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c  dbeMemGrow(pOut,
92b0: 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70   (int)nByte+2, p
92c0: 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20  Out==pIn2) ){.  
92d0: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
92e0: 20 7d 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70   }.  if( pOut!=p
92f0: 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70  In2 ){.    memcp
9300: 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d  y(pOut->z, pIn2-
9310: 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20  >z, pIn2->n);.  
9320: 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74  }.  memcpy(&pOut
9330: 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49  ->z[pIn2->n], pI
9340: 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b  n1->z, pIn1->n);
9350: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
9360: 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a  ] = 0;.  pOut->z
9370: 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20  [nByte+1] = 0;. 
9380: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
9390: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
93a0: 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65  ->n = (int)nByte
93b0: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
93c0: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
93d0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
93e0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
93f0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
9400: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
9410: 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c  *.** Add the val
9420: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9430: 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
9440: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
9450: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
9460: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
9470: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
9480: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
9490: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
94a0: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
94b0: 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20  de: Multiply P1 
94c0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a  P2 P3 * *.**.**.
94d0: 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20  ** Multiply the 
94e0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
94f0: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
9500: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
9510: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
9520: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
9530: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
9540: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
9550: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
9560: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
9570: 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20  pcode: Subtract 
9580: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
9590: 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65 20  ** Subtract the 
95a0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
95b0: 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61  r P1 from the va
95c0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
95d0: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
95e0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
95f0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
9600: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
9610: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
9620: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
9630: 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20   Opcode: Divide 
9640: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
9650: 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61  ** Divide the va
9660: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9670: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
9680: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
9690: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
96a0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
96b0: 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29  er P3 (P3=P2/P1)
96c0: 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  . If the value i
96d0: 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  n .** register P
96e0: 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  1 is zero, then 
96f0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
9700: 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e  LL. If either in
9710: 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c  put is .** NULL,
9720: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
9730: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
9740: 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20  e: Remainder P1 
9750: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
9760: 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61  Compute the rema
9770: 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65  inder after inte
9780: 67 65 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20  ger division of 
9790: 74 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20  the value in.** 
97a0: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
97b0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
97c0: 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72  ster P2 and stor
97d0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
97e0: 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76  P3. .** If the v
97f0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9800: 20 50 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20   P2 is zero the 
9810: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
9820: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  ** If either ope
9830: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68  rand is NULL, th
9840: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
9850: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
9860: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
9870: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
9880: 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32  K_PLUS, in1, in2
9890: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
98a0: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20  P_Subtract:     
98b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
98c0: 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e   as TK_MINUS, in
98d0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
98e0: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
98f0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
9900: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41  * same as TK_STA
9910: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
9920: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76  3 */.case OP_Div
9930: 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  ide:            
9940: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
9950: 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e  K_SLASH, in1, in
9960: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
9970: 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20  OP_Remainder: { 
9980: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
9990: 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31  e as TK_REM, in1
99a0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
99b0: 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20   int flags;     
99c0: 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d   /* Combined MEM
99d0: 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f  _* flags from bo
99e0: 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69  th inputs */.  i
99f0: 36 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f  64 iA;         /
9a00: 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
9a10: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
9a20: 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20  */.  i64 iB;    
9a30: 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
9a40: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
9a50: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
9a60: 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52  le rA;      /* R
9a70: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66  eal value of lef
9a80: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64  t operand */.  d
9a90: 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f  ouble rB;      /
9aa0: 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20  * Real value of 
9ab0: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
9ac0: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
9ad0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70  [pOp->p1];.  app
9ae0: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
9af0: 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20  y(pIn1);.  pIn2 
9b00: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
9b10: 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  ;.  applyNumeric
9b20: 41 66 66 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a  Affinity(pIn2);.
9b30: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
9b40: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
9b50: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c   = pIn1->flags |
9b60: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn2->flags;.  
9b70: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
9b80: 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f  _Null)!=0 ) goto
9b90: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
9ba0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66  lt_is_null;.  if
9bb0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
9bc0: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn2->flags & M
9bd0: 45 4d 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74  EM_Int)==MEM_Int
9be0: 20 29 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e   ){.    iA = pIn
9bf0: 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d  1->u.i;.    iB =
9c00: 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn2->u.i;.    
9c10: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
9c20: 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73  ode ){.      cas
9c30: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
9c40: 20 20 69 42 20 2b 3d 20 69 41 3b 20 20 20 20 20    iB += iA;     
9c50: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
9c60: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
9c70: 20 20 20 20 69 42 20 2d 3d 20 69 41 3b 20 20 20      iB -= iA;   
9c80: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9c90: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
9ca0: 79 3a 20 20 20 20 69 42 20 2a 3d 20 69 41 3b 20  y:    iB *= iA; 
9cb0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9cc0: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
9cd0: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  e: {.        if(
9ce0: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
9cf0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
9d00: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
9d10: 20 2f 2a 20 44 69 76 69 64 69 6e 67 20 74 68 65   /* Dividing the
9d20: 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c   largest possibl
9d30: 65 20 6e 65 67 61 74 69 76 65 20 36 34 2d 62 69  e negative 64-bi
9d40: 74 20 69 6e 74 65 67 65 72 20 28 31 3c 3c 36 33  t integer (1<<63
9d50: 29 20 62 79 20 0a 20 20 20 20 20 20 20 20 2a 2a  ) by .        **
9d60: 20 2d 31 20 72 65 74 75 72 6e 73 20 61 6e 20 69   -1 returns an i
9d70: 6e 74 65 67 65 72 20 74 6f 6f 20 6c 61 72 67 65  nteger too large
9d80: 20 74 6f 20 73 74 6f 72 65 20 69 6e 20 61 20 36   to store in a 6
9d90: 34 2d 62 69 74 20 64 61 74 61 2d 74 79 70 65 2e  4-bit data-type.
9da0: 20 4f 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 73   On.        ** s
9db0: 6f 6d 65 20 61 72 63 68 69 74 65 63 74 75 72 65  ome architecture
9dc0: 73 2c 20 74 68 65 20 76 61 6c 75 65 20 6f 76 65  s, the value ove
9dd0: 72 66 6c 6f 77 73 20 74 6f 20 28 31 3c 3c 36 33  rflows to (1<<63
9de0: 29 2e 20 4f 6e 20 6f 74 68 65 72 73 2c 0a 20 20  ). On others,.  
9df0: 20 20 20 20 20 20 2a 2a 20 61 20 53 49 47 46 50        ** a SIGFP
9e00: 45 20 69 73 20 69 73 73 75 65 64 2e 20 54 68 65  E is issued. The
9e10: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65   following state
9e20: 6d 65 6e 74 20 6e 6f 72 6d 61 6c 69 7a 65 73 20  ment normalizes 
9e30: 74 68 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20  this.        ** 
9e40: 62 65 68 61 76 69 6f 72 20 73 6f 20 74 68 61 74  behavior so that
9e50: 20 61 6c 6c 20 61 72 63 68 69 74 65 63 74 75 72   all architectur
9e60: 65 73 20 62 65 68 61 76 65 20 61 73 20 69 66 20  es behave as if 
9e70: 69 6e 74 65 67 65 72 20 0a 20 20 20 20 20 20 20  integer .       
9e80: 20 2a 2a 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63   ** overflow occ
9e90: 75 72 72 65 64 2e 0a 20 20 20 20 20 20 20 20 2a  urred..        *
9ea0: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  /.        if( iA
9eb0: 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c  ==-1 && iB==SMAL
9ec0: 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 69 41 20  LEST_INT64 ) iA 
9ed0: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20  = 1;.        iB 
9ee0: 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62  /= iA;.        b
9ef0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
9f00: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20      default: {. 
9f10: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30         if( iA==0
9f20: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
9f30: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
9f40: 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  l;.        if( i
9f50: 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a  A==-1 ) iA = 1;.
9f60: 20 20 20 20 20 20 20 20 69 42 20 25 3d 20 69 41          iB %= iA
9f70: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
9f80: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
9f90: 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69     pOut->u.i = i
9fa0: 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  B;.    MemSetTyp
9fb0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
9fc0: 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Int);.  }else{. 
9fd0: 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56     rA = sqlite3V
9fe0: 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
9ff0: 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c  1);.    rB = sql
a000: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
a010: 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69  e(pIn2);.    swi
a020: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
a030: 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f   ){.      case O
a040: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 72  P_Add:         r
a050: 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B += rA;       b
a060: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
a070: 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20   OP_Subtract:   
a080: 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20   rB -= rA;      
a090: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
a0a0: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
a0b0: 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20     rB *= rA;    
a0c0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
a0d0: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
a0e0: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f  {.        /* (do
a0f0: 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f  uble)0 In case o
a100: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
a110: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20  OATING_POINT... 
a120: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  */.        if( r
a130: 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67  A==(double)0 ) g
a140: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
a150: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
a160: 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b         rB /= rA;
a170: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
a180: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
a190: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
a1a0: 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20   iA = (i64)rA;. 
a1b0: 20 20 20 20 20 20 20 69 42 20 3d 20 28 69 36 34         iB = (i64
a1c0: 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28  )rB;.        if(
a1d0: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
a1e0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
a1f0: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
a200: 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41   if( iA==-1 ) iA
a210: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42   = 1;.        rB
a220: 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25   = (double)(iB %
a230: 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72   iA);.        br
a240: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
a250: 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74   }.    if( sqlit
a260: 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20  e3IsNaN(rB) ){. 
a270: 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d       goto arithm
a280: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
a290: 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  ull;.    }.    p
a2a0: 4f 75 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20  Out->r = rB;.   
a2b0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
a2c0: 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b  pOut, MEM_Real);
a2d0: 0a 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 20  .    if( (flags 
a2e0: 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29  & MEM_Real)==0 )
a2f0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
a300: 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69  dbeIntegerAffini
a310: 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a  ty(pOut);.    }.
a320: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72    }.  break;..ar
a330: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
a340: 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74  is_null:.  sqlit
a350: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
a360: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
a370: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
a380: 6f 6c 6c 53 65 71 20 2a 20 2a 20 50 34 0a 2a 2a  ollSeq * * P4.**
a390: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
a3a0: 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71  ter to a CollSeq
a3b0: 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65 20   struct. If the 
a3c0: 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75  next call to a u
a3d0: 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20  ser function.** 
a3e0: 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c  or aggregate cal
a3f0: 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  ls sqlite3GetFun
a400: 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73  cCollSeq(), this
a410: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
a420: 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72  nce will.** be r
a430: 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73  eturned. This is
a440: 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69   used by the bui
a450: 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78  lt-in min(), max
a460: 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a  () and nullif().
a470: 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  ** functions..**
a480: 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
a490: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69 6d  e used by the im
a4a0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
a4b0: 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e  the aforemention
a4c0: 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20  ed functions.** 
a4d0: 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20  to retrieve the 
a4e0: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
a4f0: 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20 6f  ce set by this o
a500: 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61  pcode is not ava
a510: 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63  ilable.** public
a520: 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65 72  ly, only to user
a530: 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e   functions defin
a540: 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f  ed in func.c..*/
a550: 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71  .case OP_CollSeq
a560: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
a570: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
a580: 4c 4c 53 45 51 20 29 3b 0a 20 20 62 72 65 61 6b  LLSEQ );.  break
a590: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
a5a0: 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20 50  Function P1 P2 P
a5b0: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e  3 P4 P5.**.** In
a5c0: 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63  voke a user func
a5d0: 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f  tion (P4 is a po
a5e0: 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63 74  inter to a Funct
a5f0: 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20 74 68  ion structure th
a600: 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74 68  at.** defines th
a610: 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74 68  e function) with
a620: 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61   P5 arguments ta
a630: 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
a640: 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63  r P2 and.** succ
a650: 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73  essors.  The res
a660: 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
a670: 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ion is stored in
a680: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
a690: 20 52 65 67 69 73 74 65 72 20 50 33 20 6d 75 73   Register P3 mus
a6a0: 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20  t not be one of 
a6b0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70  the function inp
a6c0: 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  uts..**.** P1 is
a6d0: 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73   a 32-bit bitmas
a6e0: 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65  k indicating whe
a6f0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68  ther or not each
a700: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
a710: 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61   .** function wa
a720: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20  s determined to 
a730: 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63  be constant at c
a740: 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20  ompile time. If 
a750: 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67  the first.** arg
a760: 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61  ument was consta
a770: 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66  nt then bit 0 of
a780: 20 50 31 20 69 73 20 73 65 74 2e 20 54 68 69 73   P1 is set. This
a790: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
a7a0: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
a7b0: 20 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f 63   meta data assoc
a7c0: 69 61 74 65 64 20 77 69 74 68 20 61 20 75 73 65  iated with a use
a7d0: 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  r function argum
a7e0: 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ent using the.**
a7f0: 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78   sqlite3_set_aux
a800: 64 61 74 61 28 29 20 41 50 49 20 6d 61 79 20 62  data() API may b
a810: 65 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65  e safely retaine
a820: 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74  d until the next
a830: 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  .** invocation o
a840: 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  f this opcode..*
a850: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 41  *.** See also: A
a860: 67 67 53 74 65 70 20 61 6e 64 20 41 67 67 46 69  ggStep and AggFi
a870: 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  nal.*/.case OP_F
a880: 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74  unction: {.  int
a890: 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 3b   i;.  Mem *pArg;
a8a0: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
a8b0: 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65  xt ctx;.  sqlite
a8c0: 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b  3_value **apVal;
a8d0: 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d  .  int n;..  n =
a8e0: 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 70 56 61   pOp->p5;.  apVa
a8f0: 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20  l = p->apArg;.  
a900: 61 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c  assert( apVal ||
a910: 20 6e 3d 3d 30 20 29 3b 0a 0a 20 20 61 73 73 65   n==0 );..  asse
a920: 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70  rt( n==0 || (pOp
a930: 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
a940: 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 29 20  2+n<=p->nMem+1) 
a950: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
a960: 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20  ->p3<pOp->p2 || 
a970: 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32  pOp->p3>=pOp->p2
a980: 2b 6e 20 29 3b 0a 20 20 70 41 72 67 20 3d 20 26  +n );.  pArg = &
a990: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
a9a0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69   for(i=0; i<n; i
a9b0: 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20  ++, pArg++){.   
a9c0: 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67   apVal[i] = pArg
a9d0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
a9e0: 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 41  eMemStoreType(pA
a9f0: 72 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  rg);.    REGISTE
aa00: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
aa10: 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61   pArg);.  }..  a
aa20: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
aa30: 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 7c  pe==P4_FUNCDEF |
aa40: 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  | pOp->p4type==P
aa50: 34 5f 56 44 42 45 46 55 4e 43 20 29 3b 0a 20 20  4_VDBEFUNC );.  
aa60: 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
aa70: 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 7b 0a 20  =P4_FUNCDEF ){. 
aa80: 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70     ctx.pFunc = p
aa90: 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20  Op->p4.pFunc;.  
aaa0: 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20    ctx.pVdbeFunc 
aab0: 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 0;.  }else{.  
aac0: 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20    ctx.pVdbeFunc 
aad0: 3d 20 28 56 64 62 65 46 75 6e 63 2a 29 70 4f 70  = (VdbeFunc*)pOp
aae0: 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63 3b 0a  ->p4.pVdbeFunc;.
aaf0: 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20      ctx.pFunc = 
ab00: 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2d 3e 70  ctx.pVdbeFunc->p
ab10: 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20 20 61 73 73  Func;.  }..  ass
ab20: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
ab30: 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
ab40: 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  em );.  pOut = &
ab50: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
ab60: 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d   ctx.s.flags = M
ab70: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73  EM_Null;.  ctx.s
ab80: 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e  .db = db;.  ctx.
ab90: 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74  s.xDel = 0;.  ct
aba0: 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  x.s.zMalloc = 0;
abb0: 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75  ..  /* The outpu
abc0: 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61  t cell may alrea
abd0: 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72  dy have a buffer
abe0: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65   allocated. Move
abf0: 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65  .  ** the pointe
ac00: 72 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e  r to ctx.s so in
ac10: 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66   case the user-f
ac20: 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a  unction can use.
ac30: 20 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79    ** the already
ac40: 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
ac50: 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c  r instead of all
ac60: 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e  ocating a new on
ac70: 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  e..  */.  sqlite
ac80: 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74  3VdbeMemMove(&ct
ac90: 78 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65  x.s, pOut);.  Me
aca0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 63 74  mSetTypeFlag(&ct
acb0: 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  x.s, MEM_Null);.
acc0: 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d  .  ctx.isError =
acd0: 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46   0;.  if( ctx.pF
ace0: 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  unc->flags & SQL
acf0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
ad00: 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  L ){.    assert(
ad10: 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20   pOp>aOp );.    
ad20: 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
ad30: 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
ad40: 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  EQ );.    assert
ad50: 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
ad60: 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a  ==OP_CollSeq );.
ad70: 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20      ctx.pColl = 
ad80: 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c  pOp[-1].p4.pColl
ad90: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
ada0: 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29  te3SafetyOff(db)
adb0: 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
adc0: 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 28  e_to_misuse;.  (
add0: 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e  *ctx.pFunc->xFun
ade0: 63 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61  c)(&ctx, n, apVa
adf0: 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  l);.  if( sqlite
ae00: 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b  3SafetyOn(db) ){
ae10: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
ae20: 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e  MemRelease(&ctx.
ae30: 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  s);.    goto abo
ae40: 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
ae50: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e  ;.  }.  if( db->
ae60: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a  mallocFailed ){.
ae70: 20 20 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75      /* Even thou
ae80: 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61  gh a malloc() ha
ae90: 73 20 66 61 69 6c 65 64 2c 20 74 68 65 20 69 6d  s failed, the im
aea0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
aeb0: 74 68 65 0a 20 20 20 20 2a 2a 20 75 73 65 72 20  the.    ** user 
aec0: 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61 76  function may hav
aed0: 65 20 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69  e called an sqli
aee0: 74 65 33 5f 72 65 73 75 6c 74 5f 58 58 58 28 29  te3_result_XXX()
aef0: 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a   function.    **
af00: 20 74 6f 20 72 65 74 75 72 6e 20 61 20 76 61 6c   to return a val
af10: 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  ue. The followin
af20: 67 20 63 61 6c 6c 20 72 65 6c 65 61 73 65 73 20  g call releases 
af30: 61 6e 79 20 72 65 73 6f 75 72 63 65 73 0a 20 20  any resources.  
af40: 20 20 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20    ** associated 
af50: 77 69 74 68 20 73 75 63 68 20 61 20 76 61 6c 75  with such a valu
af60: 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  e..    **.    **
af70: 20 4e 6f 74 65 3a 20 4d 61 79 62 65 20 4d 65 6d   Note: Maybe Mem
af80: 52 65 6c 65 61 73 65 28 29 20 73 68 6f 75 6c 64  Release() should
af90: 20 62 65 20 63 61 6c 6c 65 64 20 69 66 20 73 71   be called if sq
afa0: 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 29 0a  lite3SafetyOn().
afb0: 20 20 20 20 2a 2a 20 66 61 69 6c 73 20 61 6c 73      ** fails als
afc0: 6f 20 28 74 68 65 20 69 66 28 2e 2e 2e 29 20 73  o (the if(...) s
afd0: 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 29 2e  tatement above).
afe0: 20 42 75 74 20 69 66 20 70 65 6f 70 6c 65 20 61   But if people a
aff0: 72 65 0a 20 20 20 20 2a 2a 20 6d 69 73 75 73 69  re.    ** misusi
b000: 6e 67 20 73 71 6c 69 74 65 2c 20 74 68 65 79 20  ng sqlite, they 
b010: 68 61 76 65 20 62 69 67 67 65 72 20 70 72 6f 62  have bigger prob
b020: 6c 65 6d 73 20 74 68 61 6e 20 61 20 6c 65 61 6b  lems than a leak
b030: 65 64 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f  ed value..    */
b040: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
b050: 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e  MemRelease(&ctx.
b060: 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  s);.    goto no_
b070: 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  mem;.  }..  /* I
b080: 66 20 61 6e 79 20 61 75 78 69 6c 69 61 72 79 20  f any auxiliary 
b090: 64 61 74 61 20 66 75 6e 63 74 69 6f 6e 73 20 68  data functions h
b0a0: 61 76 65 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  ave been called 
b0b0: 62 79 20 74 68 69 73 20 75 73 65 72 20 66 75 6e  by this user fun
b0c0: 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20 69 6d 6d 65  ction,.  ** imme
b0d0: 64 69 61 74 65 6c 79 20 63 61 6c 6c 20 74 68 65  diately call the
b0e0: 20 64 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20   destructor for 
b0f0: 61 6e 79 20 6e 6f 6e 2d 73 74 61 74 69 63 20 76  any non-static v
b100: 61 6c 75 65 73 2e 0a 20 20 2a 2f 0a 20 20 69 66  alues..  */.  if
b110: 28 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20  ( ctx.pVdbeFunc 
b120: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
b130: 62 65 44 65 6c 65 74 65 41 75 78 44 61 74 61 28  beDeleteAuxData(
b140: 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2c 20 70  ctx.pVdbeFunc, p
b150: 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 70 4f 70  Op->p1);.    pOp
b160: 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63 20 3d  ->p4.pVdbeFunc =
b170: 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 3b 0a   ctx.pVdbeFunc;.
b180: 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20      pOp->p4type 
b190: 3d 20 50 34 5f 56 44 42 45 46 55 4e 43 3b 0a 20  = P4_VDBEFUNC;. 
b1a0: 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20   }..  /* If the 
b1b0: 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 65  function returne
b1c0: 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f  d an error, thro
b1d0: 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a  w an exception *
b1e0: 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72  /.  if( ctx.isEr
b1f0: 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ror ){.    sqlit
b200: 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
b210: 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
b220: 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
b230: 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a  _text(&ctx.s));.
b240: 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45      rc = ctx.isE
b250: 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  rror;.  }..  /* 
b260: 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20  Copy the result 
b270: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
b280: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
b290: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
b2a0: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
b2b0: 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e 67  &ctx.s, encoding
b2c0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
b2d0: 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 26 63  MemMove(pOut, &c
b2e0: 74 78 2e 73 29 3b 0a 20 20 69 66 28 20 73 71 6c  tx.s);.  if( sql
b2f0: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
b300: 67 28 70 4f 75 74 29 20 29 7b 0a 20 20 20 20 67  g(pOut) ){.    g
b310: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
b320: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
b330: 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
b340: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
b350: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
b360: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
b370: 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20  code: BitAnd P1 
b380: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
b390: 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73  Take the bit-wis
b3a0: 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c  e AND of the val
b3b0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
b3c0: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
b3d0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b3e0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b3f0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b400: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b410: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b420: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b430: 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a  BitOr P1 P2 P3 *
b440: 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68   *.**.** Take th
b450: 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66  e bit-wise OR of
b460: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
b470: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
b480: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
b490: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b4a0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
b4b0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b4c0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b4d0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
b4e0: 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66  Opcode: ShiftLef
b4f0: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
b500: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
b510: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
b520: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
b530: 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a  he left by the.*
b540: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
b550: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
b560: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
b570: 69 73 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72  iser P1..** Stor
b580: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
b590: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
b5a0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
b5b0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
b5c0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
b5d0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74  /* Opcode: Shift
b5e0: 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20 2a  Right P1 P2 P3 *
b5f0: 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74   *.**.** Shift t
b600: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
b610: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
b620: 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79 20  to the right by 
b630: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  the.** number of
b640: 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20   bits specified 
b650: 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69  by the integer i
b660: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
b670: 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75  * Store the resu
b680: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b690: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
b6a0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
b6b0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b6c0: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  L..*/.case OP_Bi
b6d0: 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20  tAnd:           
b6e0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b6f0: 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c   TK_BITAND, in1,
b700: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
b710: 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20  se OP_BitOr:    
b720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b730: 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f   same as TK_BITO
b740: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
b750: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69  3 */.case OP_Shi
b760: 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20  ftLeft:         
b770: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
b780: 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20  TK_LSHIFT, in1, 
b790: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
b7a0: 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a  e OP_ShiftRight:
b7b0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
b7c0: 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46  same as TK_RSHIF
b7d0: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
b7e0: 33 20 2a 2f 0a 20 20 69 36 34 20 61 3b 0a 20 20  3 */.  i64 a;.  
b7f0: 69 36 34 20 62 3b 0a 0a 20 20 70 49 6e 31 20 3d  i64 b;..  pIn1 =
b800: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
b810: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
b820: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
b830: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
b840: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
b850: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
b860: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
b870: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
b880: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
b890: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
b8a0: 20 7d 0a 20 20 61 20 3d 20 73 71 6c 69 74 65 33   }.  a = sqlite3
b8b0: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
b8c0: 32 29 3b 0a 20 20 62 20 3d 20 73 71 6c 69 74 65  2);.  b = sqlite
b8d0: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
b8e0: 6e 31 29 3b 0a 20 20 73 77 69 74 63 68 28 20 70  n1);.  switch( p
b8f0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
b900: 20 20 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64    case OP_BitAnd
b910: 3a 20 20 20 20 20 20 61 20 26 3d 20 62 3b 20 20  :      a &= b;  
b920: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
b930: 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20  se OP_BitOr:    
b940: 20 20 20 61 20 7c 3d 20 62 3b 20 20 20 20 20 62     a |= b;     b
b950: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
b960: 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 61  P_ShiftLeft:   a
b970: 20 3c 3c 3d 20 62 3b 20 20 20 20 62 72 65 61 6b   <<= b;    break
b980: 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20  ;.    default:  
b990: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
b9a0: 6f 64 65 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67  ode==OP_ShiftRig
b9b0: 68 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ht );.          
b9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
b9d0: 20 3e 3e 3d 20 62 3b 20 20 20 20 62 72 65 61 6b   >>= b;    break
b9e0: 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
b9f0: 69 20 3d 20 61 3b 0a 20 20 4d 65 6d 53 65 74 54  i = a;.  MemSetT
ba00: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
ba10: 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b  M_Int);.  break;
ba20: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
ba30: 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a  ddImm  P1 P2 * *
ba40: 20 2a 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68   *.** .** Add th
ba50: 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f  e constant P2 to
ba60: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
ba70: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68  gister P1..** Th
ba80: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61  e result is alwa
ba90: 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ys an integer..*
baa0: 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e  *.** To force an
bab0: 79 20 72 65 67 69 73 74 65 72 20 74 6f 20 62 65  y register to be
bac0: 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73   an integer, jus
bad0: 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65  t add 0..*/.case
bae0: 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20   OP_AddImm: {   
baf0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
bb00: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
bb10: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71  m[pOp->p1];.  sq
bb20: 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
bb30: 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
bb40: 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
bb50: 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ->p2;.  break;.}
bb60: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73  ../* Opcode: Mus
bb70: 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a  tBeInt P1 P2 * *
bb80: 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20   *.** .** Force 
bb90: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
bba0: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
bbb0: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74  n integer.  If t
bbc0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
bbd0: 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  1 is not an inte
bbe0: 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62  ger and cannot b
bbf0: 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
bc00: 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77   an integer.** w
bc10: 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73  ithout data loss
bc20: 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
bc30: 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f  diately to P2, o
bc40: 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61  r if P2==0.** ra
bc50: 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  ise an SQLITE_MI
bc60: 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e  SMATCH exception
bc70: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73  ..*/.case OP_Mus
bc80: 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  tBeInt: {       
bc90: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
bca0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
bcb0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
bcc0: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
bcd0: 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  n1, SQLITE_AFF_N
bce0: 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67  UMERIC, encoding
bcf0: 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
bd00: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
bd10: 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70  ==0 ){.    if( p
bd20: 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20  Op->p2==0 ){.   
bd30: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d     rc = SQLITE_M
bd40: 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 67  ISMATCH;.      g
bd50: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
bd60: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73  _error;.    }els
bd70: 65 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  e{.      pc = pO
bd80: 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d  p->p2 - 1;.    }
bd90: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 4d 65  .  }else{.    Me
bda0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e  mSetTypeFlag(pIn
bdb0: 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  1, MEM_Int);.  }
bdc0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
bdd0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
bde0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
bdf0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41  /* Opcode: RealA
be00: 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a  ffinity P1 * * *
be10: 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69   *.**.** If regi
be20: 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e  ster P1 holds an
be30: 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74   integer convert
be40: 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61   it to a real va
be50: 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  lue..**.** This 
be60: 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77  opcode is used w
be70: 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69  hen extracting i
be80: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
be90: 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a  a column that.**
bea0: 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69   has REAL affini
beb0: 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e  ty.  Such column
bec0: 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c   values may stil
bed0: 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a  l be stored as.*
bee0: 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20  * integers, for 
bef0: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79  space efficiency
bf00: 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72  , but after extr
bf10: 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74  action we want t
bf20: 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f  hem.** to have o
bf30: 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65  nly a real value
bf40: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
bf50: 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20  lAffinity: {    
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bf70: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
bf80: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
bf90: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
bfa0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
bfb0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
bfc0: 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b  emRealify(pIn1);
bfd0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
bfe0: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
bff0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
c000: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 54 65  ./* Opcode: ToTe
c010: 78 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  xt P1 * * * *.**
c020: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
c030: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
c040: 50 31 20 74 6f 20 62 65 20 74 65 78 74 2e 0a 2a  P1 to be text..*
c050: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
c060: 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65  s numeric, conve
c070: 72 74 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e  rt it to a strin
c080: 67 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65  g using the.** e
c090: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 70 72 69  quivalent of pri
c0a0: 6e 74 66 28 29 2e 20 20 42 6c 6f 62 20 76 61 6c  ntf().  Blob val
c0b0: 75 65 73 20 61 72 65 20 75 6e 63 68 61 6e 67 65  ues are unchange
c0c0: 64 20 61 6e 64 0a 2a 2a 20 61 72 65 20 61 66 74  d and.** are aft
c0d0: 65 72 77 61 72 64 73 20 73 69 6d 70 6c 79 20 69  erwards simply i
c0e0: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 74 65  nterpreted as te
c0f0: 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  xt..**.** A NULL
c100: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
c110: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
c120: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
c130: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
c140: 20 4f 50 5f 54 6f 54 65 78 74 3a 20 7b 20 20 20   OP_ToText: {   
c150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c160: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
c170: 54 45 58 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  TEXT, in1 */.  p
c180: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
c190: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
c1a0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
c1b0: 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 61 73  ll ) break;.  as
c1c0: 73 65 72 74 28 20 4d 45 4d 5f 53 74 72 3d 3d 28  sert( MEM_Str==(
c1d0: 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a  MEM_Blob>>3) );.
c1e0: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d    pIn1->flags |=
c1f0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45   (pIn1->flags&ME
c200: 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20 61 70  M_Blob)>>3;.  ap
c210: 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
c220: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  , SQLITE_AFF_TEX
c230: 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  T, encoding);.  
c240: 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28  rc = ExpandBlob(
c250: 70 49 6e 31 29 3b 0a 20 20 61 73 73 65 72 74 28  pIn1);.  assert(
c260: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
c270: 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61  EM_Str || db->ma
c280: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
c290: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pIn1->flags &= ~
c2a0: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
c2b0: 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a  l|MEM_Blob|MEM_Z
c2c0: 65 72 6f 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ero);.  UPDATE_M
c2d0: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31  AX_BLOBSIZE(pIn1
c2e0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
c2f0: 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 42 6c 6f 62  * Opcode: ToBlob
c300: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
c310: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
c320: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
c330: 20 74 6f 20 62 65 20 61 20 42 4c 4f 42 2e 0a 2a   to be a BLOB..*
c340: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
c350: 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65  s numeric, conve
c360: 72 74 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e  rt it to a strin
c370: 67 20 66 69 72 73 74 2e 0a 2a 2a 20 53 74 72 69  g first..** Stri
c380: 6e 67 73 20 61 72 65 20 73 69 6d 70 6c 79 20 72  ngs are simply r
c390: 65 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20  einterpreted as 
c3a0: 62 6c 6f 62 73 20 77 69 74 68 20 6e 6f 20 63 68  blobs with no ch
c3b0: 61 6e 67 65 0a 2a 2a 20 74 6f 20 74 68 65 20 75  ange.** to the u
c3c0: 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 2e 0a  nderlying data..
c3d0: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
c3e0: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
c3f0: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
c400: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
c410: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
c420: 54 6f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20  ToBlob: {       
c430: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
c440: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42  me as TK_TO_BLOB
c450: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
c460: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
c470: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
c480: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
c490: 20 62 72 65 61 6b 3b 0a 20 20 69 66 28 20 28 70   break;.  if( (p
c4a0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
c4b0: 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20  _Blob)==0 ){.   
c4c0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
c4d0: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
c4e0: 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  TEXT, encoding);
c4f0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
c500: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  1->flags & MEM_S
c510: 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63  tr || db->malloc
c520: 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 4d 65  Failed );.    Me
c530: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e  mSetTypeFlag(pIn
c540: 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20  1, MEM_Blob);.  
c550: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 2d  }else{.    pIn1-
c560: 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
c570: 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c  TypeMask&~MEM_Bl
c580: 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54  ob);.  }.  UPDAT
c590: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
c5a0: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
c5b0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 4e  ../* Opcode: ToN
c5c0: 75 6d 65 72 69 63 20 50 31 20 2a 20 2a 20 2a 20  umeric P1 * * * 
c5d0: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
c5e0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
c5f0: 74 65 72 20 50 31 20 74 6f 20 62 65 20 6e 75 6d  ter P1 to be num
c600: 65 72 69 63 20 28 65 69 74 68 65 72 20 61 6e 0a  eric (either an.
c610: 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20  ** integer or a 
c620: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 6e  floating-point n
c630: 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66 20 74 68  umber.).** If th
c640: 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20  e value is text 
c650: 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20  or blob, try to 
c660: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e  convert it to an
c670: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71   using the.** eq
c680: 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69  uivalent of atoi
c690: 28 29 20 6f 72 20 61 74 6f 66 28 29 20 61 6e 64  () or atof() and
c6a0: 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73   store 0 if no s
c6b0: 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 0a  uch conversion .
c6c0: 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a  ** is possible..
c6d0: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
c6e0: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
c6f0: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
c700: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
c710: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
c720: 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20 20 20 20  ToNumeric: {    
c730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c740: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 4e   same as TK_TO_N
c750: 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a 2f 0a 20  UMERIC, in1 */. 
c760: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
c770: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70  p->p1];.  if( (p
c780: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  In1->flags & (ME
c790: 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 49 6e 74 7c 4d  M_Null|MEM_Int|M
c7a0: 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20 29 7b 0a  EM_Real))==0 ){.
c7b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
c7c0: 65 6d 4e 75 6d 65 72 69 66 79 28 70 49 6e 31 29  emNumerify(pIn1)
c7d0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
c7e0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
c7f0: 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a  E_OMIT_CAST */..
c800: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 49 6e 74  /* Opcode: ToInt
c810: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
c820: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
c830: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
c840: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   be an integer. 
c850: 20 49 66 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65   If.** The value
c860: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61 20   is currently a 
c870: 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20 64 72 6f  real number, dro
c880: 70 20 69 74 73 20 66 72 61 63 74 69 6f 6e 61 6c  p its fractional
c890: 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20 74 68 65   part..** If the
c8a0: 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f   value is text o
c8b0: 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63  r blob, try to c
c8c0: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20  onvert it to an 
c8d0: 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74 68  integer using th
c8e0: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
c8f0: 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74  of atoi() and st
c900: 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63 68  ore 0 if no such
c910: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70   conversion is p
c920: 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  ossible..**.** A
c930: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
c940: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
c950: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
c960: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
c970: 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e 74 3a 20  .case OP_ToInt: 
c980: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
c990: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
c9a0: 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31 20 2a 2f 0a  _TO_INT, in1 */.
c9b0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
c9c0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
c9d0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c9e0: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
c9f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
ca00: 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29  Integerify(pIn1)
ca10: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
ca20: 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
ca30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 29  QLITE_OMIT_CAST)
ca40: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
ca50: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
ca60: 47 5f 50 4f 49 4e 54 29 0a 2f 2a 20 4f 70 63 6f  G_POINT)./* Opco
ca70: 64 65 3a 20 54 6f 52 65 61 6c 20 50 31 20 2a 20  de: ToReal P1 * 
ca80: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
ca90: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
caa0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
cab0: 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
cac0: 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 49 66 20  t number..** If 
cad0: 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72  The value is cur
cae0: 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74 65 67 65  rently an intege
caf0: 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 2e 0a 2a  r, convert it..*
cb00: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
cb10: 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20  s text or blob, 
cb20: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
cb30: 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
cb40: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
cb50: 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28  ivalent of atoi(
cb60: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 2e 30 20  ) and store 0.0 
cb70: 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65  if no such conve
cb80: 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c  rsion is possibl
cb90: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  e..**.** A NULL 
cba0: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
cbb0: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
cbc0: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
cbd0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
cbe0: 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20 20 20 20  OP_ToReal: {    
cbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cc00: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 52   same as TK_TO_R
cc10: 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  EAL, in1 */.  pI
cc20: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
cc30: 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p1];.  if( (pIn1
cc40: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
cc50: 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  ll)==0 ){.    sq
cc60: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c  lite3VdbeMemReal
cc70: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  ify(pIn1);.  }. 
cc80: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
cc90: 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
cca0: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26  ITE_OMIT_CAST) &
ccb0: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
ccc0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
ccd0: 50 4f 49 4e 54 29 20 2a 2f 0a 0a 2f 2a 20 4f 70  POINT) */../* Op
cce0: 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50  code: Lt P1 P2 P
ccf0: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 43 6f  3 P4 P5.**.** Co
cd00: 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73  mpare the values
cd10: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
cd20: 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67 28  and P3.  If reg(
cd30: 50 33 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e  P3)<reg(P1) then
cd40: 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  .** jump to addr
cd50: 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20  ess P2.  .**.** 
cd60: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
cd70: 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20  MPIFNULL bit of 
cd80: 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 65 69  P5 is set and ei
cd90: 74 68 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a  ther reg(P1) or.
cda0: 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e 55  ** reg(P3) is NU
cdb0: 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
cdc0: 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53   jump.  If the S
cdd0: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
cde0: 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61   .** bit is clea
cdf0: 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 75  r then fall thru
ce00: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
ce10: 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  nd is NULL..**.*
ce20: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
ce30: 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66  _MASK portion of
ce40: 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61   P5 must be an a
ce50: 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65  ffinity characte
ce60: 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  r -.** SQLITE_AF
ce70: 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41  F_TEXT, SQLITE_A
ce80: 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20  FF_INTEGER, and 
ce90: 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74  so forth. An att
cea0: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a  empt is made .**
ceb0: 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20   to coerce both 
cec0: 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67  inputs according
ced0: 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74   to this affinit
cee0: 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20  y before the.** 
cef0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61  comparison is ma
cf00: 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54  de. If the SQLIT
cf10: 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78  E_AFF_MASK is 0x
cf20: 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63  00, then numeric
cf30: 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20  .** affinity is 
cf40: 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20  used. Note that 
cf50: 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e  the affinity con
cf60: 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f  versions are sto
cf70: 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f  red.** back into
cf80: 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
cf90: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20  ters P1 and P3. 
cfa0: 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   So this opcode 
cfb0: 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72  can cause.** per
cfc0: 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20  sistent changes 
cfd0: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20  to registers P1 
cfe0: 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e  and P3..**.** On
cff0: 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f  ce any conversio
d000: 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c  ns have taken pl
d010: 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72  ace, and neither
d020: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
d030: 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61  .** the values a
d040: 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20  re compared. If 
d050: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20  both values are 
d060: 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d  blobs then memcm
d070: 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74  p() is.** used t
d080: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
d090: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
d0a0: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62  omparison.  If b
d0b0: 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  oth values.** ar
d0c0: 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65  e text, then the
d0d0: 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c   appropriate col
d0e0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
d0f0: 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20  specified in.** 
d100: 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64  P4 is  used to d
d110: 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  o the comparison
d120: 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  .  If P4 is not 
d130: 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a  specified then.*
d140: 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73  * memcmp() is us
d150: 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65  ed to compare te
d160: 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62  xt string.  If b
d170: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a  oth values are.*
d180: 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20  * numeric, then 
d190: 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72  a numeric compar
d1a0: 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66  ison is used. If
d1b0: 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a   the two values.
d1c0: 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72  ** are of differ
d1d0: 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20  ent types, then 
d1e0: 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73  numbers are cons
d1f0: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
d200: 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20  .** strings and 
d210: 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73  strings are cons
d220: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
d230: 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   blobs..**.** If
d240: 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52   the SQLITE_STOR
d250: 45 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73  EP2 bit of P5 is
d260: 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f   set, then do no
d270: 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64  t jump.  Instead
d280: 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f  ,.** store a boo
d290: 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74  lean result (eit
d2a0: 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20  her 0, or 1, or 
d2b0: 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65  NULL) in registe
d2c0: 72 20 50 32 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  r P2..*/./* Opco
d2d0: 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20  de: Ne P1 P2 P3 
d2e0: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
d2f0: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
d300: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
d310: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
d320: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
d330: 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20  ** the operands 
d340: 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
d350: 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65  and P3 are not e
d360: 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20 4c  qual.  See the L
d370: 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20  t opcode for.** 
d380: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
d390: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  mation..**.** If
d3a0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
d3b0: 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e  s set in P5 then
d3c0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
d3d0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77  omparison is alw
d3e0: 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72  ays either.** tr
d3f0: 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20  ue or false and 
d400: 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20  is never NULL.  
d410: 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  If both operands
d420: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74   are NULL then t
d430: 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20  he result.** of 
d440: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 66 61  comparison is fa
d450: 6c 73 65 2e 20 20 49 66 20 65 69 74 68 65 72 20  lse.  If either 
d460: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
d470: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
d480: 69 73 20 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e  is true..** If n
d490: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
d4a0: 73 20 4e 55 4c 4c 20 74 68 65 20 74 68 65 20 72  s NULL the the r
d4b0: 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d  esult is the sam
d4c0: 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65  e as it would be
d4d0: 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54   if.** the SQLIT
d4e0: 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65  E_NULLEQ flag we
d4f0: 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re omitted from 
d500: 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  P5..*/./* Opcode
d510: 3a 20 45 71 20 50 31 20 50 32 20 50 33 20 50 34  : Eq P1 P2 P3 P4
d520: 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P5.**.** This w
d530: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
d540: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
d550: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
d560: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
d570: 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e   the operands in
d580: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
d590: 64 20 50 33 20 61 72 65 20 65 71 75 61 6c 2e 0a  d P3 are equal..
d5a0: 2a 2a 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  ** See the Lt op
d5b0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
d5c0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
d5d0: 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  .**.** If SQLITE
d5e0: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69  _NULLEQ is set i
d5f0: 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65  n P5 then the re
d600: 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73  sult of comparis
d610: 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74  on is always eit
d620: 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66  her.** true or f
d630: 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65  alse and is neve
d640: 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68  r NULL.  If both
d650: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
d660: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
d670: 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69  lt.** of compari
d680: 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66  son is true.  If
d690: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
d6a0: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
d6b0: 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65   result is false
d6c0: 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20  ..** If neither 
d6d0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
d6e0: 74 68 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  the the result i
d6f0: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  s the same as it
d700: 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20   would be if.** 
d710: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
d720: 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74  Q flag were omit
d730: 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a  ted from P5..*/.
d740: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31  /* Opcode: Le P1
d750: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
d760: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
d770: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
d780: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
d790: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
d7a0: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
d7b0: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
d7c0: 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68 61  r P3 is less tha
d7d0: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
d7e0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
d7f0: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
d800: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
d810: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
d820: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
d830: 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20  * Opcode: Gt P1 
d840: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
d850: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
d860: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
d870: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
d880: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
d890: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
d8a0: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
d8b0: 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
d8c0: 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  han the content 
d8d0: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
d8e0: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
d8f0: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
d900: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
d910: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
d920: 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Ge P1 P2 P3 P4 P
d930: 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  5.**.** This wor
d940: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
d950: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
d960: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
d970: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
d980: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
d990: 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65  gister P3 is gre
d9a0: 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
d9b0: 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e  al to the conten
d9c0: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
d9d0: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
d9e0: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
d9f0: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
da00: 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45  on..*/.case OP_E
da10: 71 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q:              
da20: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45   /* same as TK_E
da30: 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  Q, jump, in1, in
da40: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a  3 */.case OP_Ne:
da50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
da60: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c  * same as TK_NE,
da70: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
da80: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20  */.case OP_Lt:  
da90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
daa0: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a  same as TK_LT, j
dab0: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
dac0: 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20  .case OP_Le:    
dad0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
dae0: 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d  me as TK_LE, jum
daf0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
db00: 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20  ase OP_Gt:      
db10: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
db20: 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c   as TK_GT, jump,
db30: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
db40: 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20  e OP_Ge: {      
db50: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
db60: 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69  s TK_GE, jump, i
db70: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  n1, in3 */.  int
db80: 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20   res;           
db90: 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68   /* Result of th
dba0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20  e comparison of 
dbb0: 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e  pIn1 against pIn
dbc0: 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  3 */.  char affi
dbd0: 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66  nity;      /* Af
dbe0: 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f  finity to use fo
dbf0: 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a  r comparison */.
dc00: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
dc10: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
dc20: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
dc30: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
dc40: 66 6c 61 67 73 20 7c 20 70 49 6e 33 2d 3e 66 6c  flags | pIn3->fl
dc50: 61 67 73 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  ags)&MEM_Null ){
dc60: 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62  .    /* One or b
dc70: 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65  oth operands are
dc80: 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28   NULL */.    if(
dc90: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
dca0: 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20  E_NULLEQ ){.    
dcb0: 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e    /* If SQLITE_N
dcc0: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28 77 68  ULLEQ is set (wh
dcd0: 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61  ich will only ha
dce0: 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70 65 72  ppen if the oper
dcf0: 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20 2a 2a  ator is.      **
dd00: 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29   OP_Eq or OP_Ne)
dd10: 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
dd20: 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e  ump or not depen
dd30: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
dd40: 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20        ** or not 
dd50: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
dd60: 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f  e null..      */
dd70: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
dd80: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
dd90: 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  q || pOp->opcode
dda0: 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20  ==OP_Ne );.     
ddb0: 20 72 65 73 20 3d 20 28 70 49 6e 31 2d 3e 66 6c   res = (pIn1->fl
ddc0: 61 67 73 20 26 20 70 49 6e 33 2d 3e 66 6c 61 67  ags & pIn3->flag
ddd0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
dde0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
ddf0: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c     /* SQLITE_NUL
de00: 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64  LEQ is clear and
de10: 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70   at least one op
de20: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20  erand is NULL,. 
de30: 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65       ** then the
de40: 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79   result is alway
de50: 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a  s NULL..      **
de60: 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   The jump is tak
de70: 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54 45  en if the SQLITE
de80: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20  _JUMPIFNULL bit 
de90: 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f  is set..      */
dea0: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
deb0: 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
dec0: 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70  EP2 ){.        p
ded0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
dee0: 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d 65  >p2];.        Me
def0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
df00: 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
df10: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
df20: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
df30: 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ut);.      }else
df40: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
df50: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
df60: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 63 20 3d   ){.        pc =
df70: 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20   pOp->p2-1;.    
df80: 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b    }.      break;
df90: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
dfa0: 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f      /* Neither o
dfb0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20  perand is NULL. 
dfc0: 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e   Do a comparison
dfd0: 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74  . */.    affinit
dfe0: 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  y = pOp->p5 & SQ
dff0: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20  LITE_AFF_MASK;. 
e000: 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 20     if( affinity 
e010: 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66  ){.      applyAf
e020: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61 66 66  finity(pIn1, aff
e030: 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29  inity, encoding)
e040: 3b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66  ;.      applyAff
e050: 69 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66 69  inity(pIn3, affi
e060: 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  nity, encoding);
e070: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6d  .      if( db->m
e080: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f  allocFailed ) go
e090: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d  to no_mem;.    }
e0a0: 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ..    assert( pO
e0b0: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
e0c0: 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34  LLSEQ || pOp->p4
e0d0: 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20  .pColl==0 );.   
e0e0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
e0f0: 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  );.    ExpandBlo
e100: 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 72 65 73  b(pIn3);.    res
e110: 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
e120: 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c  pare(pIn3, pIn1,
e130: 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b   pOp->p4.pColl);
e140: 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70  .  }.  switch( p
e150: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
e160: 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20    case OP_Eq:   
e170: 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20   res = res==0;  
e180: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
e190: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73  se OP_Ne:    res
e1a0: 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62   = res!=0;     b
e1b0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
e1c0: 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Lt:    res = r
e1d0: 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es<0;      break
e1e0: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65  ;.    case OP_Le
e1f0: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d  :    res = res<=
e200: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
e210: 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20    case OP_Gt:   
e220: 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20   res = res>0;   
e230: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
e240: 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73  fault:       res
e250: 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62   = res>=0;     b
e260: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  reak;.  }..  if(
e270: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
e280: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
e290: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
e2a0: 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 4d 65 6d 53  p->p2];.    MemS
e2b0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
e2c0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70   MEM_Int);.    p
e2d0: 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a  Out->u.i = res;.
e2e0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
e2f0: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
e300: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72  );.  }else if( r
e310: 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
e320: 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20  Op->p2-1;.  }.  
e330: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
e340: 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e  ode: Permutation
e350: 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
e360: 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d 75 74  * Set the permut
e370: 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68  ation used by th
e380: 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65  e OP_Compare ope
e390: 72 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65 20  rator to be the 
e3a0: 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65  array.** of inte
e3b0: 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a  gers in P4..**.*
e3c0: 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f  * The permutatio
e3d0: 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  n is only valid 
e3e0: 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f  until the next O
e3f0: 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 2c 20 4f  P_Permutation, O
e400: 50 5f 43 6f 6d 70 61 72 65 2c 0a 2a 2a 20 4f 50  P_Compare,.** OP
e410: 5f 48 61 6c 74 2c 20 6f 72 20 4f 50 5f 52 65 73  _Halt, or OP_Res
e420: 75 6c 74 52 6f 77 2e 20 20 54 79 70 69 63 61 6c  ultRow.  Typical
e430: 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74  ly the OP_Permut
e440: 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6f 63 63  ation should occ
e450: 75 72 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  ur.** immediatel
e460: 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f  y prior to the O
e470: 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61  P_Compare..*/.ca
e480: 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  se OP_Permutatio
e490: 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  n: {.  assert( p
e4a0: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
e4b0: 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73  NTARRAY );.  ass
e4c0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20  ert( pOp->p4.ai 
e4d0: 29 3b 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20  );.  aPermute = 
e4e0: 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72  pOp->p4.ai;.  br
e4f0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
e500: 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32  e: Compare P1 P2
e510: 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43   P3 P4 *.**.** C
e520: 6f 6d 70 61 72 65 20 74 6f 20 76 65 63 74 6f 72  ompare to vector
e530: 73 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 69  s of registers i
e540: 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50  n reg(P1)..reg(P
e550: 31 2b 50 33 2d 31 29 20 28 61 6c 6c 20 74 68 69  1+P3-1) (all thi
e560: 73 0a 2a 2a 20 6f 6e 65 20 22 41 22 29 20 61 6e  s.** one "A") an
e570: 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65  d in reg(P2)..re
e580: 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29  g(P2+P3-1) ("B")
e590: 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75  .  Save the resu
e5a0: 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d  lt of.** the com
e5b0: 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20  parison for use 
e5c0: 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a  by the next OP_J
e5d0: 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a  ump instruct..**
e5e0: 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49  .** P4 is a KeyI
e5f0: 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 68  nfo structure th
e600: 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61  at defines colla
e610: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61  ting sequences a
e620: 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72  nd sort.** order
e630: 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72  s for the compar
e640: 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75  ison.  The permu
e650: 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74  tation applies t
e660: 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f  o registers.** o
e670: 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  nly.  The KeyInf
e680: 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75  o elements are u
e690: 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79  sed sequentially
e6a0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70  ..**.** The comp
e6b0: 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74  arison is a sort
e6c0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20   comparison, so 
e6d0: 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71  NULLs compare eq
e6e0: 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72  ual,.** NULLs ar
e6f0: 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62  e less than numb
e700: 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65  ers, numbers are
e710: 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e   less than strin
e720: 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e  gs,.** and strin
e730: 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  gs are less than
e740: 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20   blobs..*/.case 
e750: 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20  OP_Compare: {.  
e760: 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a  int n;.  int i;.
e770: 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20    int p1;.  int 
e780: 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49  p2;.  const KeyI
e790: 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20  nfo *pKeyInfo;. 
e7a0: 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c   int idx;.  Coll
e7b0: 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f  Seq *pColl;    /
e7c0: 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
e7d0: 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74  ence to use on t
e7e0: 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e  his term */.  in
e7f0: 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20 20  t bRev;         
e800: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53   /* True for DES
e810: 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64  CENDING sort ord
e820: 65 72 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70  er */..  n = pOp
e830: 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f  ->p3;.  pKeyInfo
e840: 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
e850: 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  nfo;.  assert( n
e860: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
e870: 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20  pKeyInfo!=0 );. 
e880: 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
e890: 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23   p2 = pOp->p2;.#
e8a0: 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  if SQLITE_DEBUG.
e8b0: 20 20 69 66 28 20 61 50 65 72 6d 75 74 65 20 29    if( aPermute )
e8c0: 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20  {.    int k, mx 
e8d0: 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30  = 0;.    for(k=0
e8e0: 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20  ; k<n; k++) if( 
e8f0: 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29  aPermute[k]>mx )
e900: 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b   mx = aPermute[k
e910: 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
e920: 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d 70 2d  1>0 && p1+mx<=p-
e930: 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 20 20 61  >nMem+1 );.    a
e940: 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70  ssert( p2>0 && p
e950: 32 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  2+mx<=p->nMem+1 
e960: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
e970: 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
e980: 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20  p1+n<=p->nMem+1 
e990: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
e9a0: 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 70 2d 3e  2>0 && p2+n<=p->
e9b0: 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 7d 0a 23 65  nMem+1 );.  }.#e
e9c0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
e9d0: 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d  EBUG */.  for(i=
e9e0: 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20  0; i<n; i++){.  
e9f0: 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65    idx = aPermute
ea00: 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a   ? aPermute[i] :
ea10: 20 69 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   i;.    REGISTER
ea20: 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26  _TRACE(p1+idx, &
ea30: 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20  aMem[p1+idx]);. 
ea40: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
ea50: 45 28 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p2+idx, &aMem[
ea60: 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73  p2+idx]);.    as
ea70: 73 65 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f  sert( i<pKeyInfo
ea80: 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20  ->nField );.    
ea90: 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f  pColl = pKeyInfo
eaa0: 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20  ->aColl[i];.    
eab0: 62 52 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  bRev = pKeyInfo-
eac0: 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a  >aSortOrder[i];.
ead0: 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73      iCompare = s
eae0: 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
eaf0: 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20  (&aMem[p1+idx], 
eb00: 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70  &aMem[p2+idx], p
eb10: 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69  Coll);.    if( i
eb20: 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20  Compare ){.     
eb30: 20 69 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d   if( bRev ) iCom
eb40: 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65  pare = -iCompare
eb50: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
eb60: 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d     }.  }.  aPerm
eb70: 75 74 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  ute = 0;.  break
eb80: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
eb90: 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20  Jump P1 P2 P3 * 
eba0: 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
ebb0: 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  the instruction 
ebc0: 61 74 20 61 64 64 72 65 73 73 20 50 31 2c 20 50  at address P1, P
ebd0: 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69  2, or P3 dependi
ebe0: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
ebf0: 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63   in the most rec
ec00: 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69  ent OP_Compare i
ec10: 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50  nstruction the P
ec20: 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73  1 vector was les
ec30: 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20  s than.** equal 
ec40: 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74  to, or greater t
ec50: 68 61 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f  han the P2 vecto
ec60: 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  r, respectively.
ec70: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70  .*/.case OP_Jump
ec80: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
ec90: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
eca0: 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20   iCompare<0 ){. 
ecb0: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20     pc = pOp->p1 
ecc0: 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  - 1;.  }else if(
ecd0: 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a   iCompare==0 ){.
ece0: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
ecf0: 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   - 1;.  }else{. 
ed00: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20     pc = pOp->p3 
ed10: 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
ed20: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
ed30: 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  And P1 P2 P3 * *
ed40: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
ed50: 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74  logical AND of t
ed60: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
ed70: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32  isters P1 and P2
ed80: 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68   and.** write th
ed90: 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65  e result into re
eda0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
edb0: 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72   If either P1 or
edc0: 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29   P2 is 0 (false)
edd0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
ede0: 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a   is 0 even if.**
edf0: 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
ee00: 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
ee10: 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77  L and true or tw
ee20: 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20  o NULLs give.** 
ee30: 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a  a NULL output..*
ee40: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20  /./* Opcode: Or 
ee50: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
ee60: 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
ee70: 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61  cal OR of the va
ee80: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
ee90: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
eea0: 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77  * store the answ
eeb0: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
eec0: 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
eed0: 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e  er P1 or P2 is n
eee0: 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68  onzero (true) th
eef0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
ef00: 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65   1 (true).** eve
ef10: 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69  n if the other i
ef20: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
ef30: 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20   NULL and false 
ef40: 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20  or two NULLs.** 
ef50: 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70  give a NULL outp
ef60: 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ut..*/.case OP_A
ef70: 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
ef80: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41   /* same as TK_A
ef90: 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  ND, in1, in2, ou
efa0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72  t3 */.case OP_Or
efb0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
efc0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52  /* same as TK_OR
efd0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
efe0: 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20   */.  int v1;   
eff0: 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64   /* Left operand
f000: 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d  :  0==FALSE, 1==
f010: 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e  TRUE, 2==UNKNOWN
f020: 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e   or NULL */.  in
f030: 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68  t v2;    /* Righ
f040: 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41  t operand: 0==FA
f050: 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d  LSE, 1==TRUE, 2=
f060: 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c  =UNKNOWN or NULL
f070: 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
f080: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
f090: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
f0a0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
f0b0: 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v1 = 2;.  }els
f0c0: 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69  e{.    v1 = sqli
f0d0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
f0e0: 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn1)!=0;.  }.  
f0f0: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
f100: 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p2];.  if( pIn
f110: 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  2->flags & MEM_N
f120: 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20  ull ){.    v2 = 
f130: 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
f140: 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  v2 = sqlite3Vdbe
f150: 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d  IntValue(pIn2)!=
f160: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
f170: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64  ->opcode==OP_And
f180: 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
f190: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
f1a0: 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d  ar and_logic[] =
f1b0: 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31   { 0, 0, 0, 0, 1
f1c0: 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a  , 2, 0, 2, 2 };.
f1d0: 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67      v1 = and_log
f1e0: 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
f1f0: 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63  else{.    static
f200: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
f210: 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20  char or_logic[] 
f220: 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20  = { 0, 1, 2, 1, 
f230: 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b  1, 1, 2, 1, 2 };
f240: 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67  .    v1 = or_log
f250: 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
f260: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
f270: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
f280: 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d  v1==2 ){.    Mem
f290: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
f2a0: 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d  , MEM_Null);.  }
f2b0: 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  else{.    pOut->
f2c0: 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65  u.i = v1;.    Me
f2d0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
f2e0: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  t, MEM_Int);.  }
f2f0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
f300: 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50  Opcode: Not P1 P
f310: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  2 * * *.**.** In
f320: 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75  terpret the valu
f330: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
f340: 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
f350: 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  lue.  Store the.
f360: 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c  ** boolean compl
f370: 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65  ement in registe
f380: 72 20 50 32 2e 20 20 49 66 20 74 68 65 20 76 61  r P2.  If the va
f390: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
f3a0: 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  P1 is .** NULL, 
f3b0: 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73  then a NULL is s
f3c0: 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a  tored in P2..*/.
f3d0: 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20  case OP_Not: {  
f3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f3f0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c   same as TK_NOT,
f400: 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
f410: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
f420: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
f430: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
f440: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
f450: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
f460: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
f470: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
f480: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
f490: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
f4a0: 6e 74 36 34 28 70 4f 75 74 2c 20 21 73 71 6c 69  nt64(pOut, !sqli
f4b0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
f4c0: 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72  pIn1));.  }.  br
f4d0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
f4e0: 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20  e: BitNot P1 P2 
f4f0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  * * *.**.** Inte
f500: 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e  rpret the conten
f510: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  t of register P1
f520: 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   as an integer. 
f530: 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e   Store the.** on
f540: 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66  es-complement of
f550: 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e   the P1 value in
f560: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  to register P2. 
f570: 20 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20   If P1 holds.** 
f580: 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72  a NULL then stor
f590: 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a  e a NULL in P2..
f5a0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f  */.case OP_BitNo
f5b0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
f5c0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
f5d0: 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32  ITNOT, in1, out2
f5e0: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
f5f0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
f600: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
f610: 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p2];.  if( pIn1
f620: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
f630: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
f640: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
f650: 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pOut);.  }else{.
f660: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
f670: 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
f680: 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74   ~sqlite3VdbeInt
f690: 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20  Value(pIn1));.  
f6a0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
f6b0: 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50   Opcode: If P1 P
f6c0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
f6d0: 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
f6e0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
f6f0: 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20 20  er P1 is true.  
f700: 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20  The value is.** 
f710: 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72  is considered tr
f720: 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65  ue if it is nume
f730: 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f  ric and non-zero
f740: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
f750: 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c  ** in P1 is NULL
f760: 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
f770: 75 6d 70 20 69 66 20 50 33 20 69 73 20 74 72 75  ump if P3 is tru
f780: 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  e..*/./* Opcode:
f790: 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20   IfNot P1 P2 P3 
f7a0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
f7b0: 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
f7c0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
f7d0: 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20   is False.  The 
f7e0: 76 61 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20 63  value is.** is c
f7f0: 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20 69  onsidered true i
f800: 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72  f it has a numer
f810: 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f  ic value of zero
f820: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
f830: 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c  ** in P1 is NULL
f840: 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
f850: 75 6d 70 20 69 66 20 50 33 20 69 73 20 74 72 75  ump if P3 is tru
f860: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  e..*/.case OP_If
f870: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
f880: 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
f890: 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a  /.case OP_IfNot:
f8a0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
f8b0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
f8c0: 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20  int c;.  pIn1 = 
f8d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
f8e0: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
f8f0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
f900: 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b      c = pOp->p3;
f910: 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66  .  }else{.#ifdef
f920: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
f930: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
f940: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
f950: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  ntValue(pIn1)!=0
f960: 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20  ;.#else.    c = 
f970: 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
f980: 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b  alue(pIn1)!=0.0;
f990: 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20  .#endif.    if( 
f9a0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
f9b0: 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a  IfNot ) c = !c;.
f9c0: 20 20 7d 0a 20 20 69 66 28 20 63 20 29 7b 0a 20    }.  if( c ){. 
f9d0: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d     pc = pOp->p2-
f9e0: 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
f9f0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73  }../* Opcode: Is
fa00: 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
fa10: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
fa20: 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
fa30: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
fa40: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
fa50: 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  P_IsNull: {     
fa60: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
fa70: 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d  s TK_ISNULL, jum
fa80: 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
fa90: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
faa0: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
fab0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
fac0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  )!=0 ){.    pc =
fad0: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
fae0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
faf0: 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c   Opcode: NotNull
fb00: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
fb10: 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
fb20: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
fb30: 67 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74  gister P1 is not
fb40: 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65   NULL.  .*/.case
fb50: 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20   OP_NotNull: {  
fb60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
fb70: 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c  e as TK_NOTNULL,
fb80: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
fb90: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
fba0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
fbb0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
fbc0: 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
fbd0: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
fbe0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
fbf0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c  ../* Opcode: Col
fc00: 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  umn P1 P2 P3 P4 
fc10: 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  P5.**.** Interpr
fc20: 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74  et the data that
fc30: 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
fc40: 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74  s to as a struct
fc50: 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a  ure built using.
fc60: 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72  ** the MakeRecor
fc70: 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  d instruction.  
fc80: 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63  (See the MakeRec
fc90: 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61  ord opcode for a
fca0: 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66  dditional.** inf
fcb0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
fcc0: 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  he format of the
fcd0: 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74   data.)  Extract
fce0: 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d   the P2-th colum
fcf0: 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72  n.** from this r
fd00: 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65  ecord.  If there
fd10: 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28   are less that (
fd20: 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73  P2+1) .** values
fd30: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20   in the record, 
fd40: 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a  extract a NULL..
fd50: 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
fd60: 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f  extracted is sto
fd70: 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
fd80: 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P3..**.** If the
fd90: 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73   column contains
fda0: 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66   fewer than P2 f
fdb0: 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72  ields, then extr
fdc0: 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c  act a NULL.  Or,
fdd0: 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72  .** if the P4 ar
fde0: 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d  gument is a P4_M
fdf0: 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  EM use the value
fe00: 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d   of the P4 argum
fe10: 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65  ent as.** the re
fe20: 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  sult..**.** If t
fe30: 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  he OPFLAG_CLEARC
fe40: 41 43 48 45 20 62 69 74 20 69 73 20 73 65 74 20  ACHE bit is set 
fe50: 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73 20  on P5 and P1 is 
fe60: 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  a pseudo-table c
fe70: 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74  ursor,.** then t
fe80: 68 65 20 63 61 63 68 65 20 6f 66 20 74 68 65 20  he cache of the 
fe90: 63 75 72 73 6f 72 20 69 73 20 72 65 73 65 74 20  cursor is reset 
fea0: 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74  prior to extract
feb0: 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a  ing the column..
fec0: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f  ** The first OP_
fed0: 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61  Column against a
fee0: 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66   pseudo-table af
fef0: 74 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ter the value of
ff00: 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20   the content.** 
ff10: 72 65 67 69 73 74 65 72 20 68 61 73 20 63 68 61  register has cha
ff20: 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65  nged should have
ff30: 20 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a   this bit set..*
ff40: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e  /.case OP_Column
ff50: 3a 20 7b 0a 20 20 75 33 32 20 70 61 79 6c 6f 61  : {.  u32 payloa
ff60: 64 53 69 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d 62  dSize;   /* Numb
ff70: 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
ff80: 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
ff90: 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  64 payloadSize64
ffa0: 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62  ; /* Number of b
ffb0: 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ytes in the reco
ffc0: 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20  rd */.  int p1; 
ffd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 31             /* P1
ffe0: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70   value of the op
fff0: 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 70 32  code */.  int p2
10000 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
10010 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f  column number to
10020 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56   retrieve */.  V
10030 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
10040 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
10050 72 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rsor */.  char *
10060 7a 52 65 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  zRec;        /* 
10070 50 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d 70 6c  Pointer to compl
10080 65 74 65 20 72 65 63 6f 72 64 2d 64 61 74 61 20  ete record-data 
10090 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  */.  BtCursor *p
100a0 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42  Crsr;   /* The B
100b0 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20  Tree cursor */. 
100c0 20 75 33 32 20 2a 61 54 79 70 65 3b 20 20 20 20   u32 *aType;    
100d0 20 20 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20      /* aType[i] 
100e0 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65 72 69  holds the numeri
100f0 63 20 74 79 70 65 20 6f 66 20 74 68 65 20 69 2d  c type of the i-
10100 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75  th column */.  u
10110 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20  32 *aOffset;    
10120 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20    /* aOffset[i] 
10130 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61  is offset to sta
10140 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69  rt of data for i
10150 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  -th column */.  
10160 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  int nField;     
10170 20 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20     /* number of 
10180 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
10190 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65  cord */.  int le
101a0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
101b0 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68  The length of th
101c0 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74  e serialized dat
101d0 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  a for the column
101e0 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20   */.  int i;    
101f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
10200 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 63 68   counter */.  ch
10210 61 72 20 2a 7a 44 61 74 61 3b 20 20 20 20 20 20  ar *zData;      
10220 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20   /* Part of the 
10230 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
10240 6f 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  oded */.  Mem *p
10250 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  Dest;        /* 
10260 57 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74  Where to write t
10270 68 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c  he extracted val
10280 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d  ue */.  Mem sMem
10290 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ;          /* Fo
102a0 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65  r storing the re
102b0 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
102c0 65 64 20 2a 2f 0a 20 20 75 38 20 2a 7a 49 64 78  ed */.  u8 *zIdx
102d0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
102e0 64 65 78 20 69 6e 74 6f 20 68 65 61 64 65 72 20  dex into header 
102f0 2a 2f 0a 20 20 75 38 20 2a 7a 45 6e 64 48 64 72  */.  u8 *zEndHdr
10300 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ;       /* Point
10310 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65  er to first byte
10320 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65   after the heade
10330 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65  r */.  u32 offse
10340 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66  t;        /* Off
10350 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  set into the dat
10360 61 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65  a */.  u64 offse
10370 74 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d  t64;      /* 64-
10380 62 69 74 20 6f 66 66 73 65 74 2e 20 20 36 34 20  bit offset.  64 
10390 62 69 74 73 20 6e 65 65 64 65 64 20 74 6f 20 63  bits needed to c
103a0 61 74 63 68 20 6f 76 65 72 66 6c 6f 77 20 2a 2f  atch overflow */
103b0 0a 20 20 69 6e 74 20 73 7a 48 64 72 3b 20 20 20  .  int szHdr;   
103c0 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
103d0 20 74 68 65 20 68 65 61 64 65 72 20 73 69 7a 65   the header size
103e0 20 66 69 65 6c 64 20 61 74 20 73 74 61 72 74 20   field at start 
103f0 6f 66 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  of record */.  i
10400 6e 74 20 61 76 61 69 6c 3b 20 20 20 20 20 20 20  nt avail;       
10410 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
10420 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c  ytes of availabl
10430 65 20 64 61 74 61 20 2a 2f 0a 20 20 4d 65 6d 20  e data */.  Mem 
10440 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  *pReg;         /
10450 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e  * PseudoTable in
10460 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a  put register */.
10470 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ..  p1 = pOp->p1
10480 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
10490 3b 0a 20 20 70 43 20 3d 20 30 3b 0a 20 20 6d 65  ;.  pC = 0;.  me
104a0 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73  mset(&sMem, 0, s
104b0 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20  izeof(sMem));.  
104c0 61 73 73 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43  assert( p1<p->nC
104d0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
104e0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
104f0 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
10500 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61   );.  pDest = &a
10510 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
10520 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
10530 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  Dest, MEM_Null);
10540 0a 20 20 7a 52 65 63 20 3d 20 30 3b 0a 0a 20 20  .  zRec = 0;..  
10550 2f 2a 20 54 68 69 73 20 62 6c 6f 63 6b 20 73 65  /* This block se
10560 74 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 20  ts the variable 
10570 70 61 79 6c 6f 61 64 53 69 7a 65 20 74 6f 20 62  payloadSize to b
10580 65 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  e the total numb
10590 65 72 20 6f 66 0a 20 20 2a 2a 20 62 79 74 65 73  er of.  ** bytes
105a0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2e 0a   in the record..
105b0 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52 65 63 20 69    **.  ** zRec i
105c0 73 20 73 65 74 20 74 6f 20 62 65 20 74 68 65 20  s set to be the 
105d0 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  complete text of
105e0 20 74 68 65 20 72 65 63 6f 72 64 20 69 66 20 69   the record if i
105f0 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a  t is available..
10600 20 20 2a 2a 20 54 68 65 20 63 6f 6d 70 6c 65 74    ** The complet
10610 65 20 72 65 63 6f 72 64 20 74 65 78 74 20 69 73  e record text is
10620 20 61 6c 77 61 79 73 20 61 76 61 69 6c 61 62 6c   always availabl
10630 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61 62  e for pseudo-tab
10640 6c 65 73 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  les.  ** If the 
10650 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65 64  record is stored
10660 20 69 6e 20 61 20 63 75 72 73 6f 72 2c 20 74 68   in a cursor, th
10670 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72  e complete recor
10680 64 20 74 65 78 74 0a 20 20 2a 2a 20 6d 69 67 68  d text.  ** migh
10690 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 69  t be available i
106a0 6e 20 74 68 65 20 20 70 43 2d 3e 61 52 6f 77 20  n the  pC->aRow 
106b0 63 61 63 68 65 2e 20 20 4f 72 20 69 74 20 6d 69  cache.  Or it mi
106c0 67 68 74 20 6e 6f 74 20 62 65 2e 0a 20 20 2a 2a  ght not be..  **
106d0 20 49 66 20 74 68 65 20 64 61 74 61 20 69 73 20   If the data is 
106e0 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 20 7a 52  unavailable,  zR
106f0 65 63 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c  ec is set to NUL
10700 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 65 20  L..  **.  ** We 
10710 61 6c 73 6f 20 63 6f 6d 70 75 74 65 20 74 68 65  also compute the
10720 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
10730 6e 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ns in the record
10740 2e 20 20 46 6f 72 20 63 75 72 73 6f 72 73 2c 0a  .  For cursors,.
10750 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20    ** the number 
10760 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 73 20 73 74  of columns is st
10770 6f 72 65 64 20 69 6e 20 74 68 65 20 56 64 62 65  ored in the Vdbe
10780 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64 20 65 6c  Cursor.nField el
10790 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 70 43  ement..  */.  pC
107a0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 31 5d 3b   = p->apCsr[p1];
107b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
107c0 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   );.#ifndef SQLI
107d0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
107e0 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28 20 70  ABLE.  assert( p
107f0 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3d 3d  C->pVtabCursor==
10800 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 70 43  0 );.#endif.  pC
10810 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
10820 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d  r;.  if( pCrsr!=
10830 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  0 ){.    /* The 
10840 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65 64  record is stored
10850 20 69 6e 20 61 20 42 2d 54 72 65 65 20 2a 2f 0a   in a B-Tree */.
10860 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
10870 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
10880 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (pC);.    if( rc
10890 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
108a0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
108b0 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
108c0 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64  ){.      payload
108d0 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65  Size = 0;.    }e
108e0 6c 73 65 20 69 66 28 20 70 43 2d 3e 63 61 63 68  lse if( pC->cach
108f0 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68  eStatus==p->cach
10900 65 43 74 72 20 29 7b 0a 20 20 20 20 20 20 70 61  eCtr ){.      pa
10910 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e  yloadSize = pC->
10920 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20  payloadSize;.   
10930 20 20 20 7a 52 65 63 20 3d 20 28 63 68 61 72 2a     zRec = (char*
10940 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 7d  )pC->aRow;.    }
10950 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 69 73 49  else if( pC->isI
10960 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20 61 73  ndex ){.      as
10970 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
10980 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
10990 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20  pCrsr) );.      
109a0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
109b0 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20  eKeySize(pCrsr, 
109c0 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 29 3b  &payloadSize64);
109d0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
109e0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
109f0 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73    /* True becaus
10a00 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74  e of CursorMovet
10a10 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a  o() call above *
10a20 2f 0a 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74  /.      /* sqlit
10a30 65 33 42 74 72 65 65 50 61 72 73 65 43 65 6c 6c  e3BtreeParseCell
10a40 50 74 72 28 29 20 75 73 65 73 20 67 65 74 56 61  Ptr() uses getVa
10a50 72 69 6e 74 33 32 28 29 20 74 6f 20 65 78 74 72  rint32() to extr
10a60 61 63 74 20 74 68 65 0a 20 20 20 20 20 20 2a 2a  act the.      **
10a70 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 2c 20 73   payload size, s
10a80 6f 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62  o it is impossib
10a90 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61 64 53 69  le for payloadSi
10aa0 7a 65 36 34 20 74 6f 20 62 65 0a 20 20 20 20 20  ze64 to be.     
10ab0 20 2a 2a 20 6c 61 72 67 65 72 20 74 68 61 6e 20   ** larger than 
10ac0 33 32 20 62 69 74 73 2e 20 2a 2f 0a 20 20 20 20  32 bits. */.    
10ad0 20 20 61 73 73 65 72 74 28 20 28 70 61 79 6c 6f    assert( (paylo
10ae0 61 64 53 69 7a 65 36 34 20 26 20 53 51 4c 49 54  adSize64 & SQLIT
10af0 45 5f 4d 41 58 5f 55 33 32 29 3d 3d 28 75 36 34  E_MAX_U32)==(u64
10b00 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 29  )payloadSize64 )
10b10 3b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53  ;.      payloadS
10b20 69 7a 65 20 3d 20 28 75 33 32 29 70 61 79 6c 6f  ize = (u32)paylo
10b30 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20 7d 65  adSize64;.    }e
10b40 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
10b50 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
10b60 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
10b70 73 72 29 20 29 3b 0a 20 20 20 20 20 20 72 63 20  sr) );.      rc 
10b80 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  = sqlite3BtreeDa
10b90 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70  taSize(pCrsr, &p
10ba0 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20  ayloadSize);.   
10bb0 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
10bc0 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a  QLITE_OK );   /*
10bd0 20 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e   DataSize() cann
10be0 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 7d  ot fail */.    }
10bf0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
10c00 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e  >pseudoTableReg>
10c10 30 20 29 7b 0a 20 20 20 20 70 52 65 67 20 3d 20  0 ){.    pReg = 
10c20 26 61 4d 65 6d 5b 70 43 2d 3e 70 73 65 75 64 6f  &aMem[pC->pseudo
10c30 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 61  TableReg];.    a
10c40 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61  ssert( pReg->fla
10c50 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
10c60 0a 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65  .    payloadSize
10c70 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20   = pReg->n;.    
10c80 7a 52 65 63 20 3d 20 70 52 65 67 2d 3e 7a 3b 0a  zRec = pReg->z;.
10c90 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
10ca0 74 75 73 20 3d 20 28 70 4f 70 2d 3e 70 35 26 4f  tus = (pOp->p5&O
10cb0 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45  PFLAG_CLEARCACHE
10cc0 29 20 3f 20 43 41 43 48 45 5f 53 54 41 4c 45 20  ) ? CACHE_STALE 
10cd0 3a 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20  : p->cacheCtr;. 
10ce0 20 20 20 61 73 73 65 72 74 28 20 70 61 79 6c 6f     assert( paylo
10cf0 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a 52 65  adSize==0 || zRe
10d00 63 21 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 7b  c!=0 );.  }else{
10d10 0a 20 20 20 20 2f 2a 20 43 6f 6e 73 69 64 65 72  .    /* Consider
10d20 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20 4e   the row to be N
10d30 55 4c 4c 20 2a 2f 0a 20 20 20 20 70 61 79 6c 6f  ULL */.    paylo
10d40 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 7d 0a  adSize = 0;.  }.
10d50 0a 20 20 2f 2a 20 49 66 20 70 61 79 6c 6f 61 64  .  /* If payload
10d60 53 69 7a 65 20 69 73 20 30 2c 20 74 68 65 6e 20  Size is 0, then 
10d70 6a 75 73 74 20 73 74 6f 72 65 20 61 20 4e 55 4c  just store a NUL
10d80 4c 20 2a 2f 0a 20 20 69 66 28 20 70 61 79 6c 6f  L */.  if( paylo
10d90 61 64 53 69 7a 65 3d 3d 30 20 29 7b 0a 20 20 20  adSize==0 ){.   
10da0 20 61 73 73 65 72 74 28 20 70 44 65 73 74 2d 3e   assert( pDest->
10db0 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29  flags&MEM_Null )
10dc0 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f  ;.    goto op_co
10dd0 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20  lumn_out;.  }.  
10de0 61 73 73 65 72 74 28 20 64 62 2d 3e 61 4c 69 6d  assert( db->aLim
10df0 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
10e00 4c 45 4e 47 54 48 5d 3e 3d 30 20 29 3b 0a 20 20  LENGTH]>=0 );.  
10e10 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 20  if( payloadSize 
10e20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69  > (u32)db->aLimi
10e30 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
10e40 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
10e50 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
10e60 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 43 2d 3e  .  nField = pC->
10e70 6e 46 69 65 6c 64 3b 0a 20 20 61 73 73 65 72 74  nField;.  assert
10e80 28 20 70 32 3c 6e 46 69 65 6c 64 20 29 3b 0a 0a  ( p2<nField );..
10e90 20 20 2f 2a 20 52 65 61 64 20 61 6e 64 20 70 61    /* Read and pa
10ea0 72 73 65 20 74 68 65 20 74 61 62 6c 65 20 68 65  rse the table he
10eb0 61 64 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65  ader.  Store the
10ec0 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
10ed0 70 61 72 73 65 0a 20 20 2a 2a 20 69 6e 74 6f 20  parse.  ** into 
10ee0 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65  the record heade
10ef0 72 20 63 61 63 68 65 20 66 69 65 6c 64 73 20 6f  r cache fields o
10f00 66 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 20 20  f the cursor..  
10f10 2a 2f 0a 20 20 61 54 79 70 65 20 3d 20 70 43 2d  */.  aType = pC-
10f20 3e 61 54 79 70 65 3b 0a 20 20 69 66 28 20 70 43  >aType;.  if( pC
10f30 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d 3d 70  ->cacheStatus==p
10f40 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20  ->cacheCtr ){.  
10f50 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e    aOffset = pC->
10f60 61 4f 66 66 73 65 74 3b 0a 20 20 7d 65 6c 73 65  aOffset;.  }else
10f70 7b 0a 20 20 20 20 61 73 73 65 72 74 28 61 54 79  {.    assert(aTy
10f80 70 65 29 3b 0a 20 20 20 20 61 76 61 69 6c 20 3d  pe);.    avail =
10f90 20 30 3b 0a 20 20 20 20 70 43 2d 3e 61 4f 66 66   0;.    pC->aOff
10fa0 73 65 74 20 3d 20 61 4f 66 66 73 65 74 20 3d 20  set = aOffset = 
10fb0 26 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a  &aType[nField];.
10fc0 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53      pC->payloadS
10fd0 69 7a 65 20 3d 20 70 61 79 6c 6f 61 64 53 69 7a  ize = payloadSiz
10fe0 65 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  e;.    pC->cache
10ff0 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68  Status = p->cach
11000 65 43 74 72 3b 0a 0a 20 20 20 20 2f 2a 20 46 69  eCtr;..    /* Fi
11010 67 75 72 65 20 6f 75 74 20 68 6f 77 20 6d 61 6e  gure out how man
11020 79 20 62 79 74 65 73 20 61 72 65 20 69 6e 20 74  y bytes are in t
11030 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20  he header */.   
11040 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20   if( zRec ){.   
11050 20 20 20 7a 44 61 74 61 20 3d 20 7a 52 65 63 3b     zData = zRec;
11060 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
11070 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65    if( pC->isInde
11080 78 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 44 61  x ){.        zDa
11090 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69  ta = (char*)sqli
110a0 74 65 33 42 74 72 65 65 4b 65 79 46 65 74 63 68  te3BtreeKeyFetch
110b0 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b  (pCrsr, &avail);
110c0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
110d0 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63        zData = (c
110e0 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74 72 65  har*)sqlite3Btre
110f0 65 44 61 74 61 46 65 74 63 68 28 70 43 72 73 72  eDataFetch(pCrsr
11100 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20  , &avail);.     
11110 20 7d 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 4b   }.      /* If K
11120 65 79 46 65 74 63 68 28 29 2f 44 61 74 61 46 65  eyFetch()/DataFe
11130 74 63 68 28 29 20 6d 61 6e 61 67 65 64 20 74 6f  tch() managed to
11140 20 67 65 74 20 74 68 65 20 65 6e 74 69 72 65 20   get the entire 
11150 70 61 79 6c 6f 61 64 2c 0a 20 20 20 20 20 20 2a  payload,.      *
11160 2a 20 73 61 76 65 20 74 68 65 20 70 61 79 6c 6f  * save the paylo
11170 61 64 20 69 6e 20 74 68 65 20 70 43 2d 3e 61 52  ad in the pC->aR
11180 6f 77 20 63 61 63 68 65 2e 20 20 54 68 61 74 20  ow cache.  That 
11190 77 69 6c 6c 20 73 61 76 65 20 75 73 20 66 72 6f  will save us fro
111a0 6d 0a 20 20 20 20 20 20 2a 2a 20 68 61 76 69 6e  m.      ** havin
111b0 67 20 74 6f 20 6d 61 6b 65 20 61 64 64 69 74 69  g to make additi
111c0 6f 6e 61 6c 20 63 61 6c 6c 73 20 74 6f 20 66 65  onal calls to fe
111d0 74 63 68 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  tch the content 
111e0 70 6f 72 74 69 6f 6e 20 6f 66 0a 20 20 20 20 20  portion of.     
111f0 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 2e 0a   ** the record..
11200 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
11210 73 73 65 72 74 28 20 61 76 61 69 6c 3e 3d 30 20  ssert( avail>=0 
11220 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 61 79  );.      if( pay
11230 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32  loadSize <= (u32
11240 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20  )avail ){.      
11250 20 20 7a 52 65 63 20 3d 20 7a 44 61 74 61 3b 0a    zRec = zData;.
11260 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
11270 20 3d 20 28 75 38 2a 29 7a 44 61 74 61 3b 0a 20   = (u8*)zData;. 
11280 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
11290 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30      pC->aRow = 0
112a0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
112b0 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
112c0 77 69 6e 67 20 61 73 73 65 72 74 20 69 73 20 74  wing assert is t
112d0 72 75 65 20 69 6e 20 61 6c 6c 20 63 61 73 65 73  rue in all cases
112e0 20 61 63 63 65 70 74 20 77 68 65 6e 0a 20 20 20   accept when.   
112f0 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65   ** the database
11300 20 66 69 6c 65 20 68 61 73 20 62 65 65 6e 20 63   file has been c
11310 6f 72 72 75 70 74 65 64 20 65 78 74 65 72 6e 61  orrupted externa
11320 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20 20 20 20 61  lly..    **    a
11330 73 73 65 72 74 28 20 7a 52 65 63 21 3d 30 20 7c  ssert( zRec!=0 |
11340 7c 20 61 76 61 69 6c 3e 3d 70 61 79 6c 6f 61 64  | avail>=payload
11350 53 69 7a 65 20 7c 7c 20 61 76 61 69 6c 3e 3d 39  Size || avail>=9
11360 20 29 3b 20 2a 2f 0a 20 20 20 20 73 7a 48 64 72   ); */.    szHdr
11370 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 28   = getVarint32((
11380 75 38 2a 29 7a 44 61 74 61 2c 20 6f 66 66 73 65  u8*)zData, offse
11390 74 29 3b 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65  t);..    /* Make
113a0 20 73 75 72 65 20 61 20 63 6f 72 72 75 70 74 20   sure a corrupt 
113b0 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74  database has not
113c0 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65   given us an ove
113d0 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20  rsize header..  
113e0 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77    ** Do this now
113f0 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65   to avoid an ove
11400 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  rsize memory all
11410 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a  ocation..    **.
11420 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72      ** Type entr
11430 69 65 73 20 63 61 6e 20 62 65 20 62 65 74 77 65  ies can be betwe
11440 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65 73  en 1 and 5 bytes
11450 20 65 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e   each.  But 4 an
11460 64 20 35 20 62 79 74 65 0a 20 20 20 20 2a 2a 20  d 5 byte.    ** 
11470 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63  types use so muc
11480 68 20 64 61 74 61 20 73 70 61 63 65 20 74 68 61  h data space tha
11490 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79  t there can only
114a0 20 62 65 20 34 30 39 36 20 61 6e 64 20 33 32 20   be 4096 and 32 
114b0 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20  of.    ** them, 
114c0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
114d0 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65  o the maximum he
114e0 61 64 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75  ader length resu
114f0 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 2a  lts from a.    *
11500 2a 20 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f  * 3-byte type fo
11510 72 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61  r each of the ma
11520 78 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63  ximum of 32768 c
11530 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65  olumns plus thre
11540 65 0a 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62  e.    ** extra b
11550 79 74 65 73 20 66 6f 72 20 74 68 65 20 68 65 61  ytes for the hea
11560 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c  der length itsel
11570 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20  f.  32768*3 + 3 
11580 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 2a 2f 0a  = 98307..    */.
11590 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e      if( offset >
115a0 20 39 38 33 30 37 20 29 7b 0a 20 20 20 20 20 20   98307 ){.      
115b0 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
115c0 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
115d0 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
115e0 75 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ut;.    }..    /
115f0 2a 20 43 6f 6d 70 75 74 65 20 69 6e 20 6c 65 6e  * Compute in len
11600 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
11610 79 74 65 73 20 6f 66 20 64 61 74 61 20 77 65 20  ytes of data we 
11620 6e 65 65 64 20 74 6f 20 72 65 61 64 20 69 6e 20  need to read in 
11630 6f 72 64 65 72 0a 20 20 20 20 2a 2a 20 74 6f 20  order.    ** to 
11640 67 65 74 20 6e 46 69 65 6c 64 20 74 79 70 65 20  get nField type 
11650 76 61 6c 75 65 73 2e 20 20 6f 66 66 73 65 74 20  values.  offset 
11660 69 73 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e  is an upper boun
11670 64 20 6f 6e 20 74 68 69 73 2e 20 20 42 75 74 0a  d on this.  But.
11680 20 20 20 20 2a 2a 20 6e 46 69 65 6c 64 20 6d 69      ** nField mi
11690 67 68 74 20 62 65 20 73 69 67 6e 69 66 69 63 61  ght be significa
116a0 6e 74 6c 79 20 6c 65 73 73 20 74 68 61 6e 20 74  ntly less than t
116b0 68 65 20 74 72 75 65 20 6e 75 6d 62 65 72 20 6f  he true number o
116c0 66 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 2a 2a  f columns.    **
116d0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 61   in the table, a
116e0 6e 64 20 69 6e 20 74 68 61 74 20 63 61 73 65 2c  nd in that case,
116f0 20 35 2a 6e 46 69 65 6c 64 2b 33 20 6d 69 67 68   5*nField+3 migh
11700 74 20 62 65 20 73 6d 61 6c 6c 65 72 20 74 68 61  t be smaller tha
11710 6e 20 6f 66 66 73 65 74 2e 0a 20 20 20 20 2a 2a  n offset..    **
11720 20 57 65 20 77 61 6e 74 20 74 6f 20 6d 69 6e 69   We want to mini
11730 6d 69 7a 65 20 6c 65 6e 20 69 6e 20 6f 72 64 65  mize len in orde
11740 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 73  r to limit the s
11750 69 7a 65 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72  ize of the memor
11760 79 0a 20 20 20 20 2a 2a 20 61 6c 6c 6f 63 61 74  y.    ** allocat
11770 69 6f 6e 2c 20 65 73 70 65 63 69 61 6c 6c 79 20  ion, especially 
11780 69 66 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  if a corrupt dat
11790 61 62 61 73 65 20 66 69 6c 65 20 68 61 73 20 63  abase file has c
117a0 61 75 73 65 64 20 6f 66 66 73 65 74 0a 20 20 20  aused offset.   
117b0 20 2a 2a 20 74 6f 20 62 65 20 6f 76 65 72 73 69   ** to be oversi
117c0 7a 65 64 2e 20 4f 66 66 73 65 74 20 69 73 20 6c  zed. Offset is l
117d0 69 6d 69 74 65 64 20 74 6f 20 39 38 33 30 37 20  imited to 98307 
117e0 61 62 6f 76 65 2e 20 20 42 75 74 20 39 38 33 30  above.  But 9830
117f0 37 20 6d 69 67 68 74 0a 20 20 20 20 2a 2a 20 73  7 might.    ** s
11800 74 69 6c 6c 20 65 78 63 65 65 64 20 52 6f 62 73  till exceed Robs
11810 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  on memory alloca
11820 74 69 6f 6e 20 6c 69 6d 69 74 73 20 6f 6e 20 73  tion limits on s
11830 6f 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ome configuratio
11840 6e 73 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 73 79  ns..    ** On sy
11850 73 74 65 6d 73 20 74 68 61 74 20 63 61 6e 6e 6f  stems that canno
11860 74 20 74 6f 6c 65 72 61 74 65 20 6c 61 72 67 65  t tolerate large
11870 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
11880 6f 6e 73 2c 20 6e 46 69 65 6c 64 2a 35 2b 33 0a  ons, nField*5+3.
11890 20 20 20 20 2a 2a 20 77 69 6c 6c 20 6c 69 6b 65      ** will like
118a0 6c 79 20 62 65 20 6d 75 63 68 20 73 6d 61 6c 6c  ly be much small
118b0 65 72 20 73 69 6e 63 65 20 6e 46 69 65 6c 64 20  er since nField 
118c0 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6c  will likely be l
118d0 65 73 73 20 74 68 61 6e 0a 20 20 20 20 2a 2a 20  ess than.    ** 
118e0 32 30 20 6f 72 20 73 6f 2e 20 20 54 68 69 73 20  20 or so.  This 
118f0 69 6e 73 75 72 65 73 20 74 68 61 74 20 52 6f 62  insures that Rob
11900 73 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  son memory alloc
11910 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20 61 72 65  ation limits are
11920 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 65 78 63 65  .    ** not exce
11930 65 64 65 64 20 65 76 65 6e 20 66 6f 72 20 63 6f  eded even for co
11940 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 66  rrupt database f
11950 69 6c 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  iles..    */.   
11960 20 6c 65 6e 20 3d 20 6e 46 69 65 6c 64 2a 35 20   len = nField*5 
11970 2b 20 33 3b 0a 20 20 20 20 69 66 28 20 6c 65 6e  + 3;.    if( len
11980 20 3e 20 28 69 6e 74 29 6f 66 66 73 65 74 20 29   > (int)offset )
11990 20 6c 65 6e 20 3d 20 28 69 6e 74 29 6f 66 66 73   len = (int)offs
119a0 65 74 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20  et;..    /* The 
119b0 4b 65 79 46 65 74 63 68 28 29 20 6f 72 20 44 61  KeyFetch() or Da
119c0 74 61 46 65 74 63 68 28 29 20 61 62 6f 76 65 20  taFetch() above 
119d0 61 72 65 20 66 61 73 74 20 61 6e 64 20 77 69 6c  are fast and wil
119e0 6c 20 67 65 74 20 74 68 65 20 65 6e 74 69 72 65  l get the entire
119f0 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68  .    ** record h
11a00 65 61 64 65 72 20 69 6e 20 6d 6f 73 74 20 63 61  eader in most ca
11a10 73 65 73 2e 20 20 42 75 74 20 74 68 65 79 20 77  ses.  But they w
11a20 69 6c 6c 20 66 61 69 6c 20 74 6f 20 67 65 74 20  ill fail to get 
11a30 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a 20 20 20  the complete.   
11a40 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61 64 65   ** record heade
11a50 72 20 69 66 20 74 68 65 20 72 65 63 6f 72 64 20  r if the record 
11a60 68 65 61 64 65 72 20 64 6f 65 73 20 6e 6f 74 20  header does not 
11a70 66 69 74 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20  fit on a single 
11a80 70 61 67 65 0a 20 20 20 20 2a 2a 20 69 6e 20 74  page.    ** in t
11a90 68 65 20 42 2d 54 72 65 65 2e 20 20 57 68 65 6e  he B-Tree.  When
11aa0 20 74 68 61 74 20 68 61 70 70 65 6e 73 2c 20 75   that happens, u
11ab0 73 65 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  se sqlite3VdbeMe
11ac0 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 74 6f 0a  mFromBtree() to.
11ad0 20 20 20 20 2a 2a 20 61 63 71 75 69 72 65 20 74      ** acquire t
11ae0 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64  he complete head
11af0 65 72 20 74 65 78 74 2e 0a 20 20 20 20 2a 2f 0a  er text..    */.
11b00 20 20 20 20 69 66 28 20 21 7a 52 65 63 20 26 26      if( !zRec &&
11b10 20 61 76 61 69 6c 3c 6c 65 6e 20 29 7b 0a 20 20   avail<len ){.  
11b20 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d      sMem.flags =
11b30 20 30 3b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 64   0;.      sMem.d
11b40 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20  b = 0;.      rc 
11b50 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
11b60 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c  FromBtree(pCrsr,
11b70 20 30 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49   0, len, pC->isI
11b80 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20  ndex, &sMem);.  
11b90 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
11ba0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
11bb0 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
11bc0 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  out;.      }.   
11bd0 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e     zData = sMem.
11be0 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 45 6e  z;.    }.    zEn
11bf0 64 48 64 72 20 3d 20 28 75 38 20 2a 29 26 7a 44  dHdr = (u8 *)&zD
11c00 61 74 61 5b 6c 65 6e 5d 3b 0a 20 20 20 20 7a 49  ata[len];.    zI
11c10 64 78 20 3d 20 28 75 38 20 2a 29 26 7a 44 61 74  dx = (u8 *)&zDat
11c20 61 5b 73 7a 48 64 72 5d 3b 0a 0a 20 20 20 20 2f  a[szHdr];..    /
11c30 2a 20 53 63 61 6e 20 74 68 65 20 68 65 61 64 65  * Scan the heade
11c40 72 20 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20  r and use it to 
11c50 66 69 6c 6c 20 69 6e 20 74 68 65 20 61 54 79 70  fill in the aTyp
11c60 65 5b 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b  e[] and aOffset[
11c70 5d 0a 20 20 20 20 2a 2a 20 61 72 72 61 79 73 2e  ].    ** arrays.
11c80 20 20 61 54 79 70 65 5b 69 5d 20 77 69 6c 6c 20    aType[i] will 
11c90 63 6f 6e 74 61 69 6e 20 74 68 65 20 74 79 70 65  contain the type
11ca0 20 69 6e 74 65 67 65 72 20 66 6f 72 20 74 68 65   integer for the
11cb0 20 69 2d 74 68 0a 20 20 20 20 2a 2a 20 63 6f 6c   i-th.    ** col
11cc0 75 6d 6e 20 61 6e 64 20 61 4f 66 66 73 65 74 5b  umn and aOffset[
11cd0 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20  i] will contain 
11ce0 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20  the offset from 
11cf0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20  the beginning.  
11d00 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
11d10 72 64 20 74 6f 20 74 68 65 20 73 74 61 72 74 20  rd to the start 
11d20 6f 66 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  of the data for 
11d30 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a  the i-th column.
11d40 20 20 20 20 2a 2f 0a 20 20 20 20 6f 66 66 73 65      */.    offse
11d50 74 36 34 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20  t64 = offset;.  
11d60 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 46 69    for(i=0; i<nFi
11d70 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  eld; i++){.     
11d80 20 69 66 28 20 7a 49 64 78 3c 7a 45 6e 64 48 64   if( zIdx<zEndHd
11d90 72 20 29 7b 0a 20 20 20 20 20 20 20 20 61 4f 66  r ){.        aOf
11da0 66 73 65 74 5b 69 5d 20 3d 20 28 75 33 32 29 6f  fset[i] = (u32)o
11db0 66 66 73 65 74 36 34 3b 0a 20 20 20 20 20 20 20  ffset64;.       
11dc0 20 7a 49 64 78 20 2b 3d 20 67 65 74 56 61 72 69   zIdx += getVari
11dd0 6e 74 33 32 28 7a 49 64 78 2c 20 61 54 79 70 65  nt32(zIdx, aType
11de0 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 6f 66  [i]);.        of
11df0 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65  fset64 += sqlite
11e00 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
11e10 65 6e 28 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20  en(aType[i]);.  
11e20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
11e30 20 20 20 2f 2a 20 49 66 20 69 20 69 73 20 6c 65     /* If i is le
11e40 73 73 20 74 68 61 74 20 6e 46 69 65 6c 64 2c 20  ss that nField, 
11e50 74 68 65 6e 20 74 68 65 72 65 20 61 72 65 20 6c  then there are l
11e60 65 73 73 20 66 69 65 6c 64 73 20 69 6e 20 74 68  ess fields in th
11e70 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 72 65  is.        ** re
11e80 63 6f 72 64 20 74 68 61 6e 20 53 65 74 4e 75 6d  cord than SetNum
11e90 43 6f 6c 75 6d 6e 73 20 69 6e 64 69 63 61 74 65  Columns indicate
11ea0 64 20 74 68 65 72 65 20 61 72 65 20 63 6f 6c 75  d there are colu
11eb0 6d 6e 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20  mns in the.     
11ec0 20 20 20 2a 2a 20 74 61 62 6c 65 2e 20 53 65 74     ** table. Set
11ed0 20 74 68 65 20 6f 66 66 73 65 74 20 66 6f 72 20   the offset for 
11ee0 61 6e 79 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e  any extra column
11ef0 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 69 6e  s not present in
11f00 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20  .        ** the 
11f10 72 65 63 6f 72 64 20 74 6f 20 30 2e 20 54 68 69  record to 0. Thi
11f20 73 20 74 65 6c 6c 73 20 63 6f 64 65 20 62 65 6c  s tells code bel
11f30 6f 77 20 74 6f 20 73 74 6f 72 65 20 61 20 4e 55  ow to store a NU
11f40 4c 4c 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e  LL.        ** in
11f50 73 74 65 61 64 20 6f 66 20 64 65 73 65 72 69 61  stead of deseria
11f60 6c 69 7a 69 6e 67 20 61 20 76 61 6c 75 65 20 66  lizing a value f
11f70 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 0a  rom the record..
11f80 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
11f90 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20     aOffset[i] = 
11fa0 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
11fb0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
11fc0 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d  MemRelease(&sMem
11fd0 29 3b 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67  );.    sMem.flag
11fe0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20  s = MEM_Null;.. 
11ff0 20 20 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65     /* If we have
12000 20 72 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65   read more heade
12010 72 20 64 61 74 61 20 74 68 61 6e 20 77 61 73 20  r data than was 
12020 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
12030 20 68 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a 20   header,.    ** 
12040 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66  or if the end of
12050 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20   the last field 
12060 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 70 61  appears to be pa
12070 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  st the end of th
12080 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c  e.    ** record,
12090 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f   or if the end o
120a0 66 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64  f the last field
120b0 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 62   appears to be b
120c0 65 66 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20  efore the end.  
120d0 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
120e0 72 64 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65  rd (when all fie
120f0 6c 64 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68  lds present), th
12100 65 6e 20 77 65 20 6d 75 73 74 20 62 65 20 64 65  en we must be de
12110 61 6c 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77 69  aling .    ** wi
12120 74 68 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  th a corrupt dat
12130 61 62 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  abase..    */.  
12140 20 20 69 66 28 20 28 7a 49 64 78 20 3e 20 7a 45    if( (zIdx > zE
12150 6e 64 48 64 72 29 7c 7c 20 28 6f 66 66 73 65 74  ndHdr)|| (offset
12160 36 34 20 3e 20 70 61 79 6c 6f 61 64 53 69 7a 65  64 > payloadSize
12170 29 0a 20 20 20 20 20 7c 7c 20 28 7a 49 64 78 3d  ).     || (zIdx=
12180 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f 66 66 73  =zEndHdr && offs
12190 65 74 36 34 21 3d 28 75 36 34 29 70 61 79 6c 6f  et64!=(u64)paylo
121a0 61 64 53 69 7a 65 29 20 29 7b 0a 20 20 20 20 20  adSize) ){.     
121b0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
121c0 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
121d0 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
121e0 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  out;.    }.  }..
121f0 20 20 2f 2a 20 47 65 74 20 74 68 65 20 63 6f 6c    /* Get the col
12200 75 6d 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  umn information.
12210 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20   If aOffset[p2] 
12220 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
12230 6e 20 0a 20 20 2a 2a 20 64 65 73 65 72 69 61 6c  n .  ** deserial
12240 69 7a 65 20 74 68 65 20 76 61 6c 75 65 20 66 72  ize the value fr
12250 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 20 49  om the record. I
12260 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73  f aOffset[p2] is
12270 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74 68 65 6e   zero,.  ** then
12280 20 74 68 65 72 65 20 61 72 65 20 6e 6f 74 20 65   there are not e
12290 6e 6f 75 67 68 20 66 69 65 6c 64 73 20 69 6e 20  nough fields in 
122a0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 73 61  the record to sa
122b0 74 69 73 66 79 20 74 68 65 0a 20 20 2a 2a 20 72  tisfy the.  ** r
122c0 65 71 75 65 73 74 2e 20 20 49 6e 20 74 68 69 73  equest.  In this
122d0 20 63 61 73 65 2c 20 73 65 74 20 74 68 65 20 76   case, set the v
122e0 61 6c 75 65 20 4e 55 4c 4c 20 6f 72 20 74 6f 20  alue NULL or to 
122f0 50 34 20 69 66 20 50 34 20 69 73 0a 20 20 2a 2a  P4 if P4 is.  **
12300 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
12310 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 20 20 2a 2f  Mem object..  */
12320 0a 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b 70  .  if( aOffset[p
12330 32 5d 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  2] ){.    assert
12340 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
12350 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20  );.    if( zRec 
12360 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
12370 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78  VdbeMemReleaseEx
12380 74 65 72 6e 61 6c 28 70 44 65 73 74 29 3b 0a 20  ternal(pDest);. 
12390 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
123a0 53 65 72 69 61 6c 47 65 74 28 28 75 38 20 2a 29  SerialGet((u8 *)
123b0 26 7a 52 65 63 5b 61 4f 66 66 73 65 74 5b 70 32  &zRec[aOffset[p2
123c0 5d 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70  ]], aType[p2], p
123d0 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Dest);.    }else
123e0 7b 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 73 71  {.      len = sq
123f0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
12400 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 70 32 5d  ypeLen(aType[p2]
12410 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
12420 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 4d 65  VdbeMemMove(&sMe
12430 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20  m, pDest);.     
12440 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
12450 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
12460 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d  rsr, aOffset[p2]
12470 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64  , len, pC->isInd
12480 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ex, &sMem);.    
12490 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
124a0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
124b0 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
124c0 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
124d0 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b   zData = sMem.z;
124e0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
124f0 62 65 53 65 72 69 61 6c 47 65 74 28 28 75 38 2a  beSerialGet((u8*
12500 29 7a 44 61 74 61 2c 20 61 54 79 70 65 5b 70 32  )zData, aType[p2
12510 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d  ], pDest);.    }
12520 0a 20 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20  .    pDest->enc 
12530 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 7d 65  = encoding;.  }e
12540 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 4f 70  lse{.    if( pOp
12550 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d  ->p4type==P4_MEM
12560 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
12570 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
12580 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e  opy(pDest, pOp->
12590 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61  p4.pMem, MEM_Sta
125a0 74 69 63 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  tic);.    }else{
125b0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
125c0 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  Dest->flags&MEM_
125d0 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 7d 0a 20 20  Null );.    }.  
125e0 7d 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 64 79  }..  /* If we dy
125f0 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
12600 74 65 64 20 73 70 61 63 65 20 74 6f 20 68 6f 6c  ted space to hol
12610 64 20 74 68 65 20 64 61 74 61 20 28 69 6e 20 74  d the data (in t
12620 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  he.  ** sqlite3V
12630 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
12640 29 20 63 61 6c 6c 20 61 62 6f 76 65 29 20 74 68  ) call above) th
12650 65 6e 20 74 72 61 6e 73 66 65 72 20 63 6f 6e 74  en transfer cont
12660 72 6f 6c 20 6f 66 20 74 68 61 74 0a 20 20 2a 2a  rol of that.  **
12670 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
12680 6f 63 61 74 65 64 20 73 70 61 63 65 20 6f 76 65  ocated space ove
12690 72 20 74 6f 20 74 68 65 20 70 44 65 73 74 20 73  r to the pDest s
126a0 74 72 75 63 74 75 72 65 2e 0a 20 20 2a 2a 20 54  tructure..  ** T
126b0 68 69 73 20 70 72 65 76 65 6e 74 73 20 61 20 6d  his prevents a m
126c0 65 6d 6f 72 79 20 63 6f 70 79 2e 0a 20 20 2a 2f  emory copy..  */
126d0 0a 20 20 69 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c  .  if( sMem.zMal
126e0 6c 6f 63 20 29 7b 0a 20 20 20 20 61 73 73 65 72  loc ){.    asser
126f0 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e  t( sMem.z==sMem.
12700 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20 61  zMalloc );.    a
12710 73 73 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e  ssert( !(pDest->
12720 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
12730 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
12740 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26  !(pDest->flags &
12750 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53   (MEM_Blob|MEM_S
12760 74 72 29 29 20 7c 7c 20 70 44 65 73 74 2d 3e 7a  tr)) || pDest->z
12770 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20 20  ==sMem.z );.    
12780 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20  pDest->flags &= 
12790 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d 5f  ~(MEM_Ephem|MEM_
127a0 53 74 61 74 69 63 29 3b 0a 20 20 20 20 70 44 65  Static);.    pDe
127b0 73 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  st->flags |= MEM
127c0 5f 54 65 72 6d 3b 0a 20 20 20 20 70 44 65 73 74  _Term;.    pDest
127d0 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20  ->z = sMem.z;.  
127e0 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63    pDest->zMalloc
127f0 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b   = sMem.zMalloc;
12800 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c  .  }..  rc = sql
12810 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57  ite3VdbeMemMakeW
12820 72 69 74 65 61 62 6c 65 28 70 44 65 73 74 29 3b  riteable(pDest);
12830 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a  ..op_column_out:
12840 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
12850 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20  OBSIZE(pDest);. 
12860 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
12870 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b  pOp->p3, pDest);
12880 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
12890 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79  Opcode: Affinity
128a0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
128b0 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69  .** Apply affini
128c0 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20  ties to a range 
128d0 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73 20  of P2 registers 
128e0 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50 31  starting with P1
128f0 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
12900 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
12910 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
12920 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72 61  g. The nth chara
12930 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
12940 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
12950 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
12960 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
12970 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
12980 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65  nth.** memory ce
12990 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e  ll in the range.
129a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69  .*/.case OP_Affi
129b0 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20  nity: {.  const 
129c0 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b  char *zAffinity;
129d0 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
129e0 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
129f0 20 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66 3b   */.  char cAff;
12a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12a10 2a 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72 61  * A single chara
12a20 63 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74 79  cter of affinity
12a30 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79   */..  zAffinity
12a40 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
12a50 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
12a60 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  y!=0 );.  assert
12a70 28 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d  ( zAffinity[pOp-
12a80 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  >p2]==0 );.  pIn
12a90 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
12aa0 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63 41  1];.  while( (cA
12ab0 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74 79  ff = *(zAffinity
12ac0 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 61  ++))!=0 ){.    a
12ad0 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20 26  ssert( pIn1 <= &
12ae0 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d  p->aMem[p->nMem]
12af0 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c   );.    ExpandBl
12b00 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 61 70  ob(pIn1);.    ap
12b10 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
12b20 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67  , cAff, encoding
12b30 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  );.    pIn1++;. 
12b40 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
12b50 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65  * Opcode: MakeRe
12b60 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34  cord P1 P2 P3 P4
12b70 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74   *.**.** Convert
12b80 20 50 32 20 72 65 67 69 73 74 65 72 73 20 62 65   P2 registers be
12b90 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31 20  ginning with P1 
12ba0 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 65 6e  into a single en
12bb0 74 72 79 0a 2a 2a 20 73 75 69 74 61 62 6c 65 20  try.** suitable 
12bc0 66 6f 72 20 75 73 65 20 61 73 20 61 20 64 61 74  for use as a dat
12bd0 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61  a record in a da
12be0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
12bf0 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61  as a key.** in a
12c00 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 64 65  n index.  The de
12c10 74 61 69 6c 73 20 6f 66 20 74 68 65 20 66 6f 72  tails of the for
12c20 6d 61 74 20 61 72 65 20 69 72 72 65 6c 65 76 61  mat are irreleva
12c30 6e 74 20 61 73 20 6c 6f 6e 67 20 61 73 0a 2a 2a  nt as long as.**
12c40 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   the OP_Column o
12c50 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f 64 65  pcode can decode
12c60 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61 74 65   the record late
12c70 72 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 73  r..** Refer to s
12c80 6f 75 72 63 65 20 63 6f 64 65 20 63 6f 6d 6d 65  ource code comme
12c90 6e 74 73 20 66 6f 72 20 74 68 65 20 64 65 74 61  nts for the deta
12ca0 69 6c 73 20 6f 66 20 74 68 65 20 72 65 63 6f 72  ils of the recor
12cb0 64 0a 2a 2a 20 66 6f 72 6d 61 74 2e 0a 2a 2a 0a  d.** format..**.
12cc0 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73  ** P4 may be a s
12cd0 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32  tring that is P2
12ce0 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
12cf0 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72 61  .  The nth chara
12d00 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
12d10 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
12d20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
12d30 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
12d40 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
12d50 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20  nth.** field of 
12d60 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a  the index key..*
12d70 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67  *.** The mapping
12d80 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20   from character 
12d90 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20 67  to affinity is g
12da0 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49  iven by the SQLI
12db0 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f  TE_AFF_.** macro
12dc0 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c  s defined in sql
12dd0 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20  iteInt.h..**.** 
12de0 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68  If P4 is NULL th
12df0 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65  en all index fie
12e00 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66 66  lds have the aff
12e10 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63  inity NONE..*/.c
12e20 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  ase OP_MakeRecor
12e30 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52  d: {.  u8 *zNewR
12e40 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f 2a  ecord;        /*
12e50 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f 6c   A buffer to hol
12e60 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74  d the data for t
12e70 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f  he new record */
12e80 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20  .  Mem *pRec;   
12e90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
12ea0 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20   new record */. 
12eb0 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20   u64 nData;     
12ec0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12ed0 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
12ee0 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e  ta space */.  in
12ef0 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20  t nHdr;         
12f00 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12f10 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65  f bytes of heade
12f20 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34  r space */.  i64
12f30 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20   nByte;         
12f40 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63      /* Data spac
12f50 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  e required for t
12f60 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  his record */.  
12f70 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20  int nZero;      
12f80 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
12f90 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61   of zero bytes a
12fa0 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
12fb0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
12fc0 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20   nVarint;       
12fd0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
12fe0 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72 69   bytes in a vari
12ff0 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69  nt */.  u32 seri
13000 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f  al_type;       /
13010 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a  * Type field */.
13020 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20    Mem *pData0;  
13030 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
13040 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f  t field to be co
13050 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20  mbined into the 
13060 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
13070 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20  *pLast;         
13080 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64     /* Last field
13090 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
130a0 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20  /.  int nField; 
130b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
130c0 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
130d0 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
130e0 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74    char *zAffinit
130f0 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  y;       /* The 
13100 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20  affinity string 
13110 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a  for the record *
13120 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72  /.  int file_for
13130 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  mat;       /* Fi
13140 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65  le format to use
13150 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f   for encoding */
13160 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
13170 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
13180 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52  ce used in zNewR
13190 65 63 6f 72 64 5b 5d 20 2a 2f 0a 20 20 69 6e 74  ecord[] */.  int
131a0 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20   len;           
131b0 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
131c0 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f   a field */..  /
131d0 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72  * Assuming the r
131e0 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e  ecord contains N
131f0 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63   fields, the rec
13200 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73  ord format looks
13210 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a  .  ** like this:
13220 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d  .  **.  ** -----
13230 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13240 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13250 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13260 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13270 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73  ---.  ** | hdr-s
13280 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74  ize | type 0 | t
13290 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79  ype 1 | ... | ty
132a0 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c  pe N-1 | data0 |
132b0 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20   ... | data N-1 
132c0 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d  | .  ** --------
132d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
132e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
132f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13300 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13310 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28  .  **.  ** Data(
13320 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d  0) is taken from
13330 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 44   register P1.  D
13340 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f  ata(1) comes fro
13350 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a  m register P1+1.
13360 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74    ** and so frot
13370 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63  h..  **.  ** Eac
13380 68 20 74 79 70 65 20 66 69 65 6c 64 20 69 73 20  h type field is 
13390 61 20 76 61 72 69 6e 74 20 72 65 70 72 65 73 65  a varint represe
133a0 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c  nting the serial
133b0 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20   type of the .  
133c0 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
133d0 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73   data element (s
133e0 65 65 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  ee sqlite3VdbeSe
133f0 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65  rialType()). The
13400 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66  .  ** hdr-size f
13410 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76  ield is also a v
13420 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74  arint which is t
13430 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74  he offset from t
13440 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a  he beginning.  *
13450 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  * of the record 
13460 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20  to data0..  */. 
13470 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20   nData = 0;     
13480 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13490 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73   bytes of data s
134a0 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d  pace */.  nHdr =
134b0 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   0;          /* 
134c0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
134d0 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20  of header space 
134e0 2a 2f 0a 20 20 6e 42 79 74 65 20 3d 20 30 3b 20  */.  nByte = 0; 
134f0 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20          /* Data 
13500 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66  space required f
13510 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a  or this record *
13520 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20  /.  nZero = 0;  
13530 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13540 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61   of zero bytes a
13550 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
13560 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69   record */.  nFi
13570 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  eld = pOp->p1;. 
13580 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70   zAffinity = pOp
13590 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74  ->p4.z;.  assert
135a0 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20 70 4f  ( nField>0 && pO
135b0 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
135c0 70 32 2b 6e 46 69 65 6c 64 3c 3d 70 2d 3e 6e 4d  p2+nField<=p->nM
135d0 65 6d 2b 31 20 29 3b 0a 20 20 70 44 61 74 61 30  em+1 );.  pData0
135e0 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d   = &aMem[nField]
135f0 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  ;.  nField = pOp
13600 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20  ->p2;.  pLast = 
13610 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31  &pData0[nField-1
13620 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74  ];.  file_format
13630 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69   = p->minWriteFi
13640 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20  leFormat;..  /* 
13650 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65  Loop through the
13660 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77   elements that w
13670 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20  ill make up the 
13680 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65  record to figure
13690 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75  .  ** out how mu
136a0 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75  ch space is requ
136b0 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77  ired for the new
136c0 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20   record..  */.  
136d0 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b  for(pRec=pData0;
136e0 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52   pRec<=pLast; pR
136f0 65 63 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 7a  ec++){.    if( z
13700 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  Affinity ){.    
13710 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
13720 70 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b  pRec, zAffinity[
13730 70 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e  pRec-pData0], en
13740 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 7d 0a 20  coding);.    }. 
13750 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
13760 67 73 26 4d 45 4d 5f 5a 65 72 6f 20 26 26 20 70  gs&MEM_Zero && p
13770 52 65 63 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20 20  Rec->n>0 ){.    
13780 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
13790 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29  ExpandBlob(pRec)
137a0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 72 69  ;.    }.    seri
137b0 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65  al_type = sqlite
137c0 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
137d0 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
137e0 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71  t);.    len = sq
137f0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
13800 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  ypeLen(serial_ty
13810 70 65 29 3b 0a 20 20 20 20 6e 44 61 74 61 20 2b  pe);.    nData +
13820 3d 20 6c 65 6e 3b 0a 20 20 20 20 6e 48 64 72 20  = len;.    nHdr 
13830 2b 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  += sqlite3Varint
13840 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
13850 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e  ;.    if( pRec->
13860 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
13870 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c   ){.      /* Onl
13880 79 20 70 75 72 65 20 7a 65 72 6f 2d 66 69 6c 6c  y pure zero-fill
13890 65 64 20 42 4c 4f 42 73 20 63 61 6e 20 62 65 20  ed BLOBs can be 
138a0 69 6e 70 75 74 20 74 6f 20 74 68 69 73 20 4f 70  input to this Op
138b0 63 6f 64 65 2e 0a 20 20 20 20 20 20 2a 2a 20 57  code..      ** W
138c0 65 20 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62  e do not allow b
138d0 6c 6f 62 73 20 77 69 74 68 20 61 20 70 72 65 66  lobs with a pref
138e0 69 78 20 61 6e 64 20 61 20 7a 65 72 6f 2d 66 69  ix and a zero-fi
138f0 6c 6c 65 64 20 74 61 69 6c 2e 20 2a 2f 0a 20 20  lled tail. */.  
13900 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65      nZero += pRe
13910 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  c->u.nZero;.    
13920 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e 20 29 7b  }else if( len ){
13930 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30  .      nZero = 0
13940 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
13950 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74 69 61  * Add the initia
13960 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e 74 20  l header varint 
13970 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73 69  and total the si
13980 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d 20  ze */.  nHdr += 
13990 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65  nVarint = sqlite
139a0 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
139b0 3b 0a 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c  ;.  if( nVarint<
139c0 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
139d0 28 6e 48 64 72 29 20 29 7b 0a 20 20 20 20 6e 48  (nHdr) ){.    nH
139e0 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74  dr++;.  }.  nByt
139f0 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 2d 6e  e = nHdr+nData-n
13a00 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42 79 74  Zero;.  if( nByt
13a10 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  e>db->aLimit[SQL
13a20 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
13a30 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
13a40 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  o_big;.  }..  /*
13a50 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f   Make sure the o
13a60 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68  utput register h
13a70 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67  as a buffer larg
13a80 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72  e enough to stor
13a90 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20  e .  ** the new 
13aa0 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70  record. The outp
13ab0 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70  ut register (pOp
13ac0 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c  ->p3) is not all
13ad0 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20  owed to.  ** be 
13ae0 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  one of the input
13af0 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61   registers (beca
13b00 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  use the followin
13b10 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73  g call to.  ** s
13b20 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
13b30 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65  w() could clobbe
13b40 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f  r the value befo
13b50 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a  re it is used)..
13b60 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
13b70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c  Op->p3<pOp->p1 |
13b80 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
13b90 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  p1+pOp->p2 );.  
13ba0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
13bb0 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 73 71 6c  ->p3];.  if( sql
13bc0 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
13bd0 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65  pOut, (int)nByte
13be0 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  , 0) ){.    goto
13bf0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a   no_mem;.  }.  z
13c00 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20  NewRecord = (u8 
13c10 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a  *)pOut->z;..  /*
13c20 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72   Write the recor
13c30 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61  d */.  i = putVa
13c40 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72  rint32(zNewRecor
13c50 64 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28  d, nHdr);.  for(
13c60 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65  pRec=pData0; pRe
13c70 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b  c<=pLast; pRec++
13c80 29 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79  ){.    serial_ty
13c90 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  pe = sqlite3Vdbe
13ca0 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c  SerialType(pRec,
13cb0 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20   file_format);. 
13cc0 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e     i += putVarin
13cd0 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  t32(&zNewRecord[
13ce0 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29  i], serial_type)
13cf0 3b 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c  ;      /* serial
13d00 20 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66   type */.  }.  f
13d10 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20  or(pRec=pData0; 
13d20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65  pRec<=pLast; pRe
13d30 63 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c  c++){  /* serial
13d40 20 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b   data */.    i +
13d50 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
13d60 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f  ialPut(&zNewReco
13d70 72 64 5b 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79  rd[i], (int)(nBy
13d80 74 65 2d 69 29 2c 20 70 52 65 63 2c 66 69 6c 65  te-i), pRec,file
13d90 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20  _format);.  }.  
13da0 61 73 73 65 72 74 28 20 69 3d 3d 6e 42 79 74 65  assert( i==nByte
13db0 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   );..  assert( p
13dc0 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
13dd0 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
13de0 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74    pOut->n = (int
13df0 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e  )nByte;.  pOut->
13e00 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
13e10 20 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f   | MEM_Dyn;.  pO
13e20 75 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20  ut->xDel = 0;.  
13e30 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20  if( nZero ){.   
13e40 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d   pOut->u.nZero =
13e50 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74   nZero;.    pOut
13e60 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a  ->flags |= MEM_Z
13e70 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  ero;.  }.  pOut-
13e80 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
13e90 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20  F8;  /* In case 
13ea0 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72  the blob is ever
13eb0 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65   converted to te
13ec0 78 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52  xt */.  REGISTER
13ed0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
13ee0 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f  pOut);.  UPDATE_
13ef0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
13f00 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
13f10 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74  /* Opcode: Count
13f20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
13f30 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d  ** Store the num
13f40 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28  ber of entries (
13f50 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
13f60 29 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  ) in the table o
13f70 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e  r index .** open
13f80 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20  ed by cursor P1 
13f90 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
13fa0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
13fb0 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54  _OMIT_BTREECOUNT
13fc0 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20  .case OP_Count: 
13fd0 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74  {         /* out
13fe0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
13ff0 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20    i64 nEntry;.  
14000 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
14010 0a 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61  ..  pCrsr = p->a
14020 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70  pCsr[pOp->p1]->p
14030 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43  Cursor;.  if( pC
14040 72 73 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  rsr ){.    rc = 
14050 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e  sqlite3BtreeCoun
14060 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79  t(pCrsr, &nEntry
14070 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
14080 6e 45 6e 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a  nEntry = 0;.  }.
14090 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45    pOut->u.i = nE
140a0 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ntry;.  break;.}
140b0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
140c0 64 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31  de: Savepoint P1
140d0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
140e0 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72  Open, release or
140f0 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61   rollback the sa
14100 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79  vepoint named by
14110 20 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64   parameter P4, d
14120 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74  epending.** on t
14130 68 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20  he value of P1. 
14140 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61  To open a new sa
14150 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20  vepoint, P1==0. 
14160 54 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d  To release (comm
14170 69 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69  it) an.** existi
14180 6e 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31  ng savepoint, P1
14190 3d 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62  ==1, or to rollb
141a0 61 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20  ack an existing 
141b0 73 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e  savepoint P1==2.
141c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65  .*/.case OP_Save
141d0 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70  point: {.  int p
141e0 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1;              
141f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
14200 6c 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e  lue of P1 operan
14210 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61  d */.  char *zNa
14220 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
14230 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
14240 66 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20  f savepoint */. 
14250 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61   int nName;.  Sa
14260 76 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20  vepoint *pNew;. 
14270 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76   Savepoint *pSav
14280 65 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f  epoint;.  Savepo
14290 69 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74  int *pTmp;.  int
142a0 20 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69   iSavepoint;.  i
142b0 6e 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70  nt ii;..  p1 = p
142c0 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20  Op->p1;.  zName 
142d0 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20  = pOp->p4.z;..  
142e0 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74  /* Assert that t
142f0 68 65 20 70 31 20 70 61 72 61 6d 65 74 65 72 20  he p1 parameter 
14300 69 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74  is valid. Also t
14310 68 61 74 20 69 66 20 74 68 65 72 65 20 69 73 20  hat if there is 
14320 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61  no open.  ** tra
14330 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74  nsaction, then t
14340 68 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61  here cannot be a
14350 6e 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a  ny savepoints. .
14360 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64    */.  assert( d
14370 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30  b->pSavepoint==0
14380 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d   || db->autoComm
14390 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  it==0 );.  asser
143a0 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  t( p1==SAVEPOINT
143b0 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45  _BEGIN||p1==SAVE
143c0 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70  POINT_RELEASE||p
143d0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
143e0 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72  LBACK );.  asser
143f0 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t( db->pSavepoin
14400 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73  t || db->isTrans
14410 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d  actionSavepoint=
14420 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
14430 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
14440 75 6e 74 28 64 62 29 20 29 3b 0a 0a 20 20 69 66  unt(db) );..  if
14450 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
14460 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28  BEGIN ){.    if(
14470 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e   db->writeVdbeCn
14480 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  t>0 ){.      /* 
14490 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  A new savepoint 
144a0 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65  cannot be create
144b0 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  d if there are a
144c0 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20  ctive write .   
144d0 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73     ** statements
144e0 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64   (i.e. open read
144f0 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74  /write increment
14500 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29  al blob handles)
14510 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
14520 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
14530 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
14540 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  b, "cannot open 
14550 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20  savepoint - ".  
14560 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
14570 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
14580 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  s");.      rc = 
14590 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
145a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e   }else{.      nN
145b0 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72  ame = sqlite3Str
145c0 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 20  len30(zName);.. 
145d0 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61       /* Create a
145e0 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73   new savepoint s
145f0 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20  tructure. */.   
14600 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65     pNew = sqlite
14610 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c  3DbMallocRaw(db,
14620 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e   sizeof(Savepoin
14630 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20  t)+nName+1);.   
14640 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20     if( pNew ){. 
14650 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61         pNew->zNa
14660 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e  me = (char *)&pN
14670 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d  ew[1];.        m
14680 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d  emcpy(pNew->zNam
14690 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b  e, zName, nName+
146a0 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20  1);.    .       
146b0 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
146c0 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  no open transact
146d0 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74  ion, then mark t
146e0 68 69 73 20 61 73 20 61 20 73 70 65 63 69 61 6c  his as a special
146f0 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61  .        ** "tra
14700 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
14710 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  nt". */.        
14720 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  if( db->autoComm
14730 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  it ){.          
14740 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
14750 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62   0;.          db
14760 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
14770 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20  avepoint = 1;.  
14780 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
14790 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
147a0 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20  point++;.       
147b0 20 7d 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20   }.    .        
147c0 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20  /* Link the new 
147d0 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74  savepoint into t
147e0 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
147f0 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20  le's list. */.  
14800 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78        pNew->pNex
14810 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  t = db->pSavepoi
14820 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  nt;.        db->
14830 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65  pSavepoint = pNe
14840 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  w;.        pNew-
14850 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d  >nDeferredCons =
14860 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
14870 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ns;.      }.    
14880 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  }.  }else{.    i
14890 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a  Savepoint = 0;..
148a0 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20      /* Find the 
148b0 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  named savepoint.
148c0 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
148d0 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20  such savepoint, 
148e0 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61  then an.    ** a
148f0 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72  n error is retur
14900 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ned to the user.
14910 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20    */.    for(.  
14920 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d      pSavepoint =
14930 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
14940 20 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69   .      pSavepoi
14950 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72  nt && sqlite3Str
14960 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d  ICmp(pSavepoint-
14970 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a  >zName, zName);.
14980 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
14990 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
149a0 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20  Next.    ){.    
149b0 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a    iSavepoint++;.
149c0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70      }.    if( !p
149d0 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
149e0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
149f0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
14a00 20 64 62 2c 20 22 6e 6f 20 73 75 63 68 20 73 61   db, "no such sa
14a10 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e  vepoint: %s", zN
14a20 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ame);.      rc =
14a30 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
14a40 20 20 20 7d 65 6c 73 65 20 69 66 28 20 0a 20 20     }else if( .  
14a50 20 20 20 20 20 20 64 62 2d 3e 77 72 69 74 65 56        db->writeV
14a60 64 62 65 43 6e 74 3e 30 20 7c 7c 20 28 70 31 3d  dbeCnt>0 || (p1=
14a70 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
14a80 41 43 4b 20 26 26 20 64 62 2d 3e 61 63 74 69 76  ACK && db->activ
14a90 65 56 64 62 65 43 6e 74 3e 31 29 20 0a 20 20 20  eVdbeCnt>1) .   
14aa0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20   ){.      /* It 
14ab0 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20  is not possible 
14ac0 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d  to release (comm
14ad0 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20  it) a savepoint 
14ae0 69 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20  if there are .  
14af0 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72      ** active wr
14b00 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  ite statements. 
14b10 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  It is not possib
14b20 6c 65 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  le to rollback a
14b30 20 73 61 76 65 70 6f 69 6e 74 0a 20 20 20 20 20   savepoint.     
14b40 20 2a 2a 20 69 66 20 74 68 65 72 65 20 61 72 65   ** if there are
14b50 20 61 6e 79 20 61 63 74 69 76 65 20 73 74 61 74   any active stat
14b60 65 6d 65 6e 74 73 20 61 74 20 61 6c 6c 2e 0a 20  ements at all.. 
14b70 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
14b80 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
14b90 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
14ba0 0a 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74  .        "cannot
14bb0 20 25 73 20 73 61 76 65 70 6f 69 6e 74 20 2d 20   %s savepoint - 
14bc0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
14bd0 6e 20 70 72 6f 67 72 65 73 73 22 2c 0a 20 20 20  n progress",.   
14be0 20 20 20 20 20 28 70 31 3d 3d 53 41 56 45 50 4f       (p1==SAVEPO
14bf0 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 3f 20 22  INT_ROLLBACK ? "
14c00 72 6f 6c 6c 62 61 63 6b 22 3a 20 22 72 65 6c 65  rollback": "rele
14c10 61 73 65 22 29 0a 20 20 20 20 20 20 29 3b 0a 20  ase").      );. 
14c20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
14c30 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65  _BUSY;.    }else
14c40 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65  {..      /* Dete
14c50 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72  rmine whether or
14c60 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20 74   not this is a t
14c70 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
14c80 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20  oint. If so,.   
14c90 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69     ** and this i
14ca0 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  s a RELEASE comm
14cb0 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75  and, then the cu
14cc0 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
14cd0 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63  n .      ** is c
14ce0 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20  ommitted. .     
14cf0 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73   */.      int is
14d00 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53  Transaction = pS
14d10 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d  avepoint->pNext=
14d20 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e  =0 && db->isTran
14d30 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
14d40 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73 54 72  ;.      if( isTr
14d50 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d  ansaction && p1=
14d60 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
14d70 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  SE ){.        if
14d80 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  ( (rc = sqlite3V
14d90 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29  dbeCheckFk(p, 1)
14da0 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )!=SQLITE_OK ){.
14db0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76            goto v
14dc0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
14dd0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62      }.        db
14de0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31  ->autoCommit = 1
14df0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71  ;.        if( sq
14e00 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
14e10 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
14e20 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63  .          p->pc
14e30 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20 20   = pc;.         
14e40 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
14e50 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70  = 0;.          p
14e60 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
14e70 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20  TE_BUSY;.       
14e80 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
14e90 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  urn;.        }. 
14ea0 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61         db->isTra
14eb0 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
14ec0 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72  t = 0;.        r
14ed0 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20  c = p->rc;.     
14ee0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
14ef0 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d  iSavepoint = db-
14f00 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53  >nSavepoint - iS
14f10 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20  avepoint - 1;.  
14f20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20        for(ii=0; 
14f30 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b  ii<db->nDb; ii++
14f40 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
14f50 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 61  = sqlite3BtreeSa
14f60 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b  vepoint(db->aDb[
14f70 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61  ii].pBt, p1, iSa
14f80 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
14f90 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
14fa0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
14fb0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
14fc0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
14fd0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
14fe0 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
14ff0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
15000 4c 4c 42 41 43 4b 20 26 26 20 28 64 62 2d 3e 66  LLBACK && (db->f
15010 6c 61 67 73 26 53 51 4c 49 54 45 5f 49 6e 74 65  lags&SQLITE_Inte
15020 72 6e 43 68 61 6e 67 65 73 29 21 3d 30 20 29 7b  rnChanges)!=0 ){
15030 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
15040 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
15050 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
15060 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
15070 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63  3ResetInternalSc
15080 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20 20  hema(db, 0);.   
15090 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
150a0 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72   .      /* Regar
150b0 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
150c0 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41   this is a RELEA
150d0 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20  SE or ROLLBACK, 
150e0 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20  destroy all .   
150f0 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73     ** savepoints
15100 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f   nested inside o
15110 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  f the savepoint 
15120 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
15130 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c  n. */.      whil
15140 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  e( db->pSavepoin
15150 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b  t!=pSavepoint ){
15160 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20  .        pTmp = 
15170 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
15180 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
15190 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70  epoint = pTmp->p
151a0 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71  Next;.        sq
151b0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
151c0 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64  pTmp);.        d
151d0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b  b->nSavepoint--;
151e0 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
151f0 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20 52 45  /* If it is a RE
15200 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74  LEASE, then dest
15210 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e  roy the savepoin
15220 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
15230 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f   on .      ** to
15240 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20 52 4f  o. If it is a RO
15250 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20  LLBACK TO, then 
15260 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  set the number o
15270 66 20 64 65 66 65 72 72 65 64 20 0a 20 20 20 20  f deferred .    
15280 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20    ** constraint 
15290 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65  violations prese
152a0 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
152b0 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  se to the value 
152c0 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20  stored.      ** 
152d0 77 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69  when the savepoi
152e0 6e 74 20 77 61 73 20 63 72 65 61 74 65 64 2e 20  nt was created. 
152f0 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31   */.      if( p1
15300 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
15310 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ASE ){.        a
15320 73 73 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e  ssert( pSavepoin
15330 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t==db->pSavepoin
15340 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  t );.        db-
15350 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53  >pSavepoint = pS
15360 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b  avepoint->pNext;
15370 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
15380 44 62 46 72 65 65 28 64 62 2c 20 70 53 61 76 65  DbFree(db, pSave
15390 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
153a0 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
153b0 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  on ){.          
153c0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d  db->nSavepoint--
153d0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
153e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
153f0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
15400 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  ns = pSavepoint-
15410 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
15420 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
15430 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  }..  break;.}../
15440 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f  * Opcode: AutoCo
15450 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  mmit P1 P2 * * *
15460 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64  .**.** Set the d
15470 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d  atabase auto-com
15480 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28  mit flag to P1 (
15490 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69  1 or 0). If P2 i
154a0 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20  s true, roll.** 
154b0 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74  back any current
154c0 6c 79 20 61 63 74 69 76 65 20 62 74 72 65 65 20  ly active btree 
154d0 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66  transactions. If
154e0 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61   there are any a
154f0 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70  ctive.** VMs (ap
15500 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e  art from this on
15510 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42  e), then a ROLLB
15520 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f  ACK fails.  A CO
15530 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a  MMIT fails if.**
15540 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
15550 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72  e writing VMs or
15560 20 61 63 74 69 76 65 20 56 4d 73 20 74 68 61 74   active VMs that
15570 20 75 73 65 20 73 68 61 72 65 64 20 63 61 63 68   use shared cach
15580 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  e..**.** This in
15590 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73  struction causes
155a0 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e   the VM to halt.
155b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f  .*/.case OP_Auto
155c0 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20  Commit: {.  int 
155d0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
155e0 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61  t;.  int iRollba
155f0 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e  ck;.  int turnOn
15600 41 43 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75  AC;..  desiredAu
15610 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e  toCommit = pOp->
15620 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20  p1;.  iRollback 
15630 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 74 75 72  = pOp->p2;.  tur
15640 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72 65 64 41  nOnAC = desiredA
15650 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64 62  utoCommit && !db
15660 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  ->autoCommit;.  
15670 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
15680 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20  utoCommit==1 || 
15690 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
156a0 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
156b0 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
156c0 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62  mit==1 || iRollb
156d0 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ack==0 );.  asse
156e0 72 74 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64  rt( db->activeVd
156f0 62 65 43 6e 74 3e 30 20 29 3b 20 20 2f 2a 20 41  beCnt>0 );  /* A
15700 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65  t least this one
15710 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f   VM is active */
15720 0a 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43  ..  if( turnOnAC
15730 20 26 26 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26   && iRollback &&
15740 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43   db->activeVdbeC
15750 6e 74 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49  nt>1 ){.    /* I
15760 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
15770 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20  on implements a 
15780 52 4f 4c 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68  ROLLBACK and oth
15790 65 72 20 56 4d 73 20 61 72 65 0a 20 20 20 20 2a  er VMs are.    *
157a0 2a 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c  * still running,
157b0 20 61 6e 64 20 61 20 74 72 61 6e 73 61 63 74 69   and a transacti
157c0 6f 6e 20 69 73 20 61 63 74 69 76 65 2c 20 72 65  on is active, re
157d0 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e  turn an error in
157e0 64 69 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20  dicating.    ** 
157f0 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
15800 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
15810 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a   first. .    */.
15820 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
15830 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
15840 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f  , db, "cannot ro
15850 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69  llback transacti
15860 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22  on - ".        "
15870 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
15880 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
15890 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
158a0 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  SY;.  }else if( 
158b0 74 75 72 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f  turnOnAC && !iRo
158c0 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 77 72  llback && db->wr
158d0 69 74 65 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a  iteVdbeCnt>0 ){.
158e0 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
158f0 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65  nstruction imple
15900 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61  ments a COMMIT a
15910 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65  nd other VMs are
15920 20 77 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20   writing.    ** 
15930 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
15940 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
15950 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75  the other VMs mu
15960 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73  st complete firs
15970 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  t. .    */.    s
15980 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
15990 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
159a0 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20   "cannot commit 
159b0 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a  transaction - ".
159c0 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
159d0 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
159e0 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20  ess");.    rc = 
159f0 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d  SQLITE_BUSY;.  }
15a00 65 6c 73 65 20 69 66 28 20 64 65 73 69 72 65 64  else if( desired
15a10 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e  AutoCommit!=db->
15a20 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
15a30 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20    if( iRollback 
15a40 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
15a50 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
15a60 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73  it==1 );.      s
15a70 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
15a80 6c 28 64 62 29 3b 0a 20 20 20 20 20 20 64 62 2d  l(db);.      db-
15a90 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b  >autoCommit = 1;
15aa0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28  .    }else if( (
15ab0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
15ac0 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d  CheckFk(p, 1))!=
15ad0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
15ae0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
15af0 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  urn;.    }else{.
15b00 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
15b10 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73 69 72  mmit = (u8)desir
15b20 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
15b30 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
15b40 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49  dbeHalt(p)==SQLI
15b50 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
15b60 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20     p->pc = pc;. 
15b70 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
15b80 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64  ommit = (u8)(1-d
15b90 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
15ba0 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63  );.        p->rc
15bb0 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
15bc0 55 53 59 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  USY;.        got
15bd0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
15be0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
15bf0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
15c00 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20  atement==0 );.  
15c10 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61    sqlite3CloseSa
15c20 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20  vepoints(db);.  
15c30 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
15c40 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
15c50 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  rc = SQLITE_DONE
15c60 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
15c70 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
15c80 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20  RROR;.    }.    
15c90 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
15ca0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
15cb0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
15cc0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
15cd0 0a 20 20 20 20 20 20 20 20 28 21 64 65 73 69 72  .        (!desir
15ce0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63  edAutoCommit)?"c
15cf0 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72  annot start a tr
15d00 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e  ansaction within
15d10 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a   a transaction":
15d20 28 0a 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c  (.        (iRoll
15d30 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f  back)?"cannot ro
15d40 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e  llback - no tran
15d50 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
15d60 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  e":.            
15d70 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63         "cannot c
15d80 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73  ommit - no trans
15d90 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
15da0 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20  "));.         . 
15db0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
15dc0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61  RROR;.  }.  brea
15dd0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
15de0 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20   Transaction P1 
15df0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42  P2 * * *.**.** B
15e00 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  egin a transacti
15e10 6f 6e 2e 20 20 54 68 65 20 74 72 61 6e 73 61 63  on.  The transac
15e20 74 69 6f 6e 20 65 6e 64 73 20 77 68 65 6e 20 61  tion ends when a
15e30 20 43 6f 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c 62   Commit or Rollb
15e40 61 63 6b 0a 2a 2a 20 6f 70 63 6f 64 65 20 69 73  ack.** opcode is
15e50 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 20 20 44   encountered.  D
15e60 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20  epending on the 
15e70 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 73 65 74 74  ON CONFLICT sett
15e80 69 6e 67 2c 20 74 68 65 0a 2a 2a 20 74 72 61 6e  ing, the.** tran
15e90 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 61 6c  saction might al
15ea0 73 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  so be rolled bac
15eb0 6b 20 69 66 20 61 6e 20 65 72 72 6f 72 20 69 73  k if an error is
15ec0 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a   encountered..**
15ed0 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
15ee0 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
15ef0 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63  ase file on whic
15f00 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  h the transactio
15f10 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e  n is.** started.
15f20 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68 65    Index 0 is the
15f30 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
15f40 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20  ile and index 1 
15f50 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75  is the.** file u
15f60 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  sed for temporar
15f70 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63  y tables.  Indic
15f80 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20  es of 2 or more 
15f90 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20  are used for.** 
15fa0 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
15fb0 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20  es..**.** If P2 
15fc0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
15fd0 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  n a write-transa
15fe0 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
15ff0 2e 20 20 41 20 52 45 53 45 52 56 45 44 20 6c 6f  .  A RESERVED lo
16000 63 6b 20 69 73 0a 2a 2a 20 6f 62 74 61 69 6e 65  ck is.** obtaine
16010 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  d on the databas
16020 65 20 66 69 6c 65 20 77 68 65 6e 20 61 20 77 72  e file when a wr
16030 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite-transaction 
16040 69 73 20 73 74 61 72 74 65 64 2e 20 20 4e 6f 0a  is started.  No.
16050 2a 2a 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ** other process
16060 20 63 61 6e 20 73 74 61 72 74 20 61 6e 6f 74 68   can start anoth
16070 65 72 20 77 72 69 74 65 20 74 72 61 6e 73 61 63  er write transac
16080 74 69 6f 6e 20 77 68 69 6c 65 20 74 68 69 73 20  tion while this 
16090 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a  transaction is.*
160a0 2a 20 75 6e 64 65 72 77 61 79 2e 20 20 53 74 61  * underway.  Sta
160b0 72 74 69 6e 67 20 61 20 77 72 69 74 65 20 74 72  rting a write tr
160c0 61 6e 73 61 63 74 69 6f 6e 20 61 6c 73 6f 20 63  ansaction also c
160d0 72 65 61 74 65 73 20 61 20 72 6f 6c 6c 62 61 63  reates a rollbac
160e0 6b 20 6a 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20  k journal. A.** 
160f0 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
16100 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
16110 64 20 62 65 66 6f 72 65 20 61 6e 79 20 63 68 61  d before any cha
16120 6e 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65  nges can be made
16130 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   to the.** datab
16140 61 73 65 2e 20 20 49 66 20 50 32 20 69 73 20 32  ase.  If P2 is 2
16150 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 65 6e   or greater then
16160 20 61 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f   an EXCLUSIVE lo
16170 63 6b 20 69 73 20 61 6c 73 6f 20 6f 62 74 61 69  ck is also obtai
16180 6e 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 66 69  ned.** on the fi
16190 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77  le..**.** If a w
161a0 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
161b0 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64 20   is started and 
161c0 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d  the Vdbe.usesStm
161d0 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73  tJournal flag is
161e0 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20 66  .** true (this f
161f0 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74 68  lag is set if th
16200 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66  e Vdbe may modif
16210 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  y more than one 
16220 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74  row and may.** t
16230 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
16240 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74  ception), a stat
16250 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
16260 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70  n may also be op
16270 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70  ened..** More sp
16280 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74  ecifically, a st
16290 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
162a0 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66  ion is opened if
162b0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
162c0 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  * connection is 
162d0 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e  currently not in
162e0 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65   autocommit mode
162f0 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  , or if there ar
16300 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76  e other.** activ
16310 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20  e statements. A 
16320 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
16330 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65  ction allows the
16340 20 61 66 66 65 63 74 73 20 6f 66 20 74 68 69 73   affects of this
16350 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72  .** VDBE to be r
16360 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72  olled back after
16370 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75   an error withou
16380 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c  t having to roll
16390 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74   back the.** ent
163a0 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ire transaction.
163b0 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20   If no error is 
163c0 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65  encountered, the
163d0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
163e0 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61  action.** will a
163f0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d  utomatically com
16400 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44 42  mit when the VDB
16410 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49  E halts..**.** I
16420 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68  f P2 is zero, th
16430 65 6e 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 69  en a read-lock i
16440 73 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68  s obtained on th
16450 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
16460 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e  .*/.case OP_Tran
16470 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72  saction: {.  Btr
16480 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65  ee *pBt;..  asse
16490 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
164a0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
164b0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
164c0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
164d0 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  1<<pOp->p1))!=0 
164e0 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
164f0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
16500 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20  ..  if( pBt ){. 
16510 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
16520 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
16530 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  Bt, pOp->p2);.  
16540 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
16550 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70  _BUSY ){.      p
16560 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
16570 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
16580 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
16590 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
165a0 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  n;.    }.    if(
165b0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
165c0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
165d0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
165e0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
165f0 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73  pOp->p2 && p->us
16600 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20  esStmtJournal . 
16610 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f      && (db->auto
16620 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
16630 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31  >activeVdbeCnt>1
16640 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  ) .    ){.      
16650 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
16660 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
16670 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  t) );.      if( 
16680 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
16690 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
166a0 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
166b0 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61  nt>=0 && db->nSa
166c0 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20  vepoint>=0 );.  
166d0 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65        db->nState
166e0 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20  ment++; .       
166f0 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d   p->iStatement =
16700 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20   db->nSavepoint 
16710 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  + db->nStatement
16720 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
16730 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
16740 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20  eBeginStmt(pBt, 
16750 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a  p->iStatement);.
16760 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20  .      /* Store 
16770 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
16780 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
16790 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72  e handles deferr
167a0 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20  ed constraint.  
167b0 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20      ** counter. 
167c0 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  If the statement
167d0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65   transaction nee
167e0 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ds to be rolled 
167f0 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74  back,.      ** t
16800 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  he value of this
16810 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74   counter needs t
16820 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f  o be restored to
16830 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e  o.  */.      p->
16840 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64  nStmtDefCons = d
16850 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
16860 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
16870 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
16880 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31  e: ReadCookie P1
16890 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
168a0 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d   Read cookie num
168b0 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61  ber P3 from data
168c0 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69 74  base P1 and writ
168d0 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74  e it into regist
168e0 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20  er P2..** P3==1 
168f0 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
16900 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73  rsion.  P3==2 is
16910 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
16920 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69  rmat..** P3==3 i
16930 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
16940 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69  d pager cache si
16950 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
16960 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74  .  P1==0 is.** t
16970 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
16980 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
16990 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
169a0 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
169b0 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  re.** temporary 
169c0 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  tables..**.** Th
169d0 65 72 65 20 6d 75 73 74 20 62 65 20 61 20 72 65  ere must be a re
169e0 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad-lock on the d
169f0 61 74 61 62 61 73 65 20 28 65 69 74 68 65 72 20  atabase (either 
16a00 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  a transaction.**
16a10 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
16a20 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20 62   or there must b
16a30 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72  e an open cursor
16a40 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63  ) before.** exec
16a50 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  uting this instr
16a60 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
16a70 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b  OP_ReadCookie: {
16a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16a90 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
16aa0 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61  e */.  int iMeta
16ab0 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69  ;.  int iDb;.  i
16ac0 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 69  nt iCookie;..  i
16ad0 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
16ae0 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70  iCookie = pOp->p
16af0 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  3;.  assert( pOp
16b00 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p3<SQLITE_N_BT
16b10 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
16b20 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
16b30 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
16b40 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62   assert( db->aDb
16b50 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a  [iDb].pBt!=0 );.
16b60 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
16b70 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44  reeMask & (1<<iD
16b80 62 29 29 21 3d 30 20 29 3b 0a 0a 20 20 73 71 6c  b))!=0 );..  sql
16b90 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61  ite3BtreeGetMeta
16ba0 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
16bb0 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32  t, iCookie, (u32
16bc0 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f   *)&iMeta);.  pO
16bd0 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b  ut->u.i = iMeta;
16be0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
16bf0 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69  Opcode: SetCooki
16c00 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
16c10 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63  *.** Write the c
16c20 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
16c30 65 72 20 50 33 20 28 69 6e 74 65 72 70 72 65 74  er P3 (interpret
16c40 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  ed as an integer
16c50 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65  ).** into cookie
16c60 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61   number P2 of da
16c70 74 61 62 61 73 65 20 50 31 2e 20 20 50 32 3d 3d  tabase P1.  P2==
16c80 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20  1 is the schema 
16c90 76 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32  version.  .** P2
16ca0 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
16cb0 61 73 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d 3d  ase format. P2==
16cc0 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65  3 is the recomme
16cd0 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65  nded pager cache
16ce0 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73   .** size, and s
16cf0 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20  o forth.  P1==0 
16d00 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
16d10 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31  base file and P1
16d20 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20 64  ==1 is the .** d
16d30 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
16d40 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f  d to store tempo
16d50 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  rary tables..**.
16d60 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e  ** A transaction
16d70 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
16d80 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e   before executin
16d90 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
16da0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f  /.case OP_SetCoo
16db0 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  kie: {       /* 
16dc0 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62  in3 */.  Db *pDb
16dd0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
16de0 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52  >p2<SQLITE_N_BTR
16df0 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73  EE_META );.  ass
16e00 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
16e10 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
16e20 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
16e30 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
16e40 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30  (1<<pOp->p1))!=0
16e50 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
16e60 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  >aDb[pOp->p1];. 
16e70 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42   assert( pDb->pB
16e80 74 21 3d 30 20 29 3b 0a 20 20 70 49 6e 33 20 3d  t!=0 );.  pIn3 =
16e90 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
16ea0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
16eb0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33  mIntegerify(pIn3
16ec0 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65  );.  /* See note
16ed0 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69   about index shi
16ee0 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64  fting on OP_Read
16ef0 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d  Cookie */.  rc =
16f00 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64   sqlite3BtreeUpd
16f10 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74  ateMeta(pDb->pBt
16f20 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29  , pOp->p2, (int)
16f30 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66  pIn3->u.i);.  if
16f40 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
16f50 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20  _SCHEMA_VERSION 
16f60 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74  ){.    /* When t
16f70 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
16f80 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64   changes, record
16f90 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20   the new cookie 
16fa0 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20  internally */.  
16fb0 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
16fc0 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20  schema_cookie = 
16fd0 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a  (int)pIn3->u.i;.
16fe0 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
16ff0 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
17000 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69  anges;.  }else i
17010 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
17020 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b  E_FILE_FORMAT ){
17030 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63  .    /* Record c
17040 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69  hanges in the fi
17050 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20  le format */.   
17060 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
17070 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38  ile_format = (u8
17080 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a  )pIn3->u.i;.  }.
17090 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31    if( pOp->p1==1
170a0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c   ){.    /* Inval
170b0 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72  idate all prepar
170c0 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68  ed statements wh
170d0 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50 20  enever the TEMP 
170e0 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20  database.    ** 
170f0 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65  schema is change
17100 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34 34  d.  Ticket #1644
17110 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45   */.    sqlite3E
17120 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
17130 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20  tements(db);.   
17140 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b   p->expired = 0;
17150 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
17160 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 65 72 69  ./* Opcode: Veri
17170 66 79 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 2a  fyCookie P1 P2 *
17180 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65  .**.** Check the
17190 20 76 61 6c 75 65 20 6f 66 20 67 6c 6f 62 61 6c   value of global
171a0 20 64 61 74 61 62 61 73 65 20 70 61 72 61 6d 65   database parame
171b0 74 65 72 20 6e 75 6d 62 65 72 20 30 20 28 74 68  ter number 0 (th
171c0 65 0a 2a 2a 20 73 63 68 65 6d 61 20 76 65 72 73  e.** schema vers
171d0 69 6f 6e 29 20 61 6e 64 20 6d 61 6b 65 20 73 75  ion) and make su
171e0 72 65 20 69 74 20 69 73 20 65 71 75 61 6c 20 74  re it is equal t
171f0 6f 20 50 32 2e 20 20 0a 2a 2a 20 50 31 20 69 73  o P2.  .** P1 is
17200 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 75   the database nu
17210 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 30 20  mber which is 0 
17220 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  for the main dat
17230 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 61 6e  abase file.** an
17240 64 20 31 20 66 6f 72 20 74 68 65 20 66 69 6c 65  d 1 for the file
17250 20 68 6f 6c 64 69 6e 67 20 74 65 6d 70 6f 72 61   holding tempora
17260 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 73 6f  ry tables and so
17270 6d 65 20 68 69 67 68 65 72 20 6e 75 6d 62 65 72  me higher number
17280 0a 2a 2a 20 66 6f 72 20 61 75 78 69 6c 69 61 72  .** for auxiliar
17290 79 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a  y databases..**.
172a0 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68  ** The cookie ch
172b0 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65 20  anges its value 
172c0 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
172d0 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
172e0 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  nges..** This op
172f0 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20  eration is used 
17300 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20 74  to detect when t
17310 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68  hat the cookie h
17320 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e  as changed.** an
17330 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72 65  d that the curre
17340 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73  nt process needs
17350 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73   to reread the s
17360 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74  chema..**.** Eit
17370 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f  her a transactio
17380 6e 20 6e 65 65 64 73 20 74 6f 20 68 61 76 65 20  n needs to have 
17390 62 65 65 6e 20 73 74 61 72 74 65 64 20 6f 72 20  been started or 
173a0 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e 65 65 64 73  an OP_Open needs
173b0 0a 2a 2a 20 74 6f 20 62 65 20 65 78 65 63 75 74  .** to be execut
173c0 65 64 20 28 74 6f 20 65 73 74 61 62 6c 69 73 68  ed (to establish
173d0 20 61 20 72 65 61 64 20 6c 6f 63 6b 29 20 62 65   a read lock) be
173e0 66 6f 72 65 20 74 68 69 73 20 6f 70 63 6f 64 65  fore this opcode
173f0 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a   is.** invoked..
17400 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 65 72 69 66  */.case OP_Verif
17410 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e 74  yCookie: {.  int
17420 20 69 4d 65 74 61 3b 0a 20 20 42 74 72 65 65 20   iMeta;.  Btree 
17430 2a 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20  *pBt;.  assert( 
17440 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
17450 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
17460 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
17470 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
17480 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20  Op->p1))!=0 );. 
17490 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
174a0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 69  Op->p1].pBt;.  i
174b0 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 73 71  f( pBt ){.    sq
174c0 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
174d0 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48  a(pBt, BTREE_SCH
174e0 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33  EMA_VERSION, (u3
174f0 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 7d  2 *)&iMeta);.  }
17500 65 6c 73 65 7b 0a 20 20 20 20 69 4d 65 74 61 20  else{.    iMeta 
17510 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69  = 0;.  }.  if( i
17520 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 32 20 29 7b  Meta!=pOp->p2 ){
17530 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
17540 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
17550 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
17560 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74  sg = sqlite3DbSt
17570 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62 61  rDup(db, "databa
17580 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  se schema has ch
17590 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20  anged");.    /* 
175a0 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f  If the schema-co
175b0 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61  okie from the da
175c0 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63  tabase file matc
175d0 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a  hes the cookie .
175e0 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69      ** stored wi
175f0 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  th the in-memory
17600 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
17610 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64  of the schema, d
17620 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c  o.    ** not rel
17630 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66  oad the schema f
17640 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
17650 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20   file..    **.  
17660 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d    ** If virtual-
17670 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73  tables are in us
17680 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a  e, this is not j
17690 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74  ust an optimizat
176a0 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65  ion..    ** Ofte
176b0 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72  n, v-tables stor
176c0 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20  e their data in 
176d0 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61 62  other SQLite tab
176e0 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a  les, which.    *
176f0 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66 72  * are queried fr
17700 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28  om within xNext(
17710 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61  ) and other v-ta
17720 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e  ble methods usin
17730 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65  g.    ** prepare
17740 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75  d queries. If su
17750 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f 75  ch a query is ou
17760 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f  t-of-date, we do
17770 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20   not want to.   
17780 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65 20   ** discard the 
17790 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c  database schema,
177a0 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f 64   as the user cod
177b0 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74  e implementing t
177c0 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c  he.    ** v-tabl
177d0 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20  e would have to 
177e0 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68 65  be ready for the
177f0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
17800 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20  ructure itself. 
17810 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61     ** to be inva
17820 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65 72  lidated whenever
17830 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
17840 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  is called from w
17850 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20  ithin .    ** a 
17860 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a  v-table method..
17870 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64      */.    if( d
17880 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
17890 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
178a0 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b  cookie!=iMeta ){
178b0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65  .      sqlite3Re
178c0 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
178d0 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  a(db, pOp->p1);.
178e0 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74      }..    sqlit
178f0 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
17900 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
17910 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
17920 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72  SCHEMA;.  }.  br
17930 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
17940 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50  e: OpenRead P1 P
17950 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
17960 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c   Open a read-onl
17970 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65  y cursor for the
17980 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
17990 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20  whose root page 
179a0 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61  is.** P2 in a da
179b0 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68  tabase file.  Th
179c0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
179d0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
179e0 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d   P3. .** P3==0 m
179f0 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61  eans the main da
17a00 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65  tabase, P3==1 me
17a10 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ans the database
17a20 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65   used for .** te
17a30 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20  mporary tables, 
17a40 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75  and P3>1 means u
17a50 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f  sed the correspo
17a60 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a  nding attached.*
17a70 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76  * database.  Giv
17a80 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72  e the new cursor
17a90 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f   an identifier o
17aa0 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a  f P1.  The P1.**
17ab0 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74   values need not
17ac0 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62   be contiguous b
17ad0 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73  ut all P1 values
17ae0 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c   should be small
17af0 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74   integers..** It
17b00 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72   is an error for
17b10 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69   P1 to be negati
17b20 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21  ve..**.** If P5!
17b30 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65 20  =0 then use the 
17b40 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
17b50 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72 6f  ter P2 as the ro
17b60 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20  ot page, not.** 
17b70 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20  the value of P2 
17b80 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68  itself..**.** Th
17b90 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65  ere will be a re
17ba0 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad lock on the d
17bb0 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72  atabase whenever
17bc0 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20   there is an.** 
17bd0 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66  open cursor.  If
17be0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61   the database wa
17bf0 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72  s unlocked prior
17c00 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63   to this instruc
17c10 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72  tion.** then a r
17c20 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75  ead lock is acqu
17c30 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  ired as part of 
17c40 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
17c50 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63  .  A read.** loc
17c60 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70  k allows other p
17c70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61 64  rocesses to read
17c80 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62 75   the database bu
17c90 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61  t prohibits.** a
17ca0 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ny other process
17cb0 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20   from modifying 
17cc0 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
17cd0 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a  he read lock is.
17ce0 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e  ** released when
17cf0 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65   all cursors are
17d00 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69   closed.  If thi
17d10 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  s instruction at
17d20 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74  tempts.** to get
17d30 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74   a read lock but
17d40 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69   fails, the scri
17d50 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69  pt terminates wi
17d60 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f  th an.** SQLITE_
17d70 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e  BUSY error code.
17d80 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  .**.** The P4 va
17d90 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65  lue may be eithe
17da0 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34  r an integer (P4
17db0 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69  _INT32) or a poi
17dc0 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79  nter to.** a Key
17dd0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28  Info structure (
17de0 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20  P4_KEYINFO). If 
17df0 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  it is a pointer 
17e00 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a  to a KeyInfo .**
17e10 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e   structure, then
17e20 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20   said structure 
17e30 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74  defines the cont
17e40 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e  ent and collatin
17e50 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f  g .** sequence o
17e60 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e  f the index bein
17e70 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77  g opened. Otherw
17e80 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e  ise, if P4 is an
17e90 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c   integer .** val
17ea0 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f  ue, it is set to
17eb0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
17ec0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
17ed0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ble..**.** See a
17ee0 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65 2e 0a 2a  lso OpenWrite..*
17ef0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  /./* Opcode: Ope
17f00 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20  nWrite P1 P2 P3 
17f10 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  P4 P5.**.** Open
17f20 20 61 20 72 65 61 64 2f 77 72 69 74 65 20 63 75   a read/write cu
17f30 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e  rsor named P1 on
17f40 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
17f50 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a  dex whose root.*
17f60 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f  * page is P2.  O
17f70 72 20 69 66 20 50 35 21 3d 30 20 75 73 65 20 74  r if P5!=0 use t
17f80 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
17f90 67 69 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e  gister P2 to fin
17fa0 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61  d the.** root pa
17fb0 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  ge..**.** The P4
17fc0 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
17fd0 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
17fe0 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
17ff0 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
18000 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
18010 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
18020 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
18030 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
18040 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74  .** structure, t
18050 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75  hen said structu
18060 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63  re defines the c
18070 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61  ontent and colla
18080 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63  ting .** sequenc
18090 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62  e of the index b
180a0 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68  eing opened. Oth
180b0 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73  erwise, if P4 is
180c0 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20   an integer .** 
180d0 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74  value, it is set
180e0 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
180f0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
18100 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68   table, or to th
18110 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64  e.** largest ind
18120 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e  ex of any column
18130 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
18140 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75  at is actually u
18150 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  sed..**.** This 
18160 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b  instruction work
18170 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e  s just like Open
18180 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61 74  Read except that
18190 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75   it opens the cu
181a0 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f  rsor.** in read/
181b0 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72  write mode.  For
181c0 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20   a given table, 
181d0 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65  there can be one
181e0 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e   or more read-on
181f0 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72  ly.** cursors or
18200 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77   a single read/w
18210 72 69 74 65 20 63 75 72 73 6f 72 20 62 75 74 20  rite cursor but 
18220 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20  not both..**.** 
18230 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61  See also OpenRea
18240 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  d..*/.case OP_Op
18250 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f  enRead:.case OP_
18260 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a 20 20 69  OpenWrite: {.  i
18270 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79  nt nField;.  Key
18280 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
18290 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20    int p2;.  int 
182a0 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61  iDb;.  int wrFla
182b0 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a  g;.  Btree *pX;.
182c0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
182d0 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a  ur;.  Db *pDb;..
182e0 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64    if( p->expired
182f0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
18300 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20 62  ITE_ABORT;.    b
18310 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69  reak;.  }..  nFi
18320 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49  eld = 0;.  pKeyI
18330 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20  nfo = 0;.  p2 = 
18340 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d  pOp->p2;.  iDb =
18350 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
18360 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
18370 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
18380 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
18390 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29  Mask & (1<<iDb))
183a0 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  !=0 );.  pDb = &
183b0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20  db->aDb[iDb];.  
183c0 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20  pX = pDb->pBt;. 
183d0 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20 29   assert( pX!=0 )
183e0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
183f0 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74  ode==OP_OpenWrit
18400 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20  e ){.    wrFlag 
18410 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 70 44 62  = 1;.    if( pDb
18420 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
18430 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57  format < p->minW
18440 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29  riteFileFormat )
18450 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72  {.      p->minWr
18460 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20  iteFileFormat = 
18470 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
18480 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d  le_format;.    }
18490 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72  .  }else{.    wr
184a0 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Flag = 0;.  }.  
184b0 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
184c0 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
184d0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
184e0 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
184f0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
18500 32 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  2];.    sqlite3V
18510 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
18520 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d  (pIn2);.    p2 =
18530 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b   (int)pIn2->u.i;
18540 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76  .    /* The p2 v
18550 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65  alue always come
18560 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f  s from a prior O
18570 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70  P_CreateTable op
18580 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20  code and.    ** 
18590 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c  that opcode will
185a0 20 61 6c 77 61 79 73 20 73 65 74 20 74 68 65 20   always set the 
185b0 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72  p2 value to 2 or
185c0 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61   more or else fa
185d0 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68  il..    ** If th
185e0 65 72 65 20 77 65 72 65 20 61 20 66 61 69 6c 75  ere were a failu
185f0 72 65 2c 20 74 68 65 20 70 72 65 70 61 72 65 64  re, the prepared
18600 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
18610 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20   have halted.   
18620 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68   ** before reach
18630 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
18640 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28  tion. */.    if(
18650 20 4e 45 56 45 52 28 70 32 3c 32 29 20 29 20 7b   NEVER(p2<2) ) {
18660 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
18670 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
18680 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
18690 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
186a0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
186b0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
186c0 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70  KEYINFO ){.    p
186d0 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
186e0 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  4.pKeyInfo;.    
186f0 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20  pKeyInfo->enc = 
18700 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20  ENC(p->db);.    
18710 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66  nField = pKeyInf
18720 6f 2d 3e 6e 46 69 65 6c 64 2b 31 3b 0a 20 20 7d  o->nField+1;.  }
18730 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34  else if( pOp->p4
18740 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
18750 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  {.    nField = p
18760 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20  Op->p4.i;.  }.  
18770 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
18780 3d 30 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 61  =0 );.  pCur = a
18790 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
187a0 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64   pOp->p1, nField
187b0 2c 20 69 44 62 2c 20 31 29 3b 0a 20 20 69 66 28  , iDb, 1);.  if(
187c0 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20   pCur==0 ) goto 
187d0 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e  no_mem;.  pCur->
187e0 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72  nullRow = 1;.  r
187f0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
18800 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77  Cursor(pX, p2, w
18810 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c  rFlag, pKeyInfo,
18820 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b   pCur->pCursor);
18830 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66  .  pCur->pKeyInf
18840 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20  o = pKeyInfo;.. 
18850 20 2f 2a 20 53 69 6e 63 65 20 69 74 20 70 65 72   /* Since it per
18860 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79 20  forms no memory 
18870 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72 20 49 4f  allocation or IO
18880 2c 20 74 68 65 20 6f 6e 6c 79 20 76 61 6c 75 65  , the only value
18890 73 20 74 68 61 74 0a 20 20 2a 2a 20 73 71 6c 69  s that.  ** sqli
188a0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29  te3BtreeCursor()
188b0 20 6d 61 79 20 72 65 74 75 72 6e 20 61 72 65 20   may return are 
188c0 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 61 6e 64  SQLITE_EMPTY and
188d0 20 53 51 4c 49 54 45 5f 4f 4b 2e 20 0a 20 20 2a   SQLITE_OK. .  *
188e0 2a 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 69  * SQLITE_EMPTY i
188f0 73 20 6f 6e 6c 79 20 72 65 74 75 72 6e 65 64 20  s only returned 
18900 77 68 65 6e 20 61 74 74 65 6d 70 74 69 6e 67 20  when attempting 
18910 74 6f 20 6f 70 65 6e 20 74 68 65 20 74 61 62 6c  to open the tabl
18920 65 0a 20 20 2a 2a 20 72 6f 6f 74 65 64 20 61 74  e.  ** rooted at
18930 20 70 61 67 65 20 31 20 6f 66 20 61 20 7a 65 72   page 1 of a zer
18940 6f 2d 62 79 74 65 20 64 61 74 61 62 61 73 65 2e  o-byte database.
18950 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 72    */.  assert( r
18960 63 3d 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59 20  c==SQLITE_EMPTY 
18970 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  || rc==SQLITE_OK
18980 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   );.  if( rc==SQ
18990 4c 49 54 45 5f 45 4d 50 54 59 20 29 7b 0a 20 20  LITE_EMPTY ){.  
189a0 20 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 20    pCur->pCursor 
189b0 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  = 0;.    rc = SQ
189c0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 0a 20 20  LITE_OK;.  }..  
189d0 2f 2a 20 53 65 74 20 74 68 65 20 56 64 62 65 43  /* Set the VdbeC
189e0 75 72 73 6f 72 2e 69 73 54 61 62 6c 65 20 61 6e  ursor.isTable an
189f0 64 20 69 73 49 6e 64 65 78 20 76 61 72 69 61 62  d isIndex variab
18a00 6c 65 73 2e 20 50 72 65 76 69 6f 75 73 20 76 65  les. Previous ve
18a10 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53  rsions of.  ** S
18a20 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63 68  QLite used to ch
18a30 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d  eck if the root-
18a40 70 61 67 65 20 66 6c 61 67 73 20 77 65 72 65 20  page flags were 
18a50 73 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69  sane at this poi
18a60 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f  nt.  ** and repo
18a70 72 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72  rt database corr
18a80 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77  uption if they w
18a90 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69  ere not, but thi
18aa0 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a  s check has.  **
18ab0 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74   since moved int
18ac0 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65  o the btree laye
18ad0 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d  r.  */  .  pCur-
18ae0 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e  >isTable = pOp->
18af0 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e  p4type!=P4_KEYIN
18b00 46 4f 3b 0a 20 20 70 43 75 72 2d 3e 69 73 49 6e  FO;.  pCur->isIn
18b10 64 65 78 20 3d 20 21 70 43 75 72 2d 3e 69 73 54  dex = !pCur->isT
18b20 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  able;.  break;.}
18b30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
18b40 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32  nEphemeral P1 P2
18b50 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70   * P4 *.**.** Op
18b60 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
18b70 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e  P1 to a transien
18b80 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  t table..** The 
18b90 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73  cursor is always
18ba0 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69   opened read/wri
18bb0 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74  te even if .** t
18bc0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
18bd0 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20   is read-only.  
18be0 54 68 65 20 74 72 61 6e 73 69 65 6e 74 20 6f 72  The transient or
18bf0 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
18c00 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74  e is deleted aut
18c10 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20  omatically when 
18c20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c  the cursor is cl
18c30 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  osed..**.** P2 i
18c40 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
18c50 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 76  columns in the v
18c60 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  irtual table..**
18c70 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   The cursor poin
18c80 74 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61  ts to a BTree ta
18c90 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64  ble if P4==0 and
18ca0 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65   to a BTree inde
18cb0 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f  x.** if P4 is no
18cc0 74 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e  t 0.  If P4 is n
18cd0 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e  ot NULL, it poin
18ce0 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  ts to a KeyInfo 
18cf0 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61  structure.** tha
18d00 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f  t defines the fo
18d10 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20  rmat of keys in 
18d20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a  the index..**.**
18d30 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 61 73   This opcode was
18d40 20 6f 6e 63 65 20 63 61 6c 6c 65 64 20 4f 70 65   once called Ope
18d50 6e 54 65 6d 70 2e 20 20 42 75 74 20 74 68 61 74  nTemp.  But that
18d60 20 63 72 65 61 74 65 64 0a 2a 2a 20 63 6f 6e 66   created.** conf
18d70 75 73 69 6f 6e 20 62 65 63 61 75 73 65 20 74 68  usion because th
18d80 65 20 74 65 72 6d 20 22 74 65 6d 70 20 74 61 62  e term "temp tab
18d90 6c 65 22 2c 20 6d 69 67 68 74 20 72 65 66 65 72  le", might refer
18da0 20 65 69 74 68 65 72 0a 2a 2a 20 74 6f 20 61 20   either.** to a 
18db0 54 45 4d 50 20 74 61 62 6c 65 20 61 74 20 74 68  TEMP table at th
18dc0 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 6f 72 20  e SQL level, or 
18dd0 74 6f 20 61 20 74 61 62 6c 65 20 6f 70 65 6e 65  to a table opene
18de0 64 20 62 79 0a 2a 2a 20 74 68 69 73 20 6f 70 63  d by.** this opc
18df0 6f 64 65 2e 20 20 54 68 65 6e 20 74 68 69 73 20  ode.  Then this 
18e00 6f 70 63 6f 64 65 20 77 61 73 20 63 61 6c 6c 20  opcode was call 
18e10 4f 70 65 6e 56 69 72 74 75 61 6c 2e 20 20 42 75  OpenVirtual.  Bu
18e20 74 0a 2a 2a 20 74 68 61 74 20 63 72 65 61 74 65  t.** that create
18e30 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 69 74 68  d confusion with
18e40 20 74 68 65 20 77 68 6f 6c 65 20 76 69 72 74 75   the whole virtu
18e50 61 6c 2d 74 61 62 6c 65 20 69 64 65 61 2e 0a 2a  al-table idea..*
18e60 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70  /.case OP_OpenEp
18e70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62  hemeral: {.  Vdb
18e80 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20  eCursor *pCx;.  
18e90 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74  static const int
18ea0 20 6f 70 65 6e 46 6c 61 67 73 20 3d 20 0a 20 20   openFlags = .  
18eb0 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
18ec0 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20  READWRITE |.    
18ed0 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52    SQLITE_OPEN_CR
18ee0 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  EATE |.      SQL
18ef0 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49  ITE_OPEN_EXCLUSI
18f00 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  VE |.      SQLIT
18f10 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43  E_OPEN_DELETEONC
18f20 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  LOSE |.      SQL
18f30 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45  ITE_OPEN_TRANSIE
18f40 4e 54 5f 44 42 3b 0a 0a 20 20 61 73 73 65 72 74  NT_DB;..  assert
18f50 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
18f60 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
18f70 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
18f80 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20  1, pOp->p2, -1, 
18f90 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  1);.  if( pCx==0
18fa0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
18fb0 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d    pCx->nullRow =
18fc0 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   1;.  rc = sqlit
18fd0 65 33 42 74 72 65 65 46 61 63 74 6f 72 79 28 64  e3BtreeFactory(d
18fe0 62 2c 20 30 2c 20 31 2c 20 53 51 4c 49 54 45 5f  b, 0, 1, SQLITE_
18ff0 44 45 46 41 55 4c 54 5f 54 45 4d 50 5f 43 41 43  DEFAULT_TEMP_CAC
19000 48 45 5f 53 49 5a 45 2c 20 6f 70 65 6e 46 6c 61  HE_SIZE, openFla
19010 67 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  gs,.            
19020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26                 &
19030 70 43 78 2d 3e 70 42 74 29 3b 0a 20 20 69 66 28  pCx->pBt);.  if(
19040 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
19050 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
19060 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e  e3BtreeBeginTran
19070 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a  s(pCx->pBt, 1);.
19080 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51    }.  if( rc==SQ
19090 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f  LITE_OK ){.    /
190a0 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  * If a transient
190b0 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72   index is requir
190c0 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79  ed, create it by
190d0 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20   calling.    ** 
190e0 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
190f0 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20 74  teTable() with t
19100 68 65 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54  he BTREE_ZERODAT
19110 41 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20  A flag before.  
19120 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e    ** opening it.
19130 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20   If a transient 
19140 74 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65  table is require
19150 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a  d, just use the.
19160 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63      ** automatic
19170 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62  ally created tab
19180 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67  le with root-pag
19190 65 20 31 20 28 61 6e 20 49 4e 54 4b 45 59 20 74  e 1 (an INTKEY t
191a0 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20  able)..    */.  
191b0 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 70 4b    if( pOp->p4.pK
191c0 65 79 49 6e 66 6f 20 29 7b 0a 20 20 20 20 20 20  eyInfo ){.      
191d0 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20  int pgno;.      
191e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
191f0 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
19200 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
19210 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
19220 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20  Table(pCx->pBt, 
19230 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 5a 45 52  &pgno, BTREE_ZER
19240 4f 44 41 54 41 29 3b 20 0a 20 20 20 20 20 20 69  ODATA); .      i
19250 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
19260 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
19270 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52  rt( pgno==MASTER
19280 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20  _ROOT+1 );.     
19290 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
192a0 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e  treeCursor(pCx->
192b0 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a 20  pBt, pgno, 1, . 
192c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
192e0 4b 65 79 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34  KeyInfo*)pOp->p4
192f0 2e 7a 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72  .z, pCx->pCursor
19300 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e  );.        pCx->
19310 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
19320 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  p4.pKeyInfo;.   
19330 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e       pCx->pKeyIn
19340 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d  fo->enc = ENC(p-
19350 3e 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  >db);.      }.  
19360 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
19370 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
19380 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
19390 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
193a0 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f  Cx->pBt, MASTER_
193b0 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d  ROOT, 1, 0, pCx-
193c0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
193d0 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
193e0 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  1;.    }.  }.  p
193f0 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70  Cx->isIndex = !p
19400 43 78 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62  Cx->isTable;.  b
19410 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
19420 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50  de: OpenPseudo P
19430 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
19440 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
19450 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20  sor that points 
19460 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20  to a fake table 
19470 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20  that contains a 
19480 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66  single.** row of
19490 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74   data.  The cont
194a0 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20  ent of that one 
194b0 72 6f 77 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  row in the conte
194c0 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  nt of memory.** 
194d0 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e  register P2.  In
194e0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75   other words, cu
194f0 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20  rsor P1 becomes 
19500 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
19510 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f   .** MEM_Blob co
19520 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20  ntent contained 
19530 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
19540 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74  **.** A pseudo-t
19550 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20  able created by 
19560 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  this opcode is u
19570 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  sed to hold the 
19580 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
19590 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20  output from the 
195a0 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74 20 74  sorter so that t
195b0 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65  he row can be de
195c0 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a  composed into.**
195d0 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75   individual colu
195e0 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50  mns using the OP
195f0 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20  _Column opcode. 
19600 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   The OP_Column o
19610 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20  pcode.** is the 
19620 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f  only cursor opco
19630 64 65 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69  de that works wi
19640 74 68 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  th a pseudo-tabl
19650 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74  e..**.** P3 is t
19660 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65  he number of fie
19670 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  lds in the recor
19680 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  ds that will be 
19690 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65  stored by.** the
196a0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
196b0 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73  /.case OP_OpenPs
196c0 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75  eudo: {.  VdbeCu
196d0 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73  rsor *pCx;..  as
196e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
196f0 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
19700 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
19710 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20  p->p1, pOp->p3, 
19720 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43  -1, 0);.  if( pC
19730 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
19740 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52  em;.  pCx->nullR
19750 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70  ow = 1;.  pCx->p
19760 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20  seudoTableReg = 
19770 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e  pOp->p2;.  pCx->
19780 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70  isTable = 1;.  p
19790 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20 30 3b  Cx->isIndex = 0;
197a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
197b0 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31  Opcode: Close P1
197c0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
197d0 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70 72  lose a cursor pr
197e0 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20  eviously opened 
197f0 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69 73  as P1.  If P1 is
19800 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c   not.** currentl
19810 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73  y open, this ins
19820 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f  truction is a no
19830 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  -op..*/.case OP_
19840 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72  Close: {.  asser
19850 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
19860 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
19870 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  sor );.  sqlite3
19880 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70  VdbeFreeCursor(p
19890 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  , p->apCsr[pOp->
198a0 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72  p1]);.  p->apCsr
198b0 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20  [pOp->p1] = 0;. 
198c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
198d0 63 6f 64 65 3a 20 53 65 65 6b 47 65 20 50 31 20  code: SeekGe P1 
198e0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
198f0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
19900 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
19910 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
19920 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
19930 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
19940 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
19950 74 65 72 20 50 33 20 61 73 20 74 68 65 20 6b 65  ter P3 as the ke
19960 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50 31  y.  If cursor P1
19970 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
19980 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
19990 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
199a0 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
199b0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
199c0 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
199d0 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
199e0 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
199f0 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
19a00 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
19a10 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
19a20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
19a30 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
19a40 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
19a50 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
19a60 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
19a70 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67  no records .** g
19a80 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
19a90 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
19aa0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
19ab0 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
19ac0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
19ad0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
19ae0 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20  ound, Distinct, 
19af0 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20  SeekLt, SeekGt, 
19b00 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
19b10 6f 64 65 3a 20 53 65 65 6b 47 74 20 50 31 20 50  ode: SeekGt P1 P
19b20 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
19b30 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
19b40 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
19b50 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
19b60 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
19b70 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
19b80 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
19b90 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
19ba0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
19bb0 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
19bc0 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
19bd0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
19be0 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
19bf0 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
19c00 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
19c10 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
19c20 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
19c30 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
19c40 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
19c50 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
19c60 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
19c70 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
19c80 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
19c90 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
19ca0 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74  no records great
19cb0 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  er than .** the 
19cc0 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
19cd0 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
19ce0 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  p to P2..**.** S
19cf0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
19d00 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e  NotFound, Distin
19d10 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b  ct, SeekLt, Seek
19d20 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Ge, SeekLe.*/./*
19d30 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 74 20   Opcode: SeekLt 
19d40 50 31 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a  P1 P2 P3 P4 * .*
19d50 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
19d60 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
19d70 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
19d80 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
19d90 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
19da0 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
19db0 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
19dc0 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
19dd0 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
19de0 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
19df0 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
19e00 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
19e10 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
19e20 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
19e30 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
19e40 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
19e50 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
19e60 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
19e70 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
19e80 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
19e90 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
19ea0 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
19eb0 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
19ec0 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73   no records less
19ed0 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
19ee0 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
19ef0 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
19f00 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  to P2..**.** See
19f10 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
19f20 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74  tFound, Distinct
19f30 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65  , SeekGt, SeekGe
19f40 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
19f50 70 63 6f 64 65 3a 20 53 65 65 6b 4c 65 20 50 31  pcode: SeekLe P1
19f60 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
19f70 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
19f80 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
19f90 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
19fa0 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
19fb0 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
19fc0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
19fd0 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
19fe0 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
19ff0 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1a000 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1a010 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1a020 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1a030 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1a040 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1a050 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1a060 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1a070 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1a080 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
1a090 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
1a0a0 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
1a0b0 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
1a0c0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1a0d0 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
1a0e0 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1a0f0 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61  rds .** less tha
1a100 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1a110 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1a120 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1a130 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1a140 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1a150 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
1a160 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65  inct, SeekGt, Se
1a170 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a  ekGe, SeekLt.*/.
1a180 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 74 3a 20  case OP_SeekLt: 
1a190 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1a1a0 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1a1b0 53 65 65 6b 4c 65 3a 20 20 20 20 20 20 20 20 20  SeekLe:         
1a1c0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1a1d0 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 65 3a 20  case OP_SeekGe: 
1a1e0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1a1f0 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1a200 53 65 65 6b 47 74 3a 20 7b 20 20 20 20 20 20 20  SeekGt: {       
1a210 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1a220 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74    int res;.  int
1a230 20 6f 63 3b 0a 20 20 56 64 62 65 43 75 72 73 6f   oc;.  VdbeCurso
1a240 72 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65  r *pC;.  Unpacke
1a250 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74  dRecord r;.  int
1a260 20 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34 20 69   nField;.  i64 i
1a270 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Key;      /* The
1a280 20 72 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f   rowid we are to
1a290 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61   seek to */..  a
1a2a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1a2b0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1a2c0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
1a2d0 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20  ert( pOp->p2!=0 
1a2e0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1a2f0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1a300 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1a310 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
1a320 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
1a330 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
1a340 53 65 65 6b 4c 65 20 3d 3d 20 4f 50 5f 53 65 65  SeekLe == OP_See
1a350 6b 4c 74 2b 31 20 29 3b 0a 20 20 61 73 73 65 72  kLt+1 );.  asser
1a360 74 28 20 4f 50 5f 53 65 65 6b 47 65 20 3d 3d 20  t( OP_SeekGe == 
1a370 4f 50 5f 53 65 65 6b 4c 74 2b 32 20 29 3b 0a 20  OP_SeekLt+2 );. 
1a380 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1a390 47 74 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b  Gt == OP_SeekLt+
1a3a0 33 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70  3 );.  if( pC->p
1a3b0 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20  Cursor!=0 ){.   
1a3c0 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64   oc = pOp->opcod
1a3d0 65 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  e;.    pC->nullR
1a3e0 6f 77 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  ow = 0;.    if( 
1a3f0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20  pC->isTable ){. 
1a400 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75       /* The inpu
1a410 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69  t value in P3 mi
1a420 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79  ght be of any ty
1a430 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61  pe: integer, rea
1a440 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 20  l, string,.     
1a450 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c   ** blob, or NUL
1a460 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64 73  L.  But it needs
1a470 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
1a480 72 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20  r before we can 
1a490 64 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  do.      ** the 
1a4a0 73 65 65 6b 2c 20 73 6f 20 63 6f 76 65 72 74 20  seek, so covert 
1a4b0 69 74 2e 20 2a 2f 0a 20 20 20 20 20 20 70 49 6e  it. */.      pIn
1a4c0 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
1a4d0 33 5d 3b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e  3];.      applyN
1a4e0 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
1a4f0 49 6e 33 29 3b 0a 20 20 20 20 20 20 69 4b 65 79  In3);.      iKey
1a500 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
1a510 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 20 20  tValue(pIn3);.  
1a520 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1a530 61 6c 69 64 20 3d 20 30 3b 0a 0a 20 20 20 20 20  alid = 0;..     
1a540 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61   /* If the P3 va
1a550 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65  lue could not be
1a560 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
1a570 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f  an integer witho
1a580 75 74 0a 20 20 20 20 20 20 2a 2a 20 6c 6f 73 73  ut.      ** loss
1a590 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c   of information,
1a5a0 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72   then special pr
1a5b0 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75  ocessing is requ
1a5c0 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20  ired... */.     
1a5d0 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
1a5e0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
1a5f0 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  ){.        if( (
1a600 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1a610 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Real)==0 ){.  
1a620 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
1a630 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f  e P3 value canno
1a640 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
1a650 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20  nto any kind of 
1a660 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20  a number,.      
1a670 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20      ** then the 
1a680 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73  seek is not poss
1a690 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f  ible, so jump to
1a6a0 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 20   P2 */.         
1a6b0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1a6c0 31 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  1;.          bre
1a6d0 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ak;.        }.  
1a6e0 20 20 20 20 20 20 2f 2a 20 49 66 20 77 65 20 72        /* If we r
1a6f0 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c  each this point,
1a700 20 74 68 65 6e 20 74 68 65 20 50 33 20 76 61 6c   then the P3 val
1a710 75 65 20 6d 75 73 74 20 62 65 20 61 20 66 6c 6f  ue must be a flo
1a720 61 74 69 6e 67 0a 20 20 20 20 20 20 20 20 2a 2a  ating.        **
1a730 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 20 2a   point number. *
1a740 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
1a750 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1a760 20 4d 45 4d 5f 52 65 61 6c 29 21 3d 30 20 29 3b   MEM_Real)!=0 );
1a770 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 4b  ..        if( iK
1a780 65 79 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  ey==SMALLEST_INT
1a790 36 34 20 26 26 20 28 70 49 6e 33 2d 3e 72 3c 28  64 && (pIn3->r<(
1a7a0 64 6f 75 62 6c 65 29 69 4b 65 79 20 7c 7c 20 70  double)iKey || p
1a7b0 49 6e 33 2d 3e 72 3e 30 29 20 29 7b 0a 20 20 20  In3->r>0) ){.   
1a7c0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 33         /* The P3
1a7d0 20 76 61 6c 75 65 20 69 73 20 74 6f 6f 20 6c 61   value is too la
1a7e0 72 67 65 20 69 6e 20 6d 61 67 6e 69 74 75 64 65  rge in magnitude
1a7f0 20 74 6f 20 62 65 20 65 78 70 72 65 73 73 65 64   to be expressed
1a800 20 61 73 20 61 6e 0a 20 20 20 20 20 20 20 20 20   as an.         
1a810 20 2a 2a 20 69 6e 74 65 67 65 72 2e 20 2a 2f 0a   ** integer. */.
1a820 20 20 20 20 20 20 20 20 20 20 72 65 73 20 3d 20            res = 
1a830 31 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  1;.          if(
1a840 20 70 49 6e 33 2d 3e 72 3c 30 20 29 7b 0a 20 20   pIn3->r<0 ){.  
1a850 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f 63            if( oc
1a860 3e 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 20 20  >=OP_SeekGe ){  
1a870 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1a880 65 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekGe || oc==OP_
1a890 53 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20  SeekGt );.      
1a8a0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1a8b0 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70  ite3BtreeFirst(p
1a8c0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
1a8d0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
1a8e0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1a8f0 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
1a900 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1a910 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1a920 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1a930 20 20 20 20 20 20 20 20 20 69 66 28 20 6f 63 3c           if( oc<
1a940 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 20 20 61  =OP_SeekLe ){  a
1a950 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
1a960 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekLt || oc==OP_S
1a970 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20 20  eekLe );.       
1a980 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1a990 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d  te3BtreeLast(pC-
1a9a0 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
1a9b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
1a9c0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1a9d0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1a9e0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1a9f0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1aa00 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
1aa10 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
1aa20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
1aa30 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  >p2 - 1;.       
1aa40 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62     }.          b
1aa50 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 65  reak;.        }e
1aa60 6c 73 65 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53  lse if( oc==OP_S
1aa70 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLt || oc==OP_
1aa80 53 65 65 6b 47 65 20 29 7b 0a 20 20 20 20 20 20  SeekGe ){.      
1aa90 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20 63      /* Use the c
1aaa0 65 69 6c 69 6e 67 28 29 20 66 75 6e 63 74 69 6f  eiling() functio
1aab0 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65 61  n to convert rea
1aac0 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20  l->int */.      
1aad0 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 20      if( pIn3->r 
1aae0 3e 20 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29  > (double)iKey )
1aaf0 20 69 4b 65 79 2b 2b 3b 0a 20 20 20 20 20 20 20   iKey++;.       
1ab00 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1ab10 20 20 2f 2a 20 55 73 65 20 74 68 65 20 66 6c 6f    /* Use the flo
1ab20 6f 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f  or() function to
1ab30 20 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69   convert real->i
1ab40 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  nt */.          
1ab50 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1ab60 65 65 6b 4c 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLe || oc==OP_
1ab70 53 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20  SeekGt );.      
1ab80 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 20      if( pIn3->r 
1ab90 3c 20 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29  < (double)iKey )
1aba0 20 69 4b 65 79 2d 2d 3b 0a 20 20 20 20 20 20 20   iKey--;.       
1abb0 20 7d 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20   }.      } .    
1abc0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1abd0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1abe0 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  d(pC->pCursor, 0
1abf0 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20  , (u64)iKey, 0, 
1ac00 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
1ac10 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1ac20 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  {.        goto a
1ac30 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1ac40 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
1ac50 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
1ac60 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64         pC->rowid
1ac70 49 73 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20  IsValid = 1;.   
1ac80 20 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77       pC->lastRow
1ac90 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20  id = iKey;.     
1aca0 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
1acb0 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70      nField = pOp
1acc0 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 20 20 61 73  ->p4.i;.      as
1acd0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1ace0 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
1acf0 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 46 69       assert( nFi
1ad00 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 20 20 72  eld>0 );.      r
1ad10 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
1ad20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20  pKeyInfo;.      
1ad30 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
1ad40 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 20 20 2f  nField;..      /
1ad50 2a 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20  * The next line 
1ad60 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73  of code computes
1ad70 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c   as follows, onl
1ad80 79 20 66 61 73 74 65 72 3a 0a 20 20 20 20 20 20  y faster:.      
1ad90 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f  **   if( oc==OP_
1ada0 53 65 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekGt || oc==OP
1adb0 5f 53 65 65 6b 4c 65 20 29 7b 0a 20 20 20 20 20  _SeekLe ){.     
1adc0 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73 20   **     r.flags 
1add0 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b  = UNPACKED_INCRK
1ade0 45 59 3b 0a 20 20 20 20 20 20 2a 2a 20 20 20 7d  EY;.      **   }
1adf0 65 6c 73 65 7b 0a 20 20 20 20 20 20 2a 2a 20 20  else{.      **  
1ae00 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a     r.flags = 0;.
1ae10 20 20 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20        **   }.   
1ae20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 2e 66 6c     */.      r.fl
1ae30 61 67 73 20 3d 20 28 75 31 36 29 28 55 4e 50 41  ags = (u16)(UNPA
1ae40 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 2a 20 28  CKED_INCRKEY * (
1ae50 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65  1 & (oc - OP_See
1ae60 6b 4c 74 29 29 29 3b 0a 20 20 20 20 20 20 61 73  kLt)));.      as
1ae70 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1ae80 6b 47 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d  kGt || r.flags==
1ae90 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
1aea0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1aeb0 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 65 20  ( oc!=OP_SeekLe 
1aec0 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41  || r.flags==UNPA
1aed0 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a  CKED_INCRKEY );.
1aee0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63        assert( oc
1aef0 21 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 72  !=OP_SeekGe || r
1af00 2e 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 20 20 20  .flags==0 );.   
1af10 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1af20 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 72 2e 66 6c  P_SeekLt || r.fl
1af30 61 67 73 3d 3d 30 20 29 3b 0a 0a 20 20 20 20 20  ags==0 );..     
1af40 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
1af50 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
1af60 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d 65  ExpandBlob(r.aMe
1af70 6d 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  m);.      rc = s
1af80 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1af90 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
1afa0 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c  ursor, &r, 0, 0,
1afb0 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66   &res);.      if
1afc0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1afd0 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
1afe0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1aff0 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
1b000 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1b010 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  id = 0;.    }.  
1b020 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1b030 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
1b040 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1b050 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66  CACHE_STALE;.#if
1b060 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
1b070 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72      sqlite3_sear
1b080 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
1b090 69 66 0a 20 20 20 20 69 66 28 20 6f 63 3e 3d 4f  if.    if( oc>=O
1b0a0 50 5f 53 65 65 6b 47 65 20 29 7b 20 20 61 73 73  P_SeekGe ){  ass
1b0b0 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
1b0c0 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Ge || oc==OP_See
1b0d0 6b 47 74 20 29 3b 0a 20 20 20 20 20 20 69 66 28  kGt );.      if(
1b0e0 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d   res<0 || (res==
1b0f0 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  0 && oc==OP_Seek
1b100 47 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  Gt) ){.        r
1b110 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1b120 4e 65 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  Next(pC->pCursor
1b130 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
1b140 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1b150 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
1b160 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1b170 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
1b180 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
1b190 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1b1a0 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20   res = 0;.      
1b1b0 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
1b1c0 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f     assert( oc==O
1b1d0 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d  P_SeekLt || oc==
1b1e0 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20  OP_SeekLe );.   
1b1f0 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20     if( res>0 || 
1b200 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f  (res==0 && oc==O
1b210 50 5f 53 65 65 6b 4c 74 29 20 29 7b 0a 20 20 20  P_SeekLt) ){.   
1b220 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1b230 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70  3BtreePrevious(p
1b240 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
1b250 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
1b260 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1b270 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1b280 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
1b290 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1b2a0 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 0;.      }els
1b2b0 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 72 65  e{.        /* re
1b2c0 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74  s might be negat
1b2d0 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20  ive because the 
1b2e0 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20  table is empty. 
1b2f0 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20   Check to.      
1b300 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73    ** see if this
1b310 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20   is the case..  
1b320 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
1b330 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74   res = sqlite3Bt
1b340 72 65 65 45 6f 66 28 70 43 2d 3e 70 43 75 72 73  reeEof(pC->pCurs
1b350 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  or);.      }.   
1b360 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70   }.    assert( p
1b370 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
1b380 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
1b390 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1b3a0 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
1b3b0 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61  {.    /* This ha
1b3c0 70 70 65 6e 73 20 77 68 65 6e 20 61 74 74 65 6d  ppens when attem
1b3d0 70 74 69 6e 67 20 74 6f 20 6f 70 65 6e 20 74 68  pting to open th
1b3e0 65 20 73 71 6c 69 74 65 33 5f 6d 61 73 74 65 72  e sqlite3_master
1b3f0 20 74 61 62 6c 65 0a 20 20 20 20 2a 2a 20 66 6f   table.    ** fo
1b400 72 20 72 65 61 64 20 61 63 63 65 73 73 20 72 65  r read access re
1b410 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50  turns SQLITE_EMP
1b420 54 59 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  TY. In this case
1b430 20 61 6c 77 61 79 73 0a 20 20 20 20 2a 2a 20 74   always.    ** t
1b440 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 28 73 69  ake the jump (si
1b450 6e 63 65 20 74 68 65 72 65 20 61 72 65 20 6e 6f  nce there are no
1b460 20 72 65 63 6f 72 64 73 20 69 6e 20 74 68 65 20   records in the 
1b470 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20  table)..    */. 
1b480 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1b490 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
1b4a0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1b4b0 53 65 65 6b 20 50 31 20 50 32 20 2a 20 2a 20 2a  Seek P1 P2 * * *
1b4c0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20  .**.** P1 is an 
1b4d0 6f 70 65 6e 20 74 61 62 6c 65 20 63 75 72 73 6f  open table curso
1b4e0 72 20 61 6e 64 20 50 32 20 69 73 20 61 20 72 6f  r and P2 is a ro
1b4f0 77 69 64 20 69 6e 74 65 67 65 72 2e 20 20 41 72  wid integer.  Ar
1b500 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31 20  range.** for P1 
1b510 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61 74 20  to move so that 
1b520 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1b530 20 72 6f 77 69 64 20 67 69 76 65 6e 20 62 79 20   rowid given by 
1b540 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
1b550 73 20 61 63 74 75 61 6c 6c 79 20 61 20 64 65 66  s actually a def
1b560 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74  erred seek.  Not
1b570 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61  hing actually ha
1b580 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74  ppens until.** t
1b590 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65  he cursor is use
1b5a0 64 20 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f  d to read a reco
1b5b0 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69  rd.  That way, i
1b5c0 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63  f no reads.** oc
1b5d0 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73  cur, no unnecess
1b5e0 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e  ary I/O happens.
1b5f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
1b600 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f  : {    /* in2 */
1b610 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1b620 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  C;..  assert( pO
1b630 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1b640 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1b650 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1b660 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1b670 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1b680 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e   if( ALWAYS(pC->
1b690 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20  pCursor!=0) ){. 
1b6a0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
1b6b0 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 70 43  sTable );.    pC
1b6c0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
1b6d0 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b     pIn2 = &aMem[
1b6e0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 70 43  pOp->p2];.    pC
1b6f0 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
1b700 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
1b710 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20  alue(pIn2);.    
1b720 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1b730 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65   = 0;.    pC->de
1b740 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31  ferredMoveto = 1
1b750 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1b760 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .  ../* Opcode: 
1b770 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50  Found P1 P2 P3 P
1b780 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  4 *.**.** If P4=
1b790 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
1b7a0 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
1b7b0 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
1b7c0 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
1b7d0 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
1b7e0 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
1b7f0 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
1b800 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
1b810 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
1b820 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72  ecord..**.** Cur
1b830 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
1b840 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
1b850 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e   the record iden
1b860 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64  tified by P3 and
1b870 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66   P4.** is a pref
1b880 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20  ix of any entry 
1b890 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d  in P1 then a jum
1b8a0 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20  p is made to P2 
1b8b0 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66  and.** P1 is lef
1b8c0 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
1b8d0 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79  e matching entry
1b8e0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
1b8f0 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50  NotFound P1 P2 P
1b900 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20  3 P4 *.**.** If 
1b910 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
1b920 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
1b930 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
1b940 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
1b950 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
1b960 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
1b970 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
1b980 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
1b990 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
1b9a0 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a  * record..** .**
1b9b0 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
1b9c0 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
1b9d0 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
1b9e0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
1b9f0 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f   and P4.** is no
1ba00 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20  t the prefix of 
1ba10 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
1ba20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d  then a jump is m
1ba30 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50  ade to P2.  If P
1ba40 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61  1 .** does conta
1ba50 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73  in an entry whos
1ba60 65 20 70 72 65 66 69 78 20 6d 61 74 63 68 65 73  e prefix matches
1ba70 20 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72   the P3/P4 recor
1ba80 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a  d then control.*
1ba90 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20  * falls through 
1baa0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
1bab0 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69  ruction and P1 i
1bac0 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
1bad0 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69  at the.** matchi
1bae0 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20  ng entry..**.** 
1baf0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1bb00 20 4e 6f 74 45 78 69 73 74 73 2c 20 49 73 55 6e   NotExists, IsUn
1bb10 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ique.*/.case OP_
1bb20 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20  NotFound:       
1bb30 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1bb40 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b  case OP_Found: {
1bb50 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1bb60 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c   in3 */.  int al
1bb70 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 56  readyExists;.  V
1bb80 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1bb90 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61   int res;.  Unpa
1bba0 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78  ckedRecord *pIdx
1bbb0 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  Key;.  UnpackedR
1bbc0 65 63 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20  ecord r;.  char 
1bbd0 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28  aTempRec[ROUND8(
1bbe0 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52  sizeof(UnpackedR
1bbf0 65 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66  ecord)) + sizeof
1bc00 28 4d 65 6d 29 2a 33 20 2b 20 37 5d 3b 0a 0a 23  (Mem)*3 + 7];..#
1bc10 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
1bc20 54 0a 20 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e  T.  sqlite3_foun
1bc30 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  d_count++;.#endi
1bc40 66 0a 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73  f..  alreadyExis
1bc50 74 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  ts = 0;.  assert
1bc60 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1bc70 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1bc80 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
1bc90 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1bca0 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20  INT32 );.  pC = 
1bcb0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1bcc0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1bcd0 3d 30 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26  =0 );.  pIn3 = &
1bce0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1bcf0 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e   if( ALWAYS(pC->
1bd00 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 0a  pCursor!=0) ){..
1bd10 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1bd20 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
1bd30 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e    if( pOp->p4.i>
1bd40 30 20 29 7b 0a 20 20 20 20 20 20 72 2e 70 4b 65  0 ){.      r.pKe
1bd50 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
1bd60 49 6e 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46  Info;.      r.nF
1bd70 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
1bd80 3e 70 34 2e 69 3b 0a 20 20 20 20 20 20 72 2e 61  >p4.i;.      r.a
1bd90 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 20 20 20 20  Mem = pIn3;.    
1bda0 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
1bdb0 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43  CKED_PREFIX_MATC
1bdc0 48 3b 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79  H;.      pIdxKey
1bdd0 20 3d 20 26 72 3b 0a 20 20 20 20 7d 65 6c 73 65   = &r;.    }else
1bde0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
1bdf0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1be00 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20  M_Blob );.      
1be10 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29  ExpandBlob(pIn3)
1be20 3b 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79 20  ;.      pIdxKey 
1be30 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63  = sqlite3VdbeRec
1be40 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b  ordUnpack(pC->pK
1be50 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c  eyInfo, pIn3->n,
1be60 20 70 49 6e 33 2d 3e 7a 2c 0a 20 20 20 20 20 20   pIn3->z,.      
1be70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be90 20 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65    aTempRec, size
1bea0 6f 66 28 61 54 65 6d 70 52 65 63 29 29 3b 0a 20  of(aTempRec));. 
1beb0 20 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79       if( pIdxKey
1bec0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 67  ==0 ){.        g
1bed0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
1bee0 20 20 7d 0a 20 20 20 20 20 20 70 49 64 78 4b 65    }.      pIdxKe
1bef0 79 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41  y->flags |= UNPA
1bf00 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43  CKED_PREFIX_MATC
1bf10 48 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20  H;.    }.    rc 
1bf20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1bf30 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1bf40 3e 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65  >pCursor, pIdxKe
1bf50 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  y, 0, 0, &res);.
1bf60 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e      if( pOp->p4.
1bf70 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  i==0 ){.      sq
1bf80 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 55  lite3VdbeDeleteU
1bf90 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70 49  npackedRecord(pI
1bfa0 64 78 4b 65 79 29 3b 0a 20 20 20 20 7d 0a 20 20  dxKey);.    }.  
1bfb0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1bfc0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 62 72 65  _OK ){.      bre
1bfd0 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 6c  ak;.    }.    al
1bfe0 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72  readyExists = (r
1bff0 65 73 3d 3d 30 29 3b 0a 20 20 20 20 70 43 2d 3e  es==0);.    pC->
1c000 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1c010 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
1c020 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1c030 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28  STALE;.  }.  if(
1c040 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1c050 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 69 66  _Found ){.    if
1c060 28 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20  ( alreadyExists 
1c070 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d  ) pc = pOp->p2 -
1c080 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   1;.  }else{.   
1c090 20 69 66 28 20 21 61 6c 72 65 61 64 79 45 78 69   if( !alreadyExi
1c0a0 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  sts ) pc = pOp->
1c0b0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
1c0c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1c0d0 65 3a 20 49 73 55 6e 69 71 75 65 20 50 31 20 50  e: IsUnique P1 P
1c0e0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
1c0f0 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 70 65  Cursor P1 is ope
1c100 6e 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d  n on an index b-
1c110 74 72 65 65 20 2d 20 74 68 61 74 20 69 73 20 74  tree - that is t
1c120 6f 20 73 61 79 2c 20 61 20 62 74 72 65 65 20 77  o say, a btree w
1c130 68 69 63 68 0a 2a 2a 20 6e 6f 20 64 61 74 61 20  hich.** no data 
1c140 61 6e 64 20 77 68 65 72 65 20 74 68 65 20 6b 65  and where the ke
1c150 79 20 61 72 65 20 72 65 63 6f 72 64 73 20 67 65  y are records ge
1c160 6e 65 72 61 74 65 64 20 62 79 20 4f 50 5f 4d 61  nerated by OP_Ma
1c170 6b 65 52 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a  keRecord with.**
1c180 20 74 68 65 20 6c 69 73 74 20 66 69 65 6c 64 20   the list field 
1c190 62 65 69 6e 67 20 74 68 65 20 69 6e 74 65 67 65  being the intege
1c1a0 72 20 52 4f 57 49 44 20 6f 66 20 74 68 65 20 65  r ROWID of the e
1c1b0 6e 74 72 79 20 74 68 61 74 20 74 68 65 20 69 6e  ntry that the in
1c1c0 64 65 78 0a 2a 2a 20 65 6e 74 72 79 20 72 65 66  dex.** entry ref
1c1d0 65 72 73 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 54 68  ers to..**.** Th
1c1e0 65 20 50 33 20 72 65 67 69 73 74 65 72 20 63 6f  e P3 register co
1c1f0 6e 74 61 69 6e 73 20 61 6e 20 69 6e 74 65 67 65  ntains an intege
1c200 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  r record number.
1c210 20 43 61 6c 6c 20 74 68 69 73 20 72 65 63 6f 72   Call this recor
1c220 64 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 52 2e 20  d .** number R. 
1c230 52 65 67 69 73 74 65 72 20 50 34 20 69 73 20 74  Register P4 is t
1c240 68 65 20 66 69 72 73 74 20 69 6e 20 61 20 73 65  he first in a se
1c250 74 20 6f 66 20 4e 20 63 6f 6e 74 69 67 75 6f 75  t of N contiguou
1c260 73 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 74  s registers.** t
1c270 68 61 74 20 6d 61 6b 65 20 75 70 20 61 6e 20 75  hat make up an u
1c280 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1c290 79 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73  y that can be us
1c2a0 65 64 20 77 69 74 68 20 63 75 72 73 6f 72 20 50  ed with cursor P
1c2b0 31 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  1..** The value 
1c2c0 6f 66 20 4e 20 63 61 6e 20 62 65 20 69 6e 66 65  of N can be infe
1c2d0 72 72 65 64 20 66 72 6f 6d 20 74 68 65 20 63 75  rred from the cu
1c2e0 72 73 6f 72 2e 20 4e 20 69 6e 63 6c 75 64 65 73  rsor. N includes
1c2f0 20 74 68 65 20 72 6f 77 69 64 0a 2a 2a 20 76 61   the rowid.** va
1c300 6c 75 65 20 61 70 70 65 6e 64 65 64 20 74 6f 20  lue appended to 
1c310 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
1c320 6e 64 65 78 20 72 65 63 6f 72 64 2e 20 54 68 69  ndex record. Thi
1c330 73 20 72 6f 77 69 64 20 76 61 6c 75 65 20 6d 61  s rowid value ma
1c340 79 0a 2a 2a 20 6f 72 20 6d 61 79 20 6e 6f 74 20  y.** or may not 
1c350 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 52  be the same as R
1c360 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 79 20 6f  ..**.** If any o
1c370 66 20 74 68 65 20 4e 20 72 65 67 69 73 74 65 72  f the N register
1c380 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
1c390 20 72 65 67 69 73 74 65 72 20 50 34 20 63 6f 6e   register P4 con
1c3a0 74 61 69 6e 73 20 61 20 4e 55 4c 4c 0a 2a 2a 20  tains a NULL.** 
1c3b0 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65  value, jump imme
1c3c0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
1c3d0 2a 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20  *.** Otherwise, 
1c3e0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1c3f0 20 63 68 65 63 6b 73 20 69 66 20 63 75 72 73 6f   checks if curso
1c400 72 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 61 6e  r P1 contains an
1c410 20 65 6e 74 72 79 0a 2a 2a 20 77 68 65 72 65 20   entry.** where 
1c420 74 68 65 20 66 69 72 73 74 20 28 4e 2d 31 29 20  the first (N-1) 
1c430 66 69 65 6c 64 73 20 6d 61 74 63 68 20 62 75 74  fields match but
1c440 20 74 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65   the rowid value
1c450 20 61 74 20 74 68 65 20 65 6e 64 0a 2a 2a 20 6f   at the end.** o
1c460 66 20 74 68 65 20 69 6e 64 65 78 20 65 6e 74 72  f the index entr
1c470 79 20 69 73 20 6e 6f 74 20 52 2e 20 49 66 20 74  y is not R. If t
1c480 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20  here is no such 
1c490 65 6e 74 72 79 2c 20 63 6f 6e 74 72 6f 6c 20 6a  entry, control j
1c4a0 75 6d 70 73 0a 2a 2a 20 74 6f 20 69 6e 73 74 72  umps.** to instr
1c4b0 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72  uction P2. Other
1c4c0 77 69 73 65 2c 20 74 68 65 20 72 6f 77 69 64 20  wise, the rowid 
1c4d0 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 69  of the conflicti
1c4e0 6e 67 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74 72  ng index.** entr
1c4f0 79 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 72  y is copied to r
1c500 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 63  egister P3 and c
1c510 6f 6e 74 72 6f 6c 20 66 61 6c 6c 73 20 74 68 72  ontrol falls thr
1c520 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
1c530 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
1c540 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1c550 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 74 45 78   NotFound, NotEx
1c560 69 73 74 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63  ists, Found.*/.c
1c570 61 73 65 20 4f 50 5f 49 73 55 6e 69 71 75 65 3a  ase OP_IsUnique:
1c580 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
1c590 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 75 31 36 20  p, in3 */.  u16 
1c5a0 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ii;.  VdbeCursor
1c5b0 20 2a 70 43 78 3b 0a 20 20 42 74 43 75 72 73 6f   *pCx;.  BtCurso
1c5c0 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 31 36 20  r *pCrsr;.  u16 
1c5d0 6e 46 69 65 6c 64 3b 0a 20 20 4d 65 6d 20 2a 61  nField;.  Mem *a
1c5e0 4d 78 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  Mx;.  UnpackedRe
1c5f0 63 6f 72 64 20 72 3b 20 20 20 20 20 20 20 20 20  cord r;         
1c600 20 20 20 20 20 20 20 20 20 2f 2a 20 42 2d 54 72           /* B-Tr
1c610 65 65 20 69 6e 64 65 78 20 73 65 61 72 63 68 20  ee index search 
1c620 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 52 3b 20  key */.  i64 R; 
1c630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c640 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1c650 6f 77 69 64 20 73 74 6f 72 65 64 20 69 6e 20 72  owid stored in r
1c660 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 0a 20  egister P3 */.. 
1c670 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1c680 70 2d 3e 70 33 5d 3b 0a 20 20 61 4d 78 20 3d 20  p->p3];.  aMx = 
1c690 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 34 2e 69 5d  &aMem[pOp->p4.i]
1c6a0 3b 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  ;.  /* Assert th
1c6b0 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  at the values of
1c6c0 20 70 61 72 61 6d 65 74 65 72 73 20 50 31 20 61   parameters P1 a
1c6d0 6e 64 20 50 34 20 61 72 65 20 69 6e 20 72 61 6e  nd P4 are in ran
1c6e0 67 65 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ge. */.  assert(
1c6f0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1c700 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65  _INT32 );.  asse
1c710 72 74 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20  rt( pOp->p4.i>0 
1c720 26 26 20 70 4f 70 2d 3e 70 34 2e 69 3c 3d 70 2d  && pOp->p4.i<=p-
1c730 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61 73 73 65 72  >nMem );.  asser
1c740 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1c750 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1c760 73 6f 72 20 29 3b 0a 0a 20 20 2f 2a 20 46 69 6e  sor );..  /* Fin
1c770 64 20 74 68 65 20 69 6e 64 65 78 20 63 75 72 73  d the index curs
1c780 6f 72 2e 20 2a 2f 0a 20 20 70 43 78 20 3d 20 70  or. */.  pCx = p
1c790 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1c7a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d  ;.  assert( pCx-
1c7b0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
1c7c0 3d 30 20 29 3b 0a 20 20 70 43 78 2d 3e 73 65 65  =0 );.  pCx->see
1c7d0 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 70  kResult = 0;.  p
1c7e0 43 78 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  Cx->cacheStatus 
1c7f0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
1c800 20 70 43 72 73 72 20 3d 20 70 43 78 2d 3e 70 43   pCrsr = pCx->pC
1c810 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 49 66 20  ursor;..  /* If 
1c820 61 6e 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65  any of the value
1c830 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74 61 6b 65  s are NULL, take
1c840 20 74 68 65 20 6a 75 6d 70 2e 20 2a 2f 0a 20 20   the jump. */.  
1c850 6e 46 69 65 6c 64 20 3d 20 70 43 78 2d 3e 70 4b  nField = pCx->pK
1c860 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 3b 0a  eyInfo->nField;.
1c870 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 6e    for(ii=0; ii<n
1c880 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20  Field; ii++){.  
1c890 20 20 69 66 28 20 61 4d 78 5b 69 69 5d 2e 66 6c    if( aMx[ii].fl
1c8a0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
1c8b0 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
1c8c0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
1c8d0 70 43 72 73 72 20 3d 20 30 3b 0a 20 20 20 20 20  pCrsr = 0;.     
1c8e0 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
1c8f0 7d 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d 78  }.  assert( (aMx
1c900 5b 6e 46 69 65 6c 64 5d 2e 66 6c 61 67 73 20 26  [nField].flags &
1c910 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 3b   MEM_Null)==0 );
1c920 0a 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d 30  ..  if( pCrsr!=0
1c930 20 29 7b 0a 20 20 20 20 2f 2a 20 50 6f 70 75 6c   ){.    /* Popul
1c940 61 74 65 20 74 68 65 20 69 6e 64 65 78 20 73 65  ate the index se
1c950 61 72 63 68 20 6b 65 79 2e 20 2a 2f 0a 20 20 20  arch key. */.   
1c960 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
1c970 78 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  x->pKeyInfo;.   
1c980 20 72 2e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65   r.nField = nFie
1c990 6c 64 20 2b 20 31 3b 0a 20 20 20 20 72 2e 66 6c  ld + 1;.    r.fl
1c9a0 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50  ags = UNPACKED_P
1c9b0 52 45 46 49 58 5f 53 45 41 52 43 48 3b 0a 20 20  REFIX_SEARCH;.  
1c9c0 20 20 72 2e 61 4d 65 6d 20 3d 20 61 4d 78 3b 0a    r.aMem = aMx;.
1c9d0 0a 20 20 20 20 2f 2a 20 45 78 74 72 61 63 74 20  .    /* Extract 
1c9e0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 52 20 66  the value of R f
1c9f0 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33 2e  rom register P3.
1ca00 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
1ca10 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
1ca20 28 70 49 6e 33 29 3b 0a 20 20 20 20 52 20 3d 20  (pIn3);.    R = 
1ca30 70 49 6e 33 2d 3e 75 2e 69 3b 0a 0a 20 20 20 20  pIn3->u.i;..    
1ca40 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 42 2d  /* Search the B-
1ca50 54 72 65 65 20 69 6e 64 65 78 2e 20 49 66 20 6e  Tree index. If n
1ca60 6f 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65  o conflicting re
1ca70 63 6f 72 64 20 69 73 20 66 6f 75 6e 64 2c 20 6a  cord is found, j
1ca80 75 6d 70 0a 20 20 20 20 2a 2a 20 74 6f 20 50 32  ump.    ** to P2
1ca90 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 63 6f 70  . Otherwise, cop
1caa0 79 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  y the rowid of t
1cab0 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72  he conflicting r
1cac0 65 63 6f 72 64 20 74 6f 0a 20 20 20 20 2a 2a 20  ecord to.    ** 
1cad0 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20  register P3 and 
1cae0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
1caf0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
1cb00 74 69 6f 6e 2e 20 20 2a 2f 0a 20 20 20 20 72 63  tion.  */.    rc
1cb10 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1cb20 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1cb30 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  rsr, &r, 0, 0, &
1cb40 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 29  pCx->seekResult)
1cb50 3b 0a 20 20 20 20 69 66 28 20 28 72 2e 66 6c 61  ;.    if( (r.fla
1cb60 67 73 20 26 20 55 4e 50 41 43 4b 45 44 5f 50 52  gs & UNPACKED_PR
1cb70 45 46 49 58 5f 53 45 41 52 43 48 29 20 7c 7c 20  EFIX_SEARCH) || 
1cb80 72 2e 72 6f 77 69 64 3d 3d 52 20 29 7b 0a 20 20  r.rowid==R ){.  
1cb90 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1cba0 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   - 1;.    }else{
1cbb0 0a 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69  .      pIn3->u.i
1cbc0 20 3d 20 72 2e 72 6f 77 69 64 3b 0a 20 20 20 20   = r.rowid;.    
1cbd0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
1cbe0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
1cbf0 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20  Exists P1 P2 P3 
1cc00 2a 20 2a 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74 68  * *.**.** Use th
1cc10 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
1cc20 69 73 74 65 72 20 50 33 20 61 73 20 61 20 69 6e  ister P3 as a in
1cc30 74 65 67 65 72 20 6b 65 79 2e 20 20 49 66 20 61  teger key.  If a
1cc40 20 72 65 63 6f 72 64 20 0a 2a 2a 20 77 69 74 68   record .** with
1cc50 20 74 68 61 74 20 6b 65 79 20 64 6f 65 73 20 6e   that key does n
1cc60 6f 74 20 65 78 69 73 74 20 69 6e 20 74 61 62 6c  ot exist in tabl
1cc70 65 20 6f 66 20 50 31 2c 20 74 68 65 6e 20 6a 75  e of P1, then ju
1cc80 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66  mp to P2. .** If
1cc90 20 74 68 65 20 72 65 63 6f 72 64 20 64 6f 65 73   the record does
1cca0 20 65 78 69 73 74 2c 20 74 68 65 6e 20 66 61 6c   exist, then fal
1ccb0 6c 20 74 68 72 75 2e 20 20 54 68 65 20 63 75 72  l thru.  The cur
1ccc0 73 6f 72 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20  sor is left .** 
1ccd0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20  pointing to the 
1cce0 72 65 63 6f 72 64 20 69 66 20 69 74 20 65 78 69  record if it exi
1ccf0 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  sts..**.** The d
1cd00 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
1cd10 6e 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  n this operation
1cd20 20 61 6e 64 20 4e 6f 74 46 6f 75 6e 64 20 69 73   and NotFound is
1cd30 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 6f 70   that this.** op
1cd40 65 72 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20  eration assumes 
1cd50 74 68 65 20 6b 65 79 20 69 73 20 61 6e 20 69 6e  the key is an in
1cd60 74 65 67 65 72 20 61 6e 64 20 74 68 61 74 20 50  teger and that P
1cd70 31 20 69 73 20 61 20 74 61 62 6c 65 20 77 68 65  1 is a table whe
1cd80 72 65 61 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64  reas.** NotFound
1cd90 20 61 73 73 75 6d 65 73 20 6b 65 79 20 69 73 20   assumes key is 
1cda0 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
1cdb0 65 64 20 66 72 6f 6d 20 4d 61 6b 65 52 65 63 6f  ed from MakeReco
1cdc0 72 64 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20  rd and.** P1 is 
1cdd0 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  an index..**.** 
1cde0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1cdf0 20 4e 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69   NotFound, IsUni
1ce00 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  que.*/.case OP_N
1ce10 6f 74 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20  otExists: {     
1ce20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1ce30 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
1ce40 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
1ce50 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
1ce60 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a  s;.  u64 iKey;..
1ce70 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1ce80 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
1ce90 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
1cea0 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73   MEM_Int );.  as
1ceb0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1cec0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1ced0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1cee0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1cef0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1cf00 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1cf10 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1cf20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
1cf30 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
1cf40 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
1cf50 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
1cf60 70 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20  pCrsr!=0 ){.    
1cf70 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 69 4b 65  res = 0;.    iKe
1cf80 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  y = pIn3->u.i;. 
1cf90 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1cfa0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1cfb0 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65  ed(pCrsr, 0, iKe
1cfc0 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  y, 0, &res);.   
1cfd0 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   pC->lastRowid =
1cfe0 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn3->u.i;.    
1cff0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1d000 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a   = res==0 ?1:0;.
1d010 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
1d020 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
1d030 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1d040 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e  _STALE;.    pC->
1d050 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1d060 20 30 3b 0a 20 20 20 20 69 66 28 20 72 65 73 21   0;.    if( res!
1d070 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  =0 ){.      pc =
1d080 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1d090 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1d0a0 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20  rowidIsValid==0 
1d0b0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  );.    }.    pC-
1d0c0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65  >seekResult = re
1d0d0 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  s;.  }else{.    
1d0e0 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20  /* This happens 
1d0f0 77 68 65 6e 20 61 6e 20 61 74 74 65 6d 70 74 20  when an attempt 
1d100 74 6f 20 6f 70 65 6e 20 61 20 72 65 61 64 20 63  to open a read c
1d110 75 72 73 6f 72 20 6f 6e 20 74 68 65 20 0a 20 20  ursor on the .  
1d120 20 20 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 73 74    ** sqlite_mast
1d130 65 72 20 74 61 62 6c 65 20 72 65 74 75 72 6e 73  er table returns
1d140 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 0a 20   SQLITE_EMPTY.. 
1d150 20 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70     */.    pc = p
1d160 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1d170 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69  assert( pC->rowi
1d180 64 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20  dIsValid==0 );. 
1d190 20 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c     pC->seekResul
1d1a0 74 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65  t = 0;.  }.  bre
1d1b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1d1c0 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20 50 32  : Sequence P1 P2
1d1d0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 69 6e   * * *.**.** Fin
1d1e0 64 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c  d the next avail
1d1f0 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75  able sequence nu
1d200 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20  mber for cursor 
1d210 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  P1..** Write the
1d220 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1d230 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
1d240 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e  2..** The sequen
1d250 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65  ce number on the
1d260 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65   cursor is incre
1d270 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69  mented after thi
1d280 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  s.** instruction
1d290 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  .  .*/.case OP_S
1d2a0 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20  equence: {      
1d2b0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
1d2c0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
1d2d0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1d2e0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1d2f0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1d300 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  t( p->apCsr[pOp-
1d310 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75  >p1]!=0 );.  pOu
1d320 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73  t->u.i = p->apCs
1d330 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43  r[pOp->p1]->seqC
1d340 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b  ount++;.  break;
1d350 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
1d360 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50  NewRowid P1 P2 P
1d370 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47 65 74 20  3 * *.**.** Get 
1d380 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65  a new integer re
1d390 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b  cord number (a.k
1d3a0 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64  .a "rowid") used
1d3b0 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61   as the key to a
1d3c0 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72   table..** The r
1d3d0 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
1d3e0 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75  not previously u
1d3f0 73 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20  sed as a key in 
1d400 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
1d410 74 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f  table that curso
1d420 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20  r P1 points to. 
1d430 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   The new record 
1d440 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65  number is writte
1d450 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20  n.** written to 
1d460 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
1d470 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20  ** If P3>0 then 
1d480 50 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P3 is a register
1d490 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
1d4a0 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20  me of this VDBE 
1d4b0 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74  that holds .** t
1d4c0 68 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69  he largest previ
1d4d0 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20  ously generated 
1d4e0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e  record number. N
1d4f0 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  o new record num
1d500 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f  bers are.** allo
1d510 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74  wed to be less t
1d520 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20  han this value. 
1d530 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20  When this value 
1d540 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69  reaches its maxi
1d550 6d 75 6d 2c 20 0a 2a 2a 20 61 20 53 51 4c 49 54  mum, .** a SQLIT
1d560 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20  E_FULL error is 
1d570 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50  generated. The P
1d580 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70  3 register is up
1d590 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 27  dated with the '
1d5a0 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65  .** generated re
1d5b0 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69  cord number. Thi
1d5c0 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69  s P3 mechanism i
1d5d0 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  s used to help i
1d5e0 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  mplement the.** 
1d5f0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65  AUTOINCREMENT fe
1d600 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ature..*/.case O
1d610 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20  P_NewRowid: {   
1d620 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
1d630 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
1d640 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20  i64 v;          
1d650 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
1d660 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62  w rowid */.  Vdb
1d670 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
1d680 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66      /* Cursor of
1d690 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68   table to get th
1d6a0 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20  e new rowid */. 
1d6b0 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
1d6c0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
1d6d0 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42  t of an sqlite3B
1d6e0 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20  treeLast() */.  
1d6f0 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20  int cnt;        
1d700 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
1d710 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e  r to limit the n
1d720 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65  umber of searche
1d730 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  s */.  Mem *pMem
1d740 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1d750 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
1d760 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20  g largest rowid 
1d770 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  for AUTOINCREMEN
1d780 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  T */.  VdbeFrame
1d790 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a   *pFrame;     /*
1d7a0 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56   Root frame of V
1d7b0 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b  DBE */..  v = 0;
1d7c0 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73  .  res = 0;.  as
1d7d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1d7e0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1d7f0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1d800 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1d810 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1d820 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 4e 45 56  !=0 );.  if( NEV
1d830 45 52 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d  ER(pC->pCursor==
1d840 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  0) ){.    /* The
1d850 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61   zero initializa
1d860 74 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c  tion above is al
1d870 6c 20 74 68 61 74 20 69 73 20 6e 65 65 64 65 64  l that is needed
1d880 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
1d890 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77   /* The next row
1d8a0 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d  id or record num
1d8b0 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74  ber (different t
1d8c0 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d  erms for the sam
1d8d0 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20  e.    ** thing) 
1d8e0 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61  is obtained in a
1d8f0 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69   two-step algori
1d900 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  thm..    **.    
1d910 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65  ** First we atte
1d920 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20  mpt to find the 
1d930 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
1d940 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f   rowid and add o
1d950 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61  ne.    ** to tha
1d960 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c  t.  But if the l
1d970 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
1d980 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79  rowid is already
1d990 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20   the maximum.   
1d9a0 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74   ** positive int
1d9b0 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f  eger, we have to
1d9c0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
1d9d0 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20   the second.    
1d9e0 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63  ** probabilistic
1d9f0 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a   algorithm.    *
1da00 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63  *.    ** The sec
1da10 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ond algorithm is
1da20 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77   to select a row
1da30 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64  id at random and
1da40 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69   see if.    ** i
1da50 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  t already exists
1da60 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
1da70 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65  If it does not e
1da80 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20  xist, we have.  
1da90 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20    ** succeeded. 
1daa0 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72   If the random r
1dab0 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c  owid does exist,
1dac0 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77   we select a new
1dad0 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20   one.    ** and 
1dae0 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f  try again, up to
1daf0 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20   100 times..    
1db00 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  */.    assert( p
1db10 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
1db20 20 20 63 6e 74 20 3d 20 30 3b 0a 0a 23 69 66 64    cnt = 0;..#ifd
1db30 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f  ef SQLITE_32BIT_
1db40 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65  ROWID.#   define
1db50 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66   MAX_ROWID 0x7ff
1db60 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20  fffff.#else.    
1db70 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72  /* Some compiler
1db80 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
1db90 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68   constants of th
1dba0 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66  e form 0x7ffffff
1dbb0 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a  fffffffff..    *
1dbc0 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69  * Others complai
1dbd0 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66  n about 0x7fffff
1dbe0 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20  fffffffffffLL.  
1dbf0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
1dc00 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a  cro seems.    **
1dc10 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20   to provide the 
1dc20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d  constant while m
1dc30 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c  aking all compil
1dc40 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a  ers happy..    *
1dc50 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  /.#   define MAX
1dc60 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28  _ROWID  (i64)( (
1dc70 28 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66  ((u64)0x7fffffff
1dc80 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78  )<<32) | (u64)0x
1dc90 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69  ffffffff ).#endi
1dca0 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  f..    if( !pC->
1dcb0 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
1dcc0 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69  {.      v = sqli
1dcd0 74 65 33 42 74 72 65 65 47 65 74 43 61 63 68 65  te3BtreeGetCache
1dce0 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73  dRowid(pC->pCurs
1dcf0 6f 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20 76  or);.      if( v
1dd00 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==0 ){.        r
1dd10 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1dd20 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  Last(pC->pCursor
1dd30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
1dd40 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1dd50 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
1dd60 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1dd70 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1dd80 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 72   }.        if( r
1dd90 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  es ){.          
1dda0 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a  v = 1;   /* IMP:
1ddb0 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a   R-61914-48074 *
1ddc0 2f 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  /.        }else{
1ddd0 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
1dde0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
1ddf0 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d  ursorIsValid(pC-
1de00 3e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >pCursor) );.   
1de10 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1de20 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
1de30 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29  pC->pCursor, &v)
1de40 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  ;.          asse
1de50 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
1de60 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74  K );   /* Cannot
1de70 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20   fail following 
1de80 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20  BtreeLast() */. 
1de90 20 20 20 20 20 20 20 20 20 69 66 28 20 76 3d 3d           if( v==
1dea0 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20  MAX_ROWID ){.   
1deb0 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65           pC->use
1dec0 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b  RandomRowid = 1;
1ded0 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
1dee0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 2b  {.            v+
1def0 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32  +;   /* IMP: R-2
1df00 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20  9538-34987 */.  
1df10 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1df20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69 66    }.      }..#if
1df30 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1df40 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
1df50 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33       if( pOp->p3
1df60 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41   ){.        /* A
1df70 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
1df80 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
1df90 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
1dfa0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
1dfb0 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66  >0 );.        if
1dfc0 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  ( p->pFrame ){. 
1dfd0 20 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72           for(pFr
1dfe0 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
1dff0 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20  Frame->pParent; 
1e000 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
1e010 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20  Parent);.       
1e020 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
1e030 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
1e040 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
1e050 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
1e060 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d  ( pOp->p3<=pFram
1e070 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  e->nMem );.     
1e080 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72       pMem = &pFr
1e090 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
1e0a0 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  3];.        }els
1e0b0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e{.          /* 
1e0c0 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
1e0d0 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
1e0e0 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
1e0f0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1e100 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
1e110 20 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d            pMem =
1e120 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1e130 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  .        }..    
1e140 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
1e150 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d  CE(pOp->p3, pMem
1e160 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
1e170 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
1e180 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20  ify(pMem);.     
1e190 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d     assert( (pMem
1e1a0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1e1b0 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d  t)!=0 );  /* mem
1e1c0 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e  (P3) holds an in
1e1d0 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 20  teger */.       
1e1e0 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d   if( pMem->u.i==
1e1f0 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d  MAX_ROWID || pC-
1e200 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
1e210 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
1e220 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
1e230 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37 35   /* IMP: R-12275
1e240 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20 20 20 20  -61338 */.      
1e250 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1e260 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1e270 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
1e280 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31  f( v<pMem->u.i+1
1e290 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20   ){.          v 
1e2a0 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b  = pMem->u.i + 1;
1e2b0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1e2c0 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76     pMem->u.i = v
1e2d0 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66  ;.      }.#endif
1e2e0 0a 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ..      sqlite3B
1e2f0 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77  treeSetCachedRow
1e300 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  id(pC->pCursor, 
1e310 76 3c 4d 41 58 5f 52 4f 57 49 44 20 3f 20 76 2b  v<MAX_ROWID ? v+
1e320 31 20 3a 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20  1 : 0);.    }.  
1e330 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e    if( pC->useRan
1e340 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
1e350 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    /* IMPLEMENTAT
1e360 49 4f 4e 2d 4f 46 3a 20 52 2d 34 38 35 39 38 2d  ION-OF: R-48598-
1e370 30 32 39 33 38 20 49 66 20 74 68 65 20 6c 61 72  02938 If the lar
1e380 67 65 73 74 20 52 4f 57 49 44 20 69 73 20 65 71  gest ROWID is eq
1e390 75 61 6c 20 74 6f 20 74 68 65 0a 20 20 20 20 20  ual to the.     
1e3a0 20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f 73 73   ** largest poss
1e3b0 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28 39 32  ible integer (92
1e3c0 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
1e3d0 37 29 20 74 68 65 6e 20 74 68 65 20 64 61 74 61  7) then the data
1e3e0 62 61 73 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e  base.      ** en
1e3f0 67 69 6e 65 20 73 74 61 72 74 73 20 70 69 63 6b  gine starts pick
1e400 69 6e 67 20 63 61 6e 64 69 64 61 74 65 20 52 4f  ing candidate RO
1e410 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75  WIDs at random u
1e420 6e 74 69 6c 20 69 74 20 66 69 6e 64 73 20 6f 6e  ntil it finds on
1e430 65 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20  e.      ** that 
1e440 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  is not previousl
1e450 79 20 75 73 65 64 2e 0a 20 20 20 20 20 20 2a 2f  y used..      */
1e460 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1e470 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a  Op->p3==0 );  /*
1e480 20 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e   We cannot be in
1e490 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f   random rowid mo
1e4a0 64 65 20 69 66 20 74 68 69 73 20 69 73 0a 20 20  de if this is.  
1e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4c0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e             ** an
1e4d0 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74   AUTOINCREMENT t
1e4e0 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 76  able. */.      v
1e4f0 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   = db->lastRowid
1e500 3b 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b  ;.      cnt = 0;
1e510 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  .      do{.     
1e520 20 20 20 69 66 28 20 63 6e 74 3d 3d 30 20 26 26     if( cnt==0 &&
1e530 20 28 76 26 30 78 66 66 66 66 66 66 29 3d 3d 76   (v&0xffffff)==v
1e540 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b   ){.          v+
1e550 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  +;.        }else
1e560 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
1e570 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73  te3_randomness(s
1e580 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20  izeof(v), &v);. 
1e590 20 20 20 20 20 20 20 20 20 69 66 28 20 63 6e 74           if( cnt
1e5a0 3c 35 20 29 20 76 20 26 3d 20 30 78 66 66 66 66  <5 ) v &= 0xffff
1e5b0 66 66 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ff;.        }.  
1e5c0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1e5d0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1e5e0 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1e5f0 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 20 30 2c  r, 0, (u64)v, 0,
1e600 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
1e610 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 7d 77 68  cnt++;.      }wh
1e620 69 6c 65 28 20 63 6e 74 3c 31 30 30 20 26 26 20  ile( cnt<100 && 
1e630 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
1e640 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20   res==0 );.     
1e650 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1e660 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a  OK && res==0 ){.
1e670 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
1e680 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49  ITE_FULL;   /* I
1e690 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30  MP: R-38219-5300
1e6a0 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74  2 */.        got
1e6b0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1e6c0 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
1e6d0 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69    }.    pC->rowi
1e6e0 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1e6f0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1e700 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
1e710 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1e720 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
1e730 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
1e740 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1e750 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20   Opcode: Insert 
1e760 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1e770 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e  *.** Write an en
1e780 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62  try into the tab
1e790 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e  le of cursor P1.
1e7a0 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73    A new entry is
1e7b0 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20 69  .** created if i
1e7c0 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64  t doesn't alread
1e7d0 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20 64  y exist or the d
1e7e0 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74  ata for an exist
1e7f0 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20  ing.** entry is 
1e800 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68  overwritten.  Th
1e810 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76 61  e data is the va
1e820 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f  lue MEM_Blob sto
1e830 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a  red in register.
1e840 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68  ** number P2. Th
1e850 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20  e key is stored 
1e860 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  in register P3. 
1e870 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20  The key must.** 
1e880 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a  be a MEM_Int..**
1e890 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
1e8a0 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f  G_NCHANGE flag o
1e8b0 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65  f P5 is set, the
1e8c0 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  n the row change
1e8d0 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63   count is.** inc
1e8e0 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77  remented (otherw
1e8f0 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68  ise not).  If th
1e900 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
1e910 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  ID flag of P5 is
1e920 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f   set,.** then ro
1e930 77 69 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f  wid is stored fo
1e940 72 20 73 75 62 73 65 71 75 65 6e 74 20 72 65 74  r subsequent ret
1e950 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71  urn by the.** sq
1e960 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
1e970 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69  t_rowid() functi
1e980 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69 74  on (otherwise it
1e990 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e   is unmodified).
1e9a0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
1e9b0 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
1e9c0 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  LT flag of P5 is
1e9d0 20 73 65 74 20 61 6e 64 20 69 66 20 74 68 65 20   set and if the 
1e9e0 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65  result of.** the
1e9f0 20 6c 61 73 74 20 73 65 65 6b 20 6f 70 65 72 61   last seek opera
1ea00 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78 69 73  tion (OP_NotExis
1ea10 74 73 29 20 77 61 73 20 61 20 73 75 63 63 65 73  ts) was a succes
1ea20 73 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20  s, then this.** 
1ea30 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 6e  operation will n
1ea40 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69  ot attempt to fi
1ea50 6e 64 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  nd the appropria
1ea60 74 65 20 72 6f 77 20 62 65 66 6f 72 65 20 64 6f  te row before do
1ea70 69 6e 67 0a 2a 2a 20 74 68 65 20 69 6e 73 65 72  ing.** the inser
1ea80 74 20 62 75 74 20 77 69 6c 6c 20 69 6e 73 74 65  t but will inste
1ea90 61 64 20 6f 76 65 72 77 72 69 74 65 20 74 68 65  ad overwrite the
1eaa0 20 72 6f 77 20 74 68 61 74 20 74 68 65 20 63 75   row that the cu
1eab0 72 73 6f 72 20 69 73 0a 2a 2a 20 63 75 72 72 65  rsor is.** curre
1eac0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
1ead0 2e 20 20 50 72 65 73 75 6d 61 62 6c 79 2c 20 74  .  Presumably, t
1eae0 68 65 20 70 72 69 6f 72 20 4f 50 5f 4e 6f 74 45  he prior OP_NotE
1eaf0 78 69 73 74 73 20 6f 70 63 6f 64 65 0a 2a 2a 20  xists opcode.** 
1eb00 68 61 73 20 61 6c 72 65 61 64 79 20 70 6f 73 69  has already posi
1eb10 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f  tioned the curso
1eb20 72 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 54 68  r correctly.  Th
1eb30 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a  is is an optimiz
1eb40 61 74 69 6f 6e 0a 2a 2a 20 74 68 61 74 20 62 6f  ation.** that bo
1eb50 6f 73 74 73 20 70 65 72 66 6f 72 6d 61 6e 63 65  osts performance
1eb60 20 62 79 20 61 76 6f 69 64 69 6e 67 20 72 65 64   by avoiding red
1eb70 75 6e 64 61 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a  undant seeks..**
1eb80 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
1eb90 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20  G_ISUPDATE flag 
1eba0 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69  is set, then thi
1ebb0 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74  s opcode is part
1ebc0 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45   of an.** UPDATE
1ebd0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68   operation.  Oth
1ebe0 65 72 77 69 73 65 20 28 69 66 20 74 68 65 20 66  erwise (if the f
1ebf0 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20 74 68  lag is clear) th
1ec00 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a  en this opcode.*
1ec10 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20  * is part of an 
1ec20 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e  INSERT operation
1ec30 2e 20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  .  The differenc
1ec40 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74  e is only import
1ec50 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70  ant to.** the up
1ec60 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a  date hook..**.**
1ec70 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61   Parameter P4 ma
1ec80 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 73 74 72  y point to a str
1ec90 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
1eca0 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f  he table-name, o
1ecb0 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c  r.** may be NULL
1ecc0 2e 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20 4e  . If it is not N
1ecd0 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70  ULL, then the up
1ece0 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73  date-hook .** (s
1ecf0 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61  qlite3.xUpdateCa
1ed00 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b  llback) is invok
1ed10 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73  ed following a s
1ed20 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74  uccessful insert
1ed30 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47  ..**.** (WARNING
1ed40 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20  /TODO: If P1 is 
1ed50 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20  a pseudo-cursor 
1ed60 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69  and P2 is dynami
1ed70 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  cally.** allocat
1ed80 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68  ed, then ownersh
1ed90 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e  ip of P2 is tran
1eda0 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70  sferred to the p
1edb0 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20  seudo-cursor.** 
1edc0 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20  and register P2 
1edd0 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61  becomes ephemera
1ede0 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f  l.  If the curso
1edf0 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68  r is changed, th
1ee00 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65  e.** value of re
1ee10 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74  gister P2 will t
1ee20 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b  hen change.  Mak
1ee30 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73  e sure this does
1ee40 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e   not.** cause an
1ee50 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a  y problems.).**.
1ee60 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
1ee70 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f  ion only works o
1ee80 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65  n tables.  The e
1ee90 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
1eea0 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64  ction.** for ind
1eeb0 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e  ices is OP_IdxIn
1eec0 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  sert..*/./* Opco
1eed0 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50 31  de: InsertInt P1
1eee0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
1eef0 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78  ** This works ex
1ef00 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e  actly like OP_In
1ef10 73 65 72 74 20 65 78 63 65 70 74 20 74 68 61 74  sert except that
1ef20 20 74 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a   the key is the.
1ef30 2a 2a 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ** integer value
1ef40 20 50 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c   P3, not the val
1ef50 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65  ue of the intege
1ef60 72 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  r stored in regi
1ef70 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65  ster P3..*/.case
1ef80 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73   OP_Insert: .cas
1ef90 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20  e OP_InsertInt: 
1efa0 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20  {.  Mem *pData; 
1efb0 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c        /* MEM cel
1efc0 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66  l holding data f
1efd0 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  or the record to
1efe0 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a   be inserted */.
1eff0 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20    Mem *pKey;    
1f000 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20      /* MEM cell 
1f010 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72  holding key  for
1f020 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
1f030 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20   i64 iKey;      
1f040 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65     /* The intege
1f050 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66  r ROWID or key f
1f060 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  or the record to
1f070 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a   be inserted */.
1f080 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f090 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f  ;   /* Cursor to
1f0a0 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63   table into whic
1f0b0 68 20 69 6e 73 65 72 74 20 69 73 20 77 72 69 74  h insert is writ
1f0c0 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65  ten */.  int nZe
1f0d0 72 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ro;        /* Nu
1f0e0 6d 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74  mber of zero-byt
1f0f0 65 73 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a  es to append */.
1f100 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74    int seekResult
1f110 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66  ;   /* Result of
1f120 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30   prior seek or 0
1f130 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45   if no USESEEKRE
1f140 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63  SULT flag */.  c
1f150 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20  onst char *zDb; 
1f160 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d   /* database nam
1f170 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20  e - used by the 
1f180 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20  update hook */. 
1f190 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62   const char *zTb
1f1a0 6c 3b 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65  l; /* Table name
1f1b0 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 6f   - used by the o
1f1c0 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20  pdate hook */.  
1f1d0 69 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20 20  int op;         
1f1e0 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20    /* Opcode for 
1f1f0 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c  update hook: SQL
1f200 49 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51  ITE_UPDATE or SQ
1f210 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a  LITE_INSERT */..
1f220 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b    pData = &aMem[
1f230 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
1f240 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1f250 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1f260 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1f270 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1f280 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1f290 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1f2a0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
1f2b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1f2c0 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30  seudoTableReg==0
1f2d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1f2e0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 52  ->isTable );.  R
1f2f0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
1f300 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 0a  p->p2, pData);..
1f310 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
1f320 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a  e==OP_Insert ){.
1f330 20 20 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d      pKey = &aMem
1f340 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61  [pOp->p3];.    a
1f350 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61  ssert( pKey->fla
1f360 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
1f370 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
1f380 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79  CE(pOp->p3, pKey
1f390 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4b  );.    iKey = pK
1f3a0 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65  ey->u.i;.  }else
1f3b0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
1f3c0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e  p->opcode==OP_In
1f3d0 73 65 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 69  sertInt );.    i
1f3e0 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  Key = pOp->p3;. 
1f3f0 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   }..  if( pOp->p
1f400 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  5 & OPFLAG_NCHAN
1f410 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  GE ) p->nChange+
1f420 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  +;.  if( pOp->p5
1f430 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f   & OPFLAG_LASTRO
1f440 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f  WID ) db->lastRo
1f450 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66  wid = iKey;.  if
1f460 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
1f470 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
1f480 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20   pData->z = 0;. 
1f490 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b     pData->n = 0;
1f4a0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
1f4b0 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61  sert( pData->fla
1f4c0 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d  gs & (MEM_Blob|M
1f4d0 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20  EM_Str) );.  }. 
1f4e0 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28   seekResult = ((
1f4f0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1f500 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20  _USESEEKRESULT) 
1f510 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74  ? pC->seekResult
1f520 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61   : 0);.  if( pDa
1f530 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ta->flags & MEM_
1f540 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72  Zero ){.    nZer
1f550 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65  o = pData->u.nZe
1f560 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ro;.  }else{.   
1f570 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a   nZero = 0;.  }.
1f580 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
1f590 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d  tCachedRowid(pC-
1f5a0 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20  >pCursor, 0);.  
1f5b0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1f5c0 65 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72  eInsert(pC->pCur
1f5d0 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20  sor, 0, iKey,.  
1f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5f0 20 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a          pData->z
1f600 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72  , pData->n, nZer
1f610 6f 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  o,.             
1f620 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4f 70               pOp
1f630 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50  ->p5 & OPFLAG_AP
1f640 50 45 4e 44 2c 20 73 65 65 6b 52 65 73 75 6c 74  PEND, seekResult
1f650 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69  .  );.  pC->rowi
1f660 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1f670 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1f680 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
1f690 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1f6a0 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49  E_STALE;..  /* I
1f6b0 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
1f6c0 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
1f6d0 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d  d. */.  if( rc==
1f6e0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d  SQLITE_OK && db-
1f6f0 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
1f700 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b   && pOp->p4.z ){
1f710 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61  .    zDb = db->a
1f720 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d  Db[pC->iDb].zNam
1f730 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f  e;.    zTbl = pO
1f740 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20  p->p4.z;.    op 
1f750 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  = ((pOp->p5 & OP
1f760 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f  FLAG_ISUPDATE) ?
1f770 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a   SQLITE_UPDATE :
1f780 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b   SQLITE_INSERT);
1f790 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1f7a0 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
1f7b0 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
1f7c0 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41  ack(db->pUpdateA
1f7d0 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62  rg, op, zDb, zTb
1f7e0 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73  l, iKey);.    as
1f7f0 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
1f800 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   );.  }.  break;
1f810 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
1f820 65 6c 65 74 65 20 50 31 20 50 32 20 2a 20 50 34  elete P1 P2 * P4
1f830 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20   *.**.** Delete 
1f840 74 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68  the record at wh
1f850 69 63 68 20 74 68 65 20 50 31 20 63 75 72 73 6f  ich the P1 curso
1f860 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  r is currently p
1f870 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54  ointing..**.** T
1f880 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62  he cursor will b
1f890 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  e left pointing 
1f8a0 61 74 20 65 69 74 68 65 72 20 74 68 65 20 6e 65  at either the ne
1f8b0 78 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f  xt or the previo
1f8c0 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20  us.** record in 
1f8d0 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74  the table. If it
1f8e0 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   is left pointin
1f8f0 67 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65  g at the next re
1f900 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  cord, then.** th
1f910 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74  e next Next inst
1f920 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  ruction will be 
1f930 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20  a no-op.  Hence 
1f940 69 74 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65  it is OK to dele
1f950 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66  te.** a record f
1f960 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 4e 65  rom within an Ne
1f970 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49  xt loop..**.** I
1f980 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
1f990 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20  ANGE flag of P2 
1f9a0 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
1f9b0 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e   row change coun
1f9c0 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e  t is.** incremen
1f9d0 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
1f9e0 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75  ot)..**.** P1 mu
1f9f0 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f  st not be pseudo
1fa00 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20  -table.  It has 
1fa10 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61 62  to be a real tab
1fa20 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69  le with.** multi
1fa30 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20  ple rows..**.** 
1fa40 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
1fa50 4c 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68  L, then it is th
1fa60 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
1fa70 62 6c 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a  ble that P1 is.*
1fa80 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20  * pointing to.  
1fa90 54 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20  The update hook 
1faa0 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c  will be invoked,
1fab0 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a   if it exists..*
1fac0 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e  * If P4 is not N
1fad0 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20  ULL then the P1 
1fae0 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65  cursor must have
1faf0 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64   been positioned
1fb00 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74  .** using OP_Not
1fb10 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69  Found prior to i
1fb20 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63  nvoking this opc
1fb30 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
1fb40 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34 20  Delete: {.  i64 
1fb50 69 4b 65 79 3b 0a 20 20 56 64 62 65 43 75 72 73  iKey;.  VdbeCurs
1fb60 6f 72 20 2a 70 43 3b 0a 0a 20 20 69 4b 65 79 20  or *pC;..  iKey 
1fb70 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
1fb80 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1fb90 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1fba0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1fbb0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1fbc0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1fbd0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
1fbe0 75 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20  ursor!=0 );  /* 
1fbf0 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72  Only valid for r
1fc00 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70  eal tables, no p
1fc10 73 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 0a  seudotables */..
1fc20 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61    /* If the upda
1fc30 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20  te-hook will be 
1fc40 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20 69 4b 65  invoked, set iKe
1fc50 79 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f  y to the rowid o
1fc60 66 20 74 68 65 0a 20 20 2a 2a 20 72 6f 77 20 62  f the.  ** row b
1fc70 65 69 6e 67 20 64 65 6c 65 74 65 64 2e 0a 20 20  eing deleted..  
1fc80 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 55 70  */.  if( db->xUp
1fc90 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
1fca0 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
1fcb0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1fcc0 61 62 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65  able );.    asse
1fcd0 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  rt( pC->rowidIsV
1fce0 61 6c 69 64 20 29 3b 20 20 2f 2a 20 6c 61 73 74  alid );  /* last
1fcf0 52 6f 77 69 64 20 73 65 74 20 62 79 20 70 72 65  Rowid set by pre
1fd00 76 69 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f 75 6e  vious OP_NotFoun
1fd10 64 20 2a 2f 0a 20 20 20 20 69 4b 65 79 20 3d 20  d */.    iKey = 
1fd20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  pC->lastRowid;. 
1fd30 20 7d 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f   }..  /* The OP_
1fd40 44 65 6c 65 74 65 20 6f 70 63 6f 64 65 20 61 6c  Delete opcode al
1fd50 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20  ways follows an 
1fd60 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20  OP_NotExists or 
1fd70 4f 50 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20  OP_Last or.  ** 
1fd80 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65  OP_Column on the
1fd90 20 73 61 6d 65 20 74 61 62 6c 65 20 77 69 74 68   same table with
1fda0 6f 75 74 20 61 6e 79 20 69 6e 74 65 72 76 65 6e  out any interven
1fdb0 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e 73 20 74  ing operations t
1fdc0 68 61 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d  hat.  ** might m
1fdd0 6f 76 65 20 6f 72 20 69 6e 76 61 6c 69 64 61 74  ove or invalidat
1fde0 65 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48  e the cursor.  H
1fdf0 65 6e 63 65 20 63 75 72 73 6f 72 20 70 43 20 69  ence cursor pC i
1fe00 73 20 61 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e  s always pointin
1fe10 67 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f  g.  ** to the ro
1fe20 77 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20  w to be deleted 
1fe30 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 56  and the sqlite3V
1fe40 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
1fe50 29 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a  ) operation.  **
1fe60 20 62 65 6c 6f 77 20 69 73 20 61 6c 77 61 79 73   below is always
1fe70 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e   a no-op and can
1fe80 6e 6f 74 20 66 61 69 6c 2e 20 20 57 65 20 77 69  not fail.  We wi
1fe90 6c 6c 20 72 75 6e 20 69 74 20 61 6e 79 68 6f 77  ll run it anyhow
1fea0 2c 20 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74  , though,.  ** t
1feb0 6f 20 67 75 61 72 64 20 61 67 61 69 6e 73 74 20  o guard against 
1fec0 66 75 74 75 72 65 20 63 68 61 6e 67 65 73 20 74  future changes t
1fed0 6f 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  o the code gener
1fee0 61 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73  ator..  **/.  as
1fef0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
1ff00 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
1ff10 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
1ff20 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
1ff30 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  );.  if( NEVER(r
1ff40 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20  c!=SQLITE_OK) ) 
1ff50 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1ff60 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 73 71 6c 69  o_error;..  sqli
1ff70 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65  te3BtreeSetCache
1ff80 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73  dRowid(pC->pCurs
1ff90 6f 72 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73  or, 0);.  rc = s
1ffa0 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74  qlite3BtreeDelet
1ffb0 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  e(pC->pCursor);.
1ffc0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1ffd0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1ffe0 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
1fff0 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66  e update-hook if
20000 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20   required. */.  
20010 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
20020 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65  K && db->xUpdate
20030 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d  Callback && pOp-
20040 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 63 6f 6e  >p4.z ){.    con
20050 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 64  st char *zDb = d
20060 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e  b->aDb[pC->iDb].
20070 7a 4e 61 6d 65 3b 0a 20 20 20 20 63 6f 6e 73 74  zName;.    const
20080 20 63 68 61 72 20 2a 7a 54 62 6c 20 3d 20 70 4f   char *zTbl = pO
20090 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 64 62 2d  p->p4.z;.    db-
200a0 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
200b0 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
200c0 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20   SQLITE_DELETE, 
200d0 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29  zDb, zTbl, iKey)
200e0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
200f0 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a  ->iDb>=0 );.  }.
20100 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20    if( pOp->p2 & 
20110 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
20120 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
20130 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63   break;.}./* Opc
20140 6f 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20  ode: ResetCount 
20150 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
20160 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  The value of the
20170 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
20180 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65  is copied to the
20190 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
201a0 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  .** change count
201b0 65 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20  er (returned by 
201c0 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73  subsequent calls
201d0 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e   to sqlite3_chan
201e0 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20  ges())..** Then 
201f0 74 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c  the VMs internal
20200 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
20210 72 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20  resets to 0..** 
20220 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
20230 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
20240 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73  ..*/.case OP_Res
20250 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c  etCount: {.  sql
20260 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67  ite3VdbeSetChang
20270 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67  es(db, p->nChang
20280 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65  e);.  p->nChange
20290 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
202a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
202b0 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a  Data P1 P2 * * *
202c0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
202d0 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68  o register P2 th
202e0 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64  e complete row d
202f0 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72 20 50  ata for cursor P
20300 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e  1..** There is n
20310 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  o interpretation
20320 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a   of the data.  .
20330 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63 6f  ** It is just co
20340 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32  pied onto the P2
20350 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c   register exactl
20360 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66  y as .** it is f
20370 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61  ound in the data
20380 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
20390 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f   If the P1 curso
203a0 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69  r must be pointi
203b0 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f  ng to a valid ro
203c0 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f  w (not a NULL ro
203d0 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20  w).** of a real 
203e0 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
203f0 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a  udo-table..*/./*
20400 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20   Opcode: RowKey 
20410 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
20420 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
20430 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d  ister P2 the com
20440 70 6c 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f  plete row key fo
20450 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
20460 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65  There is no inte
20470 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
20480 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65  e data.  .** The
20490 20 6b 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f   key is copied o
204a0 6e 74 6f 20 74 68 65 20 50 33 20 72 65 67 69 73  nto the P3 regis
204b0 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a  ter exactly as .
204c0 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69  ** it is found i
204d0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
204e0 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ile..**.** If th
204f0 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
20500 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   be pointing to 
20510 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74  a valid row (not
20520 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20   a NULL row).** 
20530 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  of a real table,
20540 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
20550 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
20560 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f  RowKey:.case OP_
20570 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62  RowData: {.  Vdb
20580 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
20590 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
205a0 20 20 75 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e    u32 n;.  i64 n
205b0 36 34 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61  64;..  pOut = &a
205c0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 0a 20  Mem[pOp->p2];.. 
205d0 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52 6f   /* Note that Ro
205e0 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74 61  wKey and RowData
205f0 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61 63   are really exac
20600 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e 73  tly the same ins
20610 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73  truction */.  as
20620 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
20630 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
20640 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
20650 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
20660 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
20670 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70  ->isTable || pOp
20680 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77  ->opcode==OP_Row
20690 4b 65 79 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Key );.  assert(
206a0 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 7c 7c 20   pC->isIndex || 
206b0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
206c0 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73  RowData );.  ass
206d0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
206e0 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c  assert( pC->null
206f0 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Row==0 );.  asse
20700 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
20710 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61  bleReg==0 );.  a
20720 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
20730 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  or!=0 );.  pCrsr
20740 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
20750 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
20760 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
20770 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 0a 20  lid(pCrsr) );.. 
20780 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65   /* The OP_RowKe
20790 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61  y and OP_RowData
207a0 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20   opcodes always 
207b0 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69  follow OP_NotExi
207c0 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52  sts or.  ** OP_R
207d0 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69  ewind/Op_Next wi
207e0 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e  th no intervenin
207f0 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 74  g instructions t
20800 68 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69  hat might invali
20810 64 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 63 75  date.  ** the cu
20820 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 74 68 65  rsor.  Hence the
20830 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74   following sqlit
20840 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
20850 74 6f 28 29 20 63 61 6c 6c 20 69 73 20 61 6c 77  to() call is alw
20860 61 79 73 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70  ays.  ** a no-op
20870 20 61 6e 64 20 63 61 6e 20 6e 65 76 65 72 20 66   and can never f
20880 61 69 6c 2e 20 20 42 75 74 20 77 65 20 6c 65 61  ail.  But we lea
20890 76 65 20 69 74 20 69 6e 20 70 6c 61 63 65 20 61  ve it in place a
208a0 73 20 61 20 73 61 66 65 74 79 2e 0a 20 20 2a 2f  s a safety..  */
208b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
208c0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
208d0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
208e0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
208f0 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45  to(pC);.  if( NE
20900 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f  VER(rc!=SQLITE_O
20910 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  K) ) goto abort_
20920 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
20930 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78   if( pC->isIndex
20940 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
20950 21 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a  !pC->isTable );.
20960 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
20970 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72  BtreeKeySize(pCr
20980 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20 61  sr, &n64);.    a
20990 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
209a0 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72  E_OK );    /* Tr
209b0 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75  ue because of Cu
209c0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c  rsorMoveto() cal
209d0 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69  l above */.    i
209e0 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69  f( n64>db->aLimi
209f0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
20a00 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
20a10 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
20a20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33 32    }.    n = (u32
20a30 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  )n64;.  }else{. 
20a40 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
20a50 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
20a60 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73  sr, &n);.    ass
20a70 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
20a80 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61  OK );    /* Data
20a90 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61  Size() cannot fa
20aa0 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e  il */.    if( n>
20ab0 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b  (u32)db->aLimit[
20ac0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
20ad0 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f  GTH] ){.      go
20ae0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
20af0 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  }.  }.  if( sqli
20b00 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
20b10 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20  Out, n, 0) ){.  
20b20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
20b30 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e   }.  pOut->n = n
20b40 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
20b50 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f  ag(pOut, MEM_Blo
20b60 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  b);.  if( pC->is
20b70 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63 20  Index ){.    rc 
20b80 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
20b90 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70  y(pCrsr, 0, n, p
20ba0 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65  Out->z);.  }else
20bb0 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
20bc0 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72 73  e3BtreeData(pCrs
20bd0 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a  r, 0, n, pOut->z
20be0 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65  );.  }.  pOut->e
20bf0 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
20c00 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68  ;  /* In case th
20c10 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63  e blob is ever c
20c20 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20  ast to text */. 
20c30 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
20c40 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
20c50 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
20c60 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a  e: Rowid P1 P2 *
20c70 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65   * *.**.** Store
20c80 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
20c90 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
20ca0 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74   is the key of t
20cb0 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
20cc0 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72  hat.** P1 is cur
20cd0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e  rently point to.
20ce0 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65  .**.** P1 can be
20cf0 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e   either an ordin
20d00 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76  ary table or a v
20d10 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54  irtual table.  T
20d20 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  here used to.** 
20d30 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50  be a separate OP
20d40 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66  _VRowid opcode f
20d50 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74  or use with virt
20d60 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20  ual tables, but 
20d70 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f  this.** one opco
20d80 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72  de now works for
20d90 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65   both table type
20da0 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  s..*/.case OP_Ro
20db0 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
20dc0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
20dd0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56  rerelease */.  V
20de0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
20df0 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65   i64 v;.  sqlite
20e00 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
20e10 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
20e20 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
20e30 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
20e40 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
20e50 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
20e60 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
20e70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
20e80 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
20e90 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
20ea0 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
20eb0 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
20ec0 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
20ed0 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
20ee0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c      break;.  }el
20ef0 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72  se if( pC->defer
20f00 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20  redMoveto ){.   
20f10 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54   v = pC->movetoT
20f20 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53  arget;.#ifndef S
20f30 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
20f40 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20  ALTABLE.  }else 
20f50 69 66 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72  if( pC->pVtabCur
20f60 73 6f 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62  sor ){.    pVtab
20f70 20 3d 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73   = pC->pVtabCurs
20f80 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70  or->pVtab;.    p
20f90 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
20fa0 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73  pModule;.    ass
20fb0 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  ert( pModule->xR
20fc0 6f 77 69 64 20 29 3b 0a 20 20 20 20 69 66 28 20  owid );.    if( 
20fd0 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
20fe0 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
20ff0 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
21000 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  .    rc = pModul
21010 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 70 56  e->xRowid(pC->pV
21020 74 61 62 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a  tabCursor, &v);.
21030 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
21040 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
21050 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73  );.    p->zErrMs
21060 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  g = pVtab->zErrM
21070 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a  sg;.    pVtab->z
21080 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20  ErrMsg = 0;.    
21090 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
210a0 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61  yOn(db) ) goto a
210b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
210c0 73 65 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  se;.#endif /* SQ
210d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
210e0 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73  LTABLE */.  }els
210f0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
21100 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
21110 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
21120 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
21130 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72  o(pC);.    if( r
21140 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
21150 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
21160 20 69 66 28 20 70 43 2d 3e 72 6f 77 69 64 49 73   if( pC->rowidIs
21170 56 61 6c 69 64 20 29 7b 0a 20 20 20 20 20 20 76  Valid ){.      v
21180 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64   = pC->lastRowid
21190 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
211a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
211b0 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e  treeKeySize(pC->
211c0 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  pCursor, &v);.  
211d0 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
211e0 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a  SQLITE_OK );  /*
211f0 20 41 6c 77 61 79 73 20 73 6f 20 62 65 63 61 75   Always so becau
21200 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65  se of CursorMove
21210 74 6f 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20 20  to() above */.  
21220 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e    }.  }.  pOut->
21230 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
21240 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
21250 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a  NullRow P1 * * *
21260 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68   *.**.** Move th
21270 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61  e cursor P1 to a
21280 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20   null row.  Any 
21290 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74  OP_Column operat
212a0 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63  ions.** that occ
212b0 75 72 20 77 68 69 6c 65 20 74 68 65 20 63 75 72  ur while the cur
212c0 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75  sor is on the nu
212d0 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61  ll row will alwa
212e0 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55  ys.** write a NU
212f0 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  LL..*/.case OP_N
21300 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65  ullRow: {.  Vdbe
21310 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
21320 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
21330 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
21340 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
21350 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
21360 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
21370 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75  C!=0 );.  pC->nu
21380 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d  llRow = 1;.  pC-
21390 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
213a0 30 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75  0;.  if( pC->pCu
213b0 72 73 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  rsor ){.    sqli
213c0 74 65 33 42 74 72 65 65 43 6c 65 61 72 43 75 72  te3BtreeClearCur
213d0 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  sor(pC->pCursor)
213e0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
213f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73  ../* Opcode: Las
21400 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
21410 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65  .** The next use
21420 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72   of the Rowid or
21430 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20   Column or Next 
21440 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20  instruction for 
21450 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65  P1 .** will refe
21460 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e  r to the last en
21470 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  try in the datab
21480 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
21490 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  ex..** If the ta
214a0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
214b0 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20  empty and P2>0, 
214c0 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
214d0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20  ately to P2..** 
214e0 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66  If P2 is 0 or if
214f0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
21500 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  dex is not empty
21510 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  , fall through.*
21520 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
21530 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ng instruction..
21540 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a  */.case OP_Last:
21550 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
21560 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
21570 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
21580 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
21590 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
215a0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
215b0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
215c0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
215d0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
215e0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
215f0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
21600 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43  Cursor;.  if( pC
21610 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65  rsr==0 ){.    re
21620 73 20 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a  s = 1;.  }else{.
21630 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
21640 42 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c  BtreeLast(pCrsr,
21650 20 26 72 65 73 29 3b 0a 20 20 7d 0a 20 20 70 43   &res);.  }.  pC
21660 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
21670 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  res;.  pC->defer
21680 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
21690 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
216a0 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  d = 0;.  pC->cac
216b0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
216c0 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f  _STALE;.  if( pO
216d0 70 2d 3e 70 32 3e 30 20 26 26 20 72 65 73 20 29  p->p2>0 && res )
216e0 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
216f0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
21700 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
21710 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a  de: Sort P1 P2 *
21720 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   * *.**.** This 
21730 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63  opcode does exac
21740 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69  tly the same thi
21750 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20  ng as OP_Rewind 
21760 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69  except that.** i
21770 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20  t increments an 
21780 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f  undocumented glo
21790 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65  bal variable use
217a0 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a  d for testing..*
217b0 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20  *.** Sorting is 
217c0 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20  accomplished by 
217d0 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20  writing records 
217e0 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69  into a sorting i
217f0 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65  ndex,.** then re
21800 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64  winding that ind
21810 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69  ex and playing i
21820 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69  t back from begi
21830 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e  nning to.** end.
21840 20 20 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f    We use the OP_
21850 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74  Sort opcode inst
21860 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64  ead of OP_Rewind
21870 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65   to do the.** re
21880 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20  winding so that 
21890 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
218a0 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72  ble will be incr
218b0 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72  emented and.** r
218c0 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20  egression tests 
218d0 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68  can determine wh
218e0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
218f0 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a   optimizer is.**
21900 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d   correctly optim
21910 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e  izing out sorts.
21920 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
21930 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
21940 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  mp */.#ifdef SQL
21950 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74  ITE_TEST.  sqlit
21960 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b  e3_sort_count++;
21970 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63  .  sqlite3_searc
21980 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69  h_count--;.#endi
21990 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  f.  p->aCounter[
219a0 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
219b0 53 5f 53 4f 52 54 2d 31 5d 2b 2b 3b 0a 20 20 2f  S_SORT-1]++;.  /
219c0 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
219d0 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f  nto OP_Rewind */
219e0 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  .}./* Opcode: Re
219f0 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  wind P1 P2 * * *
21a00 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  .**.** The next 
21a10 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64  use of the Rowid
21a20 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65   or Column or Ne
21a30 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66  xt instruction f
21a40 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72  or P1 .** will r
21a50 65 66 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  efer to the firs
21a60 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64  t entry in the d
21a70 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
21a80 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68   index..** If th
21a90 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
21aa0 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32   is empty and P2
21ab0 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d  >0, then jump im
21ac0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
21ad0 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f  .** If P2 is 0 o
21ae0 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f  r if the table o
21af0 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65  r index is not e
21b00 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75  mpty, fall throu
21b10 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
21b20 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
21b30 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  on..*/.case OP_R
21b40 65 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20  ewind: {        
21b50 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
21b60 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
21b70 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
21b80 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
21b90 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
21ba0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
21bb0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
21bc0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
21bd0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
21be0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 43  !=0 );.  if( (pC
21bf0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
21c00 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  r)!=0 ){.    rc 
21c10 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  = sqlite3BtreeFi
21c20 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  rst(pCrsr, &res)
21c30 3b 0a 20 20 20 20 70 43 2d 3e 61 74 46 69 72 73  ;.    pC->atFirs
21c40 74 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b  t = res==0 ?1:0;
21c50 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
21c60 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
21c70 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
21c80 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
21c90 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
21ca0 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  alid = 0;.  }els
21cb0 65 7b 0a 20 20 20 20 72 65 73 20 3d 20 31 3b 0a  e{.    res = 1;.
21cc0 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f    }.  pC->nullRo
21cd0 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61  w = (u8)res;.  a
21ce0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
21cf0 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e   && pOp->p2<p->n
21d00 4f 70 20 29 3b 0a 20 20 69 66 28 20 72 65 73 20  Op );.  if( res 
21d10 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
21d20 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
21d30 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
21d40 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20 2a  de: Next P1 P2 *
21d50 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e   * *.**.** Advan
21d60 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  ce cursor P1 so 
21d70 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
21d80 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64  o the next key/d
21d90 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a  ata pair in its.
21da0 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
21db0 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  x.  If there are
21dc0 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c   no more key/val
21dd0 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
21de0 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
21df0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
21e00 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
21e10 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 61   if the cursor a
21e20 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63 65  dvance was succe
21e30 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
21e40 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
21e50 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
21e60 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
21e70 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
21e80 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
21e90 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  le..**.** See al
21ea0 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f  so: Prev.*/./* O
21eb0 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50  pcode: Prev P1 P
21ec0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 61  2 * * *.**.** Ba
21ed0 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20  ck up cursor P1 
21ee0 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
21ef0 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  s to the previou
21f00 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  s key/data pair 
21f10 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
21f20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
21f30 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f  ere is no previo
21f40 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69  us key/value pai
21f50 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  rs then fall thr
21f60 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
21f70 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
21f80 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68  tion.  But if th
21f90 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20  e cursor backup 
21fa0 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
21fb0 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
21fc0 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
21fd0 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   The P1 cursor m
21fe0 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61  ust be for a rea
21ff0 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
22000 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
22010 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20  case OP_Prev:   
22020 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
22030 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20  /.case OP_Next: 
22040 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
22050 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
22060 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
22070 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
22080 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f 46 4f 52  es;..  CHECK_FOR
22090 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 61 73  _INTERRUPT;.  as
220a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
220b0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
220c0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
220d0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
220e0 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d 3d 30 20  1];.  if( pC==0 
220f0 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 20 20 2f  ){.    break;  /
22100 2a 20 53 65 65 20 74 69 63 6b 65 74 20 23 32 32  * See ticket #22
22110 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 70 43 72 73  73 */.  }.  pCrs
22120 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
22130 0a 20 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20  .  if( pCrsr==0 
22140 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  ){.    pC->nullR
22150 6f 77 20 3d 20 31 3b 0a 20 20 20 20 62 72 65 61  ow = 1;.    brea
22160 6b 3b 0a 20 20 7d 0a 20 20 72 65 73 20 3d 20 31  k;.  }.  res = 1
22170 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
22180 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
22190 30 20 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d  0 );.  rc = pOp-
221a0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78 74  >opcode==OP_Next
221b0 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e   ? sqlite3BtreeN
221c0 65 78 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  ext(pCrsr, &res)
221d0 20 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   :.             
221e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
22200 76 69 6f 75 73 28 70 43 72 73 72 2c 20 26 72 65  vious(pCrsr, &re
22210 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  s);.  pC->nullRo
22220 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70  w = (u8)res;.  p
22230 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
22240 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
22250 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
22260 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
22270 20 31 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   1;.    if( pOp-
22280 3e 70 35 20 29 20 70 2d 3e 61 43 6f 75 6e 74 65  >p5 ) p->aCounte
22290 72 5b 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a  r[pOp->p5-1]++;.
222a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
222b0 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
222c0 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
222d0 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e  endif.  }.  pC->
222e0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
222f0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
22300 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65   Opcode: IdxInse
22310 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  rt P1 P2 P3 * P5
22320 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
22330 50 32 20 68 6f 6c 64 73 20 61 20 53 51 4c 20 69  P2 holds a SQL i
22340 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73  ndex key made us
22350 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52  ing the.** MakeR
22360 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
22370 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  ns.  This opcode
22380 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79   writes that key
22390 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64  .** into the ind
223a0 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72  ex P1.  Data for
223b0 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69   the entry is ni
223c0 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61  l..**.** P3 is a
223d0 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76 69   flag that provi
223e0 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68  des a hint to th
223f0 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20 74  e b-tree layer t
22400 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65  hat this.** inse
22410 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  rt is likely to 
22420 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a  be an append..**
22430 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
22440 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
22450 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68  for indices.  Th
22460 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
22470 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
22480 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73  tables is OP_Ins
22490 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ert..*/.case OP_
224a0 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20  IdxInsert: {    
224b0 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
224c0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
224d0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
224e0 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20  r;.  int nKey;. 
224f0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65   const char *zKe
22500 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  y;..  assert( pO
22510 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
22520 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
22530 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
22540 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
22550 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
22560 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
22570 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
22580 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
22590 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43  MEM_Blob );.  pC
225a0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
225b0 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  r;.  if( ALWAYS(
225c0 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20  pCrsr!=0) ){.   
225d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
225e0 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72  able==0 );.    r
225f0 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
22600 49 6e 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63  In2);.    if( rc
22610 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
22620 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32       nKey = pIn2
22630 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20  ->n;.      zKey 
22640 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20  = pIn2->z;.     
22650 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
22660 65 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20  eeInsert(pCrsr, 
22670 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20  zKey, nKey, "", 
22680 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a  0, 0, pOp->p3, .
22690 20 20 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d            ((pOp-
226a0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45  >p5 & OPFLAG_USE
226b0 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43  SEEKRESULT) ? pC
226c0 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30  ->seekResult : 0
226d0 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ).      );.     
226e0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
226f0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
22700 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68  ;.      pC->cach
22710 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
22720 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d  STALE;.    }.  }
22730 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
22740 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74  Opcode: IdxDelet
22750 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
22760 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74  *.** The content
22770 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73   of P3 registers
22780 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67   starting at reg
22790 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a  ister P2 form.**
227a0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
227b0 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63  ex key. This opc
227c0 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74  ode removes that
227d0 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20   entry from the 
227e0 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64  .** index opened
227f0 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   by cursor P1..*
22800 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c  /.case OP_IdxDel
22810 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
22820 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
22830 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
22840 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
22850 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
22860 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
22870 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
22880 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
22890 32 2b 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  2+pOp->p3<=p->nM
228a0 65 6d 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  em+1 );.  assert
228b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
228c0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
228d0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
228e0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
228f0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
22900 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
22910 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
22920 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29  ALWAYS(pCrsr!=0)
22930 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   ){.    r.pKeyIn
22940 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
22950 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
22960 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a  = (u16)pOp->p3;.
22970 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b      r.flags = 0;
22980 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  .    r.aMem = &a
22990 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
229a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
229b0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
229c0 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20  d(pCrsr, &r, 0, 
229d0 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66  0, &res);.    if
229e0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
229f0 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  && res==0 ){.   
22a00 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
22a10 74 72 65 65 44 65 6c 65 74 65 28 70 43 72 73 72  treeDelete(pCrsr
22a20 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73  );.    }.    ass
22a30 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
22a40 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
22a50 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
22a60 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
22a70 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
22a80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52  ./* Opcode: IdxR
22a90 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  owid P1 P2 * * *
22aa0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
22ab0 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  o register P2 an
22ac0 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
22ad0 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79  s the last entry
22ae0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61   in the record a
22af0 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  t.** the end of 
22b00 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f  the index key po
22b10 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72 73  inted to by curs
22b20 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74  or P1.  This int
22b30 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a  eger should be.*
22b40 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  * the rowid of t
22b50 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
22b60 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64  o which this ind
22b70 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e  ex entry points.
22b80 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
22b90 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f   Rowid, MakeReco
22ba0 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  rd..*/.case OP_I
22bb0 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  dxRowid: {      
22bc0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
22bd0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
22be0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
22bf0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
22c00 43 3b 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 0a  C;.  i64 rowid;.
22c10 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
22c20 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
22c30 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
22c40 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
22c50 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
22c60 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
22c70 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
22c80 72 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  r;.  pOut->flags
22c90 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69   = MEM_Null;.  i
22ca0 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21  f( ALWAYS(pCrsr!
22cb0 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  =0) ){.    rc = 
22cc0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
22cd0 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20  rMoveto(pC);.   
22ce0 20 69 66 28 20 4e 45 56 45 52 28 72 63 29 20 29   if( NEVER(rc) )
22cf0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
22d00 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 61 73  to_error;.    as
22d10 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
22d20 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
22d30 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
22d40 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20  sTable==0 );.   
22d50 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f   if( !pC->nullRo
22d60 77 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  w ){.      rc = 
22d70 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f  sqlite3VdbeIdxRo
22d80 77 69 64 28 64 62 2c 20 70 43 72 73 72 2c 20 26  wid(db, pCrsr, &
22d90 72 6f 77 69 64 29 3b 0a 20 20 20 20 20 20 69 66  rowid);.      if
22da0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
22db0 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
22dc0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
22dd0 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
22de0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f    pOut->u.i = ro
22df0 77 69 64 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d  wid;.      pOut-
22e00 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
22e10 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
22e20 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
22e30 65 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50  e: IdxGE P1 P2 P
22e40 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
22e50 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
22e60 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
22e70 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
22e80 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
22e90 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
22ea0 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d   the ROWID.  Com
22eb0 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
22ec0 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20  lue against the 
22ed0 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50  index .** that P
22ee0 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
22ef0 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
22f00 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f  ring the ROWID o
22f10 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
22f20 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
22f30 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67  index entry is g
22f40 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
22f50 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
22f60 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75  value.** then ju
22f70 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72  mp to P2.  Other
22f80 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
22f90 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
22fa0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
22fb0 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65   If P5 is non-ze
22fc0 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20  ro then the key 
22fd0 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73  value is increas
22fe0 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e  ed by an epsilon
22ff0 20 0a 2a 2a 20 70 72 69 6f 72 20 74 6f 20 74 68   .** prior to th
23000 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54  e comparison.  T
23010 68 69 73 20 6d 61 6b 65 20 74 68 65 20 6f 70 63  his make the opc
23020 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64  ode work like Id
23030 78 47 54 20 65 78 63 65 70 74 0a 2a 2a 20 74 68  xGT except.** th
23040 61 74 20 69 66 20 74 68 65 20 6b 65 79 20 66 72  at if the key fr
23050 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33 20 69  om register P3 i
23060 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  s a prefix of th
23070 65 20 6b 65 79 20 69 6e 20 74 68 65 20 63 75 72  e key in the cur
23080 73 6f 72 2c 0a 2a 2a 20 74 68 65 20 72 65 73 75  sor,.** the resu
23090 6c 74 20 69 73 20 66 61 6c 73 65 20 77 68 65 72  lt is false wher
230a0 65 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20  eas it would be 
230b0 74 72 75 65 20 77 69 74 68 20 49 64 78 47 54 2e  true with IdxGT.
230c0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
230d0 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 2a 20  dxLT P1 P2 P3 * 
230e0 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  P5.**.** The P4 
230f0 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
23100 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
23110 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
23120 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
23130 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
23140 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20  ROWID.  Compare 
23150 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
23160 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
23170 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
23180 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
23190 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
231a0 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  the ROWID on the
231b0 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
231c0 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
231d0 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
231e0 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
231f0 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  e then jump to P
23200 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20  2..** Otherwise 
23210 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
23220 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
23230 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
23240 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68  5 is non-zero th
23250 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  en the key value
23260 20 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79   is increased by
23270 20 61 6e 20 65 70 73 69 6c 6f 6e 20 70 72 69 6f   an epsilon prio
23280 72 20 0a 2a 2a 20 74 6f 20 74 68 65 20 63 6f 6d  r .** to the com
23290 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d  parison.  This m
232a0 61 6b 65 73 20 74 68 65 20 6f 70 63 6f 64 65 20  akes the opcode 
232b0 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 4c 45 2e  work like IdxLE.
232c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c  .*/.case OP_IdxL
232d0 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  T:          /* j
232e0 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
232f0 64 78 47 45 3a 20 7b 20 20 20 20 20 20 20 20 2f  dxGE: {        /
23300 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
23310 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
23320 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
23330 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
23340 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
23350 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
23360 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
23370 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
23380 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
23390 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 41 4c 57  !=0 );.  if( ALW
233a0 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21  AYS(pC->pCursor!
233b0 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  =0) ){.    asser
233c0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
233d0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20  oveto==0 );.    
233e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
233f0 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31  =0 || pOp->p5==1
23400 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
23410 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
23420 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 72 2e 70  INT32 );.    r.p
23430 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
23440 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
23450 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
23460 3e 70 34 2e 69 3b 0a 20 20 20 20 69 66 28 20 70  >p4.i;.    if( p
23470 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20  Op->p5 ){.      
23480 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
23490 45 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55 4e 50  ED_INCRKEY | UNP
234a0 41 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57  ACKED_IGNORE_ROW
234b0 49 44 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ID;.    }else{. 
234c0 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55       r.flags = U
234d0 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52  NPACKED_IGNORE_R
234e0 4f 57 49 44 3b 0a 20 20 20 20 7d 0a 20 20 20 20  OWID;.    }.    
234f0 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
23500 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 72 63 20  Op->p3];.    rc 
23510 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
23520 4b 65 79 43 6f 6d 70 61 72 65 28 70 43 2c 20 26  KeyCompare(pC, &
23530 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66  r, &res);.    if
23540 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
23550 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 20  P_IdxLT ){.     
23560 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 20   res = -res;.   
23570 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
23580 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
23590 65 3d 3d 4f 50 5f 49 64 78 47 45 20 29 3b 0a 20  e==OP_IdxGE );. 
235a0 20 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 20 20       res++;.    
235b0 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20  }.    if( res>0 
235c0 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
235d0 70 2d 3e 70 32 20 2d 20 31 20 3b 0a 20 20 20 20  p->p2 - 1 ;.    
235e0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
235f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73  ../* Opcode: Des
23600 74 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20  troy P1 P2 P3 * 
23610 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  *.**.** Delete a
23620 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  n entire databas
23630 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
23640 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
23650 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
23660 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65  .** file is give
23670 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  n by P1..**.** T
23680 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  he table being d
23690 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74  estroyed is in t
236a0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
236b0 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20   file if P3==0. 
236c0 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65   If.** P3==1 the
236d0 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
236e0 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
236f0 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
23700 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
23710 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
23720 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
23730 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
23740 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
23750 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55  *.** If AUTOVACU
23760 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68  UM is enabled th
23770 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  en it is possibl
23780 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72  e that another r
23790 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68  oot page.** migh
237a0 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20  t be moved into 
237b0 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65  the newly delete
237c0 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f  d root page in o
237d0 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c  rder to keep all
237e0 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63  .** root pages c
237f0 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65  ontiguous at the
23800 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
23810 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
23820 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65   former.** value
23830 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67   of the root pag
23840 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69  e that moved - i
23850 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  ts value before 
23860 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65  the move occurre
23870 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64  d -.** is stored
23880 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
23890 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a    If no page .**
238a0 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65   movement was re
238b0 71 75 69 72 65 64 20 28 62 65 63 61 75 73 65 20  quired (because 
238c0 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
238d0 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65  dropped was alre
238e0 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74  ady .** the last
238f0 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61   one in the data
23900 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72  base) then a zer
23910 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
23920 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49  egister P2..** I
23930 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20  f AUTOVACUUM is 
23940 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20  disabled then a 
23950 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69  zero is stored i
23960 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
23970 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
23980 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lear.*/.case OP_
23990 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f  Destroy: {     /
239a0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
239b0 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65  e */.  int iMove
239c0 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a 20  d;.  int iCnt;. 
239d0 20 56 64 62 65 20 2a 70 56 64 62 65 3b 0a 20 20   Vdbe *pVdbe;.  
239e0 69 6e 74 20 69 44 62 3b 0a 23 69 66 6e 64 65 66  int iDb;.#ifndef
239f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
23a00 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74  TUALTABLE.  iCnt
23a10 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56 64 62   = 0;.  for(pVdb
23a20 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70 56 64  e=db->pVdbe; pVd
23a30 62 65 3b 20 70 56 64 62 65 20 3d 20 70 56 64 62  be; pVdbe = pVdb
23a40 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69  e->pNext){.    i
23a50 66 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d  f( pVdbe->magic=
23a60 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20  =VDBE_MAGIC_RUN 
23a70 26 26 20 70 56 64 62 65 2d 3e 69 6e 56 74 61 62  && pVdbe->inVtab
23a80 4d 65 74 68 6f 64 3c 32 20 26 26 20 70 56 64 62  Method<2 && pVdb
23a90 65 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20  e->pc>=0 ){.    
23aa0 20 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a    iCnt++;.    }.
23ab0 20 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74    }.#else.  iCnt
23ac0 20 3d 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62   = db->activeVdb
23ad0 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 20 20 70  eCnt;.#endif.  p
23ae0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
23af0 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 69 43 6e  _Null;.  if( iCn
23b00 74 3e 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  t>1 ){.    rc = 
23b10 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20  SQLITE_LOCKED;. 
23b20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f     p->errorActio
23b30 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20  n = OE_Abort;.  
23b40 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d  }else{.    iDb =
23b50 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73   pOp->p3;.    as
23b60 73 65 72 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b  sert( iCnt==1 );
23b70 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 2d  .    assert( (p-
23b80 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
23b90 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 20  <iDb))!=0 );.   
23ba0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
23bb0 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e  eeDropTable(db->
23bc0 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f  aDb[iDb].pBt, pO
23bd0 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b  p->p1, &iMoved);
23be0 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
23bf0 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
23c00 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76  pOut->u.i = iMov
23c10 65 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ed;.#ifndef SQLI
23c20 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
23c30 55 4d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  UM.    if( rc==S
23c40 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76  QLITE_OK && iMov
23c50 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ed!=0 ){.      s
23c60 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f  qlite3RootPageMo
23c70 76 65 64 28 26 64 62 2d 3e 61 44 62 5b 69 44 62  ved(&db->aDb[iDb
23c80 5d 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e  ], iMoved, pOp->
23c90 70 31 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74  p1);.      reset
23ca0 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
23cb0 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  1;.    }.#endif.
23cc0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
23cd0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72  /* Opcode: Clear
23ce0 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20   P1 P2 P3.**.** 
23cf0 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65  Delete all conte
23d00 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  nts of the datab
23d10 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
23d20 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  ex whose root pa
23d30 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74  ge.** in the dat
23d40 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69  abase file is gi
23d50 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c  ven by P1.  But,
23d60 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c   unlike Destroy,
23d70 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76   do not.** remov
23d80 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  e the table or i
23d90 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61  ndex from the da
23da0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
23db0 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69  ** The table bei
23dc0 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  ng clear is in t
23dd0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
23de0 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20   file if P2==0. 
23df0 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65   If.** P2==1 the
23e00 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
23e10 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
23e20 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
23e30 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
23e40 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
23e50 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
23e60 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
23e70 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
23e80 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76  *.** If the P3 v
23e90 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  alue is non-zero
23ea0 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
23eb0 20 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73   referred to mus
23ec0 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65  t be an.** intke
23ed0 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20  y table (an SQL 
23ee0 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e  table, not an in
23ef0 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61  dex). In this ca
23f00 73 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  se the row chang
23f10 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69  e .** count is i
23f20 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
23f30 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
23f40 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65   in the table be
23f50 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a  ing cleared. .**
23f60 20 49 66 20 50 33 20 69 73 20 67 72 65 61 74 65   If P3 is greate
23f70 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65  r than zero, the
23f80 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  n the value stor
23f90 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
23fa0 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63  3 is.** also inc
23fb0 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20  remented by the 
23fc0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
23fd0 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  n the table bein
23fe0 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a  g cleared..**.**
23ff0 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72   See also: Destr
24000 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  oy.*/.case OP_Cl
24010 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68  ear: {.  int nCh
24020 61 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67  ange;. .  nChang
24030 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  e = 0;.  assert(
24040 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
24050 20 28 31 3c 3c 70 4f 70 2d 3e 70 32 29 29 21 3d   (1<<pOp->p2))!=
24060 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
24070 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62  te3BtreeClearTab
24080 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61 44  le(.      db->aD
24090 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20  b[pOp->p2].pBt, 
240a0 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70  pOp->p1, (pOp->p
240b0 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20 30  3 ? &nChange : 0
240c0 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  ).  );.  if( pOp
240d0 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e  ->p3 ){.    p->n
240e0 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67  Change += nChang
240f0 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  e;.    if( pOp->
24100 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61 4d  p3>0 ){.      aM
24110 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20  em[pOp->p3].u.i 
24120 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
24130 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
24140 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  ../* Opcode: Cre
24150 61 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a  ateTable P1 P2 *
24160 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63   * *.**.** Alloc
24170 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20  ate a new table 
24180 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
24190 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
241a0 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  =0 or in the.** 
241b0 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
241c0 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31  se file if P1==1
241d0 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68   or in an attach
241e0 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a  ed database if.*
241f0 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74  * P1>1.  Write t
24200 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
24210 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ber of the new t
24220 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  able into.** reg
24230 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54  ister P2.**.** T
24240 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
24250 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e  tween a table an
24260 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68  d an index is th
24270 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73  is:  A table mus
24280 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79  t.** have a 4-by
24290 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61  te integer key a
242a0 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72 62 69  nd can have arbi
242b0 74 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20  trary data.  An 
242c0 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20  index.** has an 
242d0 61 72 62 69 74 72 61 72 79 20 6b 65 79 20 62 75  arbitrary key bu
242e0 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a  t no data..**.**
242f0 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74   See also: Creat
24300 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63  eIndex.*/./* Opc
24310 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78  ode: CreateIndex
24320 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
24330 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65  ** Allocate a ne
24340 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d  w index in the m
24350 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
24360 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
24370 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72   the.** auxiliar
24380 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
24390 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
243a0 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
243b0 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
243c0 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20   Write the root 
243d0 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
243e0 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74  he new table int
243f0 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  o.** register P2
24400 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75  ..**.** See docu
24410 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f  mentation on OP_
24420 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20  CreateTable for 
24430 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
24440 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  mation..*/.case 
24450 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20  OP_CreateIndex: 
24460 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
24470 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
24480 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54  .case OP_CreateT
24490 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20  able: {         
244a0 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
244b0 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e  ase */.  int pgn
244c0 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a  o;.  int flags;.
244d0 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67    Db *pDb;..  pg
244e0 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  no = 0;.  assert
244f0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
24500 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
24510 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
24520 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
24530 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
24540 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
24550 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
24560 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
24570 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
24580 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74  opcode==OP_Creat
24590 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  eTable ){.    /*
245a0 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49   flags = BTREE_I
245b0 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c  NTKEY; */.    fl
245c0 61 67 73 20 3d 20 42 54 52 45 45 5f 4c 45 41 46  ags = BTREE_LEAF
245d0 44 41 54 41 7c 42 54 52 45 45 5f 49 4e 54 4b 45  DATA|BTREE_INTKE
245e0 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  Y;.  }else{.    
245f0 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 5a 45  flags = BTREE_ZE
24600 52 4f 44 41 54 41 3b 0a 20 20 7d 0a 20 20 72 63  RODATA;.  }.  rc
24610 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
24620 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e  reateTable(pDb->
24630 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67  pBt, &pgno, flag
24640 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  s);.  pOut->u.i 
24650 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b  = pgno;.  break;
24660 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
24670 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 50 32  arseSchema P1 P2
24680 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
24690 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c  ad and parse all
246a0 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68   entries from th
246b0 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20  e SQLITE_MASTER 
246c0 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73  table of databas
246d0 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74  e P1.** that mat
246e0 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  ch the WHERE cla
246f0 75 73 65 20 50 34 2e 20 20 50 32 20 69 73 20 74  use P4.  P2 is t
24700 68 65 20 22 66 6f 72 63 65 22 20 66 6c 61 67 2e  he "force" flag.
24710 20 20 20 41 6c 77 61 79 73 20 64 6f 0a 2a 2a 20     Always do.** 
24720 74 68 65 20 70 61 72 73 69 6e 67 20 69 66 20 50  the parsing if P
24730 32 20 69 73 20 74 72 75 65 2e 20 20 49 66 20 50  2 is true.  If P
24740 32 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65 6e  2 is false, then
24750 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   this routine is
24760 20 61 0a 2a 2a 20 6e 6f 2d 6f 70 20 69 66 20 74   a.** no-op if t
24770 68 65 20 73 63 68 65 6d 61 20 69 73 20 6e 6f 74  he schema is not
24780 20 63 75 72 72 65 6e 74 6c 79 20 6c 6f 61 64 65   currently loade
24790 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  d.  In other wor
247a0 64 73 2c 20 69 66 20 50 32 0a 2a 2a 20 69 73 20  ds, if P2.** is 
247b0 66 61 6c 73 65 2c 20 74 68 65 20 53 51 4c 49 54  false, the SQLIT
247c0 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 69  E_MASTER table i
247d0 73 20 6f 6e 6c 79 20 70 61 72 73 65 64 20 69 66  s only parsed if
247e0 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
247f0 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 61 6c  .** schema is al
24800 72 65 61 64 79 20 6c 6f 61 64 65 64 20 69 6e 74  ready loaded int
24810 6f 20 74 68 65 20 73 79 6d 62 6f 6c 20 74 61 62  o the symbol tab
24820 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  le..**.** This o
24830 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
24840 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61  e parser to crea
24850 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c  te a new virtual
24860 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65   machine,.** the
24870 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76  n runs the new v
24880 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20  irtual machine. 
24890 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65   It is thus a re
248a0 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e  -entrant opcode.
248b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73  .*/.case OP_Pars
248c0 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74  eSchema: {.  int
248d0 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68   iDb;.  const ch
248e0 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63  ar *zMaster;.  c
248f0 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69  har *zSql;.  Ini
24900 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a  tData initData;.
24910 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
24920 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
24930 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
24940 62 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 70 4f  b );..  /* If pO
24950 70 2d 3e 70 32 20 69 73 20 30 2c 20 74 68 65 6e  p->p2 is 0, then
24960 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
24970 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 20 74  being executed t
24980 6f 20 72 65 61 64 20 61 0a 20 20 2a 2a 20 73 69  o read a.  ** si
24990 6e 67 6c 65 20 72 6f 77 2c 20 66 6f 72 20 65 78  ngle row, for ex
249a0 61 6d 70 6c 65 20 74 68 65 20 72 6f 77 20 63 6f  ample the row co
249b0 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61  rresponding to a
249c0 20 6e 65 77 20 69 6e 64 65 78 0a 20 20 2a 2a 20   new index.  ** 
249d0 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20  created by this 
249e0 56 44 42 45 2c 20 66 72 6f 6d 20 74 68 65 20 73  VDBE, from the s
249f0 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
24a00 6c 65 2e 20 49 74 20 6f 6e 6c 79 0a 20 20 2a 2a  le. It only.  **
24a10 20 64 6f 65 73 20 74 68 69 73 20 69 66 20 74 68   does this if th
24a20 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
24a30 69 6e 2d 6d 65 6d 6f 72 79 20 73 63 68 65 6d 61  in-memory schema
24a40 20 69 73 20 63 75 72 72 65 6e 74 6c 79 0a 20 20   is currently.  
24a50 2a 2a 20 6c 6f 61 64 65 64 2e 20 4f 74 68 65 72  ** loaded. Other
24a60 77 69 73 65 2c 20 74 68 65 20 6e 65 77 20 69 6e  wise, the new in
24a70 64 65 78 20 64 65 66 69 6e 69 74 69 6f 6e 20 63  dex definition c
24a80 61 6e 20 62 65 20 6c 6f 61 64 65 64 20 61 6c 6f  an be loaded alo
24a90 6e 67 0a 20 20 2a 2a 20 77 69 74 68 20 74 68 65  ng.  ** with the
24aa0 20 72 65 73 74 20 6f 66 20 74 68 65 20 73 63 68   rest of the sch
24ab0 65 6d 61 20 77 68 65 6e 20 69 74 20 69 73 20 72  ema when it is r
24ac0 65 71 75 69 72 65 64 2e 0a 20 20 2a 2a 0a 20 20  equired..  **.  
24ad0 2a 2a 20 41 6c 74 68 6f 75 67 68 20 74 68 65 20  ** Although the 
24ae0 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 42 74 53  mutex on the BtS
24af0 68 61 72 65 64 20 6f 62 6a 65 63 74 20 74 68 61  hared object tha
24b00 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
24b10 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 69  .  ** database i
24b20 44 62 20 28 74 68 65 20 64 61 74 61 62 61 73 65  Db (the database
24b30 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
24b40 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
24b50 62 6c 65 0a 20 20 2a 2a 20 72 65 61 64 20 62 79  ble.  ** read by
24b60 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
24b70 6e 29 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  n) is currently 
24b80 68 65 6c 64 2c 20 69 74 20 69 73 20 6e 65 63 65  held, it is nece
24b90 73 73 61 72 79 20 74 6f 0a 20 20 2a 2a 20 6f 62  ssary to.  ** ob
24ba0 74 61 69 6e 20 74 68 65 20 6d 75 74 65 78 65 73  tain the mutexes
24bb0 20 6f 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64   on all attached
24bc0 20 64 61 74 61 62 61 73 65 73 20 62 65 66 6f 72   databases befor
24bd0 65 20 63 68 65 63 6b 69 6e 67 20 69 66 0a 20 20  e checking if.  
24be0 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66  ** the schema of
24bf0 20 69 44 62 20 69 73 20 6c 6f 61 64 65 64 2e 20   iDb is loaded. 
24c00 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65 2c  This is because,
24c10 20 61 74 20 74 68 65 20 73 74 61 72 74 20 6f 66   at the start of
24c20 0a 20 20 2a 2a 20 74 68 65 20 73 71 6c 69 74 65  .  ** the sqlite
24c30 33 5f 65 78 65 63 28 29 20 63 61 6c 6c 20 62 65  3_exec() call be
24c40 6c 6f 77 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c  low, SQLite will
24c50 20 69 6e 76 6f 6b 65 20 0a 20 20 2a 2a 20 73 71   invoke .  ** sq
24c60 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65 72 41  lite3BtreeEnterA
24c70 6c 6c 28 29 2e 20 49 66 20 61 6c 6c 20 6d 75 74  ll(). If all mut
24c80 65 78 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 72  exes are not alr
24c90 65 61 64 79 20 68 65 6c 64 2c 20 74 68 65 0a 20  eady held, the. 
24ca0 20 2a 2a 20 69 44 62 20 6d 75 74 65 78 20 6d 61   ** iDb mutex ma
24cb0 79 20 62 65 20 74 65 6d 70 6f 72 61 72 69 6c 79  y be temporarily
24cc0 20 72 65 6c 65 61 73 65 64 20 74 6f 20 61 76 6f   released to avo
24cd0 69 64 20 64 65 61 64 6c 6f 63 6b 2e 20 49 66 20  id deadlock. If 
24ce0 0a 20 20 2a 2a 20 74 68 69 73 20 68 61 70 70 65  .  ** this happe
24cf0 6e 73 2c 20 74 68 65 6e 20 73 6f 6d 65 20 6f 74  ns, then some ot
24d00 68 65 72 20 74 68 72 65 61 64 20 6d 61 79 20 64  her thread may d
24d10 65 6c 65 74 65 20 74 68 65 20 69 6e 2d 6d 65 6d  elete the in-mem
24d20 6f 72 79 20 0a 20 20 2a 2a 20 73 63 68 65 6d 61  ory .  ** schema
24d30 20 6f 66 20 64 61 74 61 62 61 73 65 20 69 44 62   of database iDb
24d40 20 62 65 66 6f 72 65 20 74 68 65 20 53 51 4c 20   before the SQL 
24d50 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2e 20  statement runs. 
24d60 54 68 65 20 73 63 68 65 6d 61 0a 20 20 2a 2a 20  The schema.  ** 
24d70 77 69 6c 6c 20 6e 6f 74 20 62 65 20 72 65 6c 6f  will not be relo
24d80 61 64 65 64 20 62 65 63 75 61 73 65 20 74 68 65  aded becuase the
24d90 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 66   db->init.busy f
24da0 6c 61 67 20 69 73 20 73 65 74 2e 20 54 68 69 73  lag is set. This
24db0 0a 20 20 2a 2a 20 63 61 6e 20 72 65 73 75 6c 74  .  ** can result
24dc0 20 69 6e 20 61 20 22 6e 6f 20 73 75 63 68 20 74   in a "no such t
24dd0 61 62 6c 65 3a 20 73 71 6c 69 74 65 5f 6d 61 73  able: sqlite_mas
24de0 74 65 72 22 20 6f 72 20 22 6d 61 6c 66 6f 72 6d  ter" or "malform
24df0 65 64 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65  ed.  ** database
24e00 20 73 63 68 65 6d 61 22 20 65 72 72 6f 72 20 62   schema" error b
24e10 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 74 6f  eing returned to
24e20 20 74 68 65 20 75 73 65 72 2e 0a 20 20 2a 2f 0a   the user..  */.
24e30 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
24e40 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78  3BtreeHoldsMutex
24e50 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
24e60 74 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 42  t) );.  sqlite3B
24e70 74 72 65 65 45 6e 74 65 72 41 6c 6c 28 64 62 29  treeEnterAll(db)
24e80 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20  ;.  if( pOp->p2 
24e90 7c 7c 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  || DbHasProperty
24ea0 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68  (db, iDb, DB_Sch
24eb0 65 6d 61 4c 6f 61 64 65 64 29 20 29 7b 0a 20 20  emaLoaded) ){.  
24ec0 20 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45    zMaster = SCHE
24ed0 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20  MA_TABLE(iDb);. 
24ee0 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d     initData.db =
24ef0 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74   db;.    initDat
24f00 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b  a.iDb = pOp->p1;
24f10 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a  .    initData.pz
24f20 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72  ErrMsg = &p->zEr
24f30 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d  rMsg;.    zSql =
24f40 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
24f50 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45  db,.       "SELE
24f60 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67  CT name, rootpag
24f70 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27  e, sql FROM '%q'
24f80 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f 52 44  .%s WHERE %s ORD
24f90 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20  ER BY rowid",.  
24fa0 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62       db->aDb[iDb
24fb0 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72  ].zName, zMaster
24fc0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
24fd0 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b    if( zSql==0 ){
24fe0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
24ff0 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65  TE_NOMEM;.    }e
25000 6c 73 65 7b 0a 20 20 20 20 20 20 28 76 6f 69 64  lse{.      (void
25010 29 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66  )sqlite3SafetyOf
25020 66 28 64 62 29 3b 0a 20 20 20 20 20 20 61 73 73  f(db);.      ass
25030 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75  ert( db->init.bu
25040 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64  sy==0 );.      d
25050 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31  b->init.busy = 1
25060 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74 61  ;.      initData
25070 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  .rc = SQLITE_OK;
25080 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 21  .      assert( !
25090 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
250a0 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
250b0 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20  qlite3_exec(db, 
250c0 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69  zSql, sqlite3Ini
250d0 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74  tCallback, &init
250e0 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20  Data, 0);.      
250f0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
25100 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74  K ) rc = initDat
25110 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c 69  a.rc;.      sqli
25120 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 53  te3DbFree(db, zS
25130 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  ql);.      db->i
25140 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20  nit.busy = 0;.  
25150 20 20 20 20 28 76 6f 69 64 29 73 71 6c 69 74 65      (void)sqlite
25160 33 53 61 66 65 74 79 4f 6e 28 64 62 29 3b 0a 20  3SafetyOn(db);. 
25170 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74     }.  }.  sqlit
25180 65 33 42 74 72 65 65 4c 65 61 76 65 41 6c 6c 28  e3BtreeLeaveAll(
25190 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  db);.  if( rc==S
251a0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
251b0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
251c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d    }.  break;  .}
251d0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
251e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
251f0 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  ZE)./* Opcode: L
25200 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a  oadAnalysis P1 *
25210 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61   * * *.**.** Rea
25220 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  d the sqlite_sta
25230 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74  t1 table for dat
25240 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61  abase P1 and loa
25250 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  d the content.**
25260 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20 69   of that table i
25270 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  nto the internal
25280 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c   index hash tabl
25290 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  e.  This will ca
252a0 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79  use.** the analy
252b0 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 77  sis to be used w
252c0 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c  hen preparing al
252d0 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75 65  l subsequent que
252e0 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ries..*/.case OP
252f0 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b  _LoadAnalysis: {
25300 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25310 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
25320 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63  <db->nDb );.  rc
25330 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73   = sqlite3Analys
25340 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e  isLoad(db, pOp->
25350 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a  p1);.  break;  .
25360 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
25370 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
25380 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a  _ANALYZE) */../*
25390 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62   Opcode: DropTab
253a0 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  le P1 * * P4 *.*
253b0 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
253c0 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
253d0 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
253e0 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
253f0 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  be.** the table 
25400 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
25410 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
25420 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
25430 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f   table.** is dro
25440 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  pped in order to
25450 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e   keep the intern
25460 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
25470 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
25480 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
25490 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
254a0 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
254b0 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71  ropTable: {.  sq
254c0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
254d0 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f  leteTable(db, pO
254e0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
254f0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
25500 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e  * Opcode: DropIn
25510 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  dex P1 * * P4 *.
25520 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
25530 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
25540 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
25550 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
25560 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78  ibe.** the index
25570 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
25580 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
25590 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
255a0 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64  an index.** is d
255b0 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20  ropped in order 
255c0 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
255d0 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
255e0 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
255f0 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
25600 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
25610 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
25620 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20  _DropIndex: {.  
25630 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
25640 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20  DeleteIndex(db, 
25650 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
25660 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
25670 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
25680 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50  Trigger P1 * * P
25690 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65  4 *.**.** Remove
256a0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69   the internal (i
256b0 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73  n-memory) data s
256c0 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
256d0 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74  escribe.** the t
256e0 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20  rigger named P4 
256f0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
25700 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
25710 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72 0a  after a trigger.
25720 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e  ** is dropped in
25730 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74   order to keep t
25740 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
25750 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
25760 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
25770 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
25780 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
25790 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67  case OP_DropTrig
257a0 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ger: {.  sqlite3
257b0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
257c0 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e  rigger(db, pOp->
257d0 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
257e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
257f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
25800 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
25810 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65  ./* Opcode: Inte
25820 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50 33  grityCk P1 P2 P3
25830 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61   * P5.**.** Do a
25840 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68  n analysis of th
25850 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  e currently open
25860 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72   database.  Stor
25870 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  e in.** register
25880 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66 20   P1 the text of 
25890 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
258a0 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20   describing any 
258b0 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20  problems..** If 
258c0 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20  no problems are 
258d0 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e  found, store a N
258e0 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20  ULL in register 
258f0 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  P1..**.** The re
25900 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
25910 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  ns the maximum n
25920 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64  umber of allowed
25930 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d   errors..** At m
25940 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72 6f  ost reg(P3) erro
25950 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72  rs will be repor
25960 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ted..** In other
25970 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c   words, the anal
25980 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f  ysis stops as so
25990 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65 72  on as reg(P1) er
259a0 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65  rors are .** see
259b0 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20 75  n.  Reg(P1) is u
259c0 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
259d0 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  number of errors
259e0 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a   remaining..**.*
259f0 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20  * The root page 
25a00 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74  numbers of all t
25a10 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74  ables in the dat
25a20 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67 65  abase are intege
25a30 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 72  r.** stored in r
25a40 65 67 28 50 31 29 2c 20 72 65 67 28 50 31 2b 31  eg(P1), reg(P1+1
25a50 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e  ), reg(P1+2), ..
25a60 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20 50 32  ..  There are P2
25a70 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c   tables.** total
25a80 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
25a90 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63   not zero, the c
25aa0 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20  heck is done on 
25ab0 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
25ac0 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20  tabase.** file, 
25ad0 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74  not the main dat
25ae0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
25af0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
25b00 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
25b10 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  nt the integrity
25b20 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a  _check pragma..*
25b30 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72  /.case OP_Integr
25b40 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e  ityCk: {.  int n
25b50 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75  Root;      /* Nu
25b60 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74  mber of tables t
25b70 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65  o check.  (Numbe
25b80 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e  r of root pages.
25b90 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f  ) */.  int *aRoo
25ba0 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20  t;     /* Array 
25bb0 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62  of rootpage numb
25bc0 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74  ers for tables t
25bd0 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a  o be checked */.
25be0 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20    int j;        
25bf0 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
25c00 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  r */.  int nErr;
25c10 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
25c20 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72   of errors repor
25c30 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ted */.  char *z
25c40 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74  ;        /* Text
25c50 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72 65   of the error re
25c60 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  port */.  Mem *p
25c70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67  nErr;     /* Reg
25c80 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72  ister keeping tr
25c90 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ack of errors re
25ca0 6d 61 69 6e 69 6e 67 20 2a 2f 0a 20 20 0a 20 20  maining */.  .  
25cb0 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b  nRoot = pOp->p2;
25cc0 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74  .  assert( nRoot
25cd0 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20  >0 );.  aRoot = 
25ce0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
25cf0 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e  aw(db, sizeof(in
25d00 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a  t)*(nRoot+1) );.
25d10 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29    if( aRoot==0 )
25d20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
25d30 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
25d40 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
25d50 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e 45 72 72  >nMem );.  pnErr
25d60 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
25d70 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e  ];.  assert( (pn
25d80 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Err->flags & MEM
25d90 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73  _Int)!=0 );.  as
25da0 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c  sert( (pnErr->fl
25db0 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
25dc0 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a  EM_Blob))==0 );.
25dd0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
25de0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a  Op->p1];.  for(j
25df0 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b  =0; j<nRoot; j++
25e00 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20  ){.    aRoot[j] 
25e10 3d 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56 64  = (int)sqlite3Vd
25e20 62 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31  beIntValue(&pIn1
25e30 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f  [j]);.  }.  aRoo
25e40 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65  t[j] = 0;.  asse
25e50 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e  rt( pOp->p5<db->
25e60 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
25e70 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
25e80 20 28 31 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d   (1<<pOp->p5))!=
25e90 30 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74  0 );.  z = sqlit
25ea0 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79  e3BtreeIntegrity
25eb0 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f  Check(db->aDb[pO
25ec0 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f  p->p5].pBt, aRoo
25ed0 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20  t, nRoot,.      
25ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ef0 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
25f00 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72  pnErr->u.i, &nEr
25f10 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  r);.  sqlite3DbF
25f20 72 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a  ree(db, aRoot);.
25f30 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20    pnErr->u.i -= 
25f40 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56  nErr;.  sqlite3V
25f50 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
25f60 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d  n1);.  if( nErr=
25f70 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
25f80 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73  ( z==0 );.  }els
25f90 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20  e if( z==0 ){.  
25fa0 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
25fb0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
25fc0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
25fd0 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51  (pIn1, z, -1, SQ
25fe0 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74  LITE_UTF8, sqlit
25ff0 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20  e3_free);.  }.  
26000 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
26010 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c  IZE(pIn1);.  sql
26020 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
26030 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63  coding(pIn1, enc
26040 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b  oding);.  break;
26050 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
26060 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
26070 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20  TY_CHECK */../* 
26080 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64  Opcode: RowSetAd
26090 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
260a0 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69  .** Insert the i
260b0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c  nteger value hel
260c0 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32  d by register P2
260d0 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20   into a boolean 
260e0 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e  index.** held in
260f0 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
26100 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e  .** An assertion
26110 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20   fails if P2 is 
26120 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  not an integer..
26130 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
26140 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a  tAdd: {       /*
26150 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70   in1, in2 */.  p
26160 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
26170 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
26180 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
26190 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e   assert( (pIn2->
261a0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
261b0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49  !=0 );.  if( (pI
261c0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
261d0 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20  RowSet)==0 ){.  
261e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
261f0 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b  SetRowSet(pIn1);
26200 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
26210 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
26220 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  et)==0 ) goto no
26230 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  _mem;.  }.  sqli
26240 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
26250 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
26260 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62   pIn2->u.i);.  b
26270 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
26280 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50  de: RowSetRead P
26290 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
262a0 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73 6d  * Extract the sm
262b0 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f  allest value fro
262c0 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  m boolean index 
262d0 50 31 20 61 6e 64 20 70 75 74 20 74 68 61 74 20  P1 and put that 
262e0 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  value into.** re
262f0 67 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20  gister P3.  Or, 
26300 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  if boolean index
26310 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79   P1 is initially
26320 20 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33   empty, leave P3
26330 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e  .** unchanged an
26340 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  d jump to instru
26350 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ction P2..*/.cas
26360 65 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a  e OP_RowSetRead:
26370 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
26380 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in1, out3 */. 
26390 20 69 36 34 20 76 61 6c 3b 0a 20 20 43 48 45 43   i64 val;.  CHEC
263a0 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b  K_FOR_INTERRUPT;
263b0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
263c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
263d0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
263e0 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20  EM_RowSet)==0 . 
263f0 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53    || sqlite3RowS
26400 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70  etNext(pIn1->u.p
26410 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30  RowSet, &val)==0
26420 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  .  ){.    /* The
26430 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69   boolean index i
26440 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73  s empty */.    s
26450 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
26460 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20  Null(pIn1);.    
26470 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
26480 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
26490 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20 70 75  * A value was pu
264a0 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e  lled from the in
264b0 64 65 78 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  dex */.    sqlit
264c0 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
264d0 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  4(&aMem[pOp->p3]
264e0 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 62 72  , val);.  }.  br
264f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
26500 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50 31  e: RowSetTest P1
26510 20 50 32 20 50 33 20 50 34 0a 2a 2a 0a 2a 2a 20   P2 P3 P4.**.** 
26520 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61  Register P3 is a
26530 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61  ssumed to hold a
26540 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20   64-bit integer 
26550 76 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74  value. If regist
26560 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e  er P1.** contain
26570 73 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  s a RowSet objec
26580 74 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65  t and that RowSe
26590 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e  t object contain
265a0 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68  s.** the value h
265b0 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20  eld in P3, jump 
265c0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  to register P2. 
265d0 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72  Otherwise, inser
265e0 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72  t the.** integer
265f0 20 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20   in P3 into the 
26600 52 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69  RowSet and conti
26610 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a  nue on to the.**
26620 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a   next opcode..**
26630 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f  .** The RowSet o
26640 62 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a  bject is optimiz
26650 65 64 20 66 6f 72 20 74 68 65 20 63 61 73 65 20  ed for the case 
26660 77 68 65 72 65 20 73 75 63 63 65 73 73 69 76 65  where successive
26670 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65   sets.** of inte
26680 67 65 72 73 2c 20 77 68 65 72 65 20 65 61 63 68  gers, where each
26690 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f   set contains no
266a0 20 64 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63   duplicates. Eac
266b0 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75  h set.** of valu
266c0 65 73 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  es is identified
266d0 20 62 79 20 61 20 75 6e 69 71 75 65 20 50 34 20   by a unique P4 
266e0 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74  value. The first
266f0 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76   set.** must hav
26700 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e  e P4==0, the fin
26710 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50  al set P4=-1.  P
26720 34 20 6d 75 73 74 20 62 65 20 65 69 74 68 65 72  4 must be either
26730 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65   -1 or.** non-ne
26740 67 61 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e  gative.  For non
26750 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73  -negative values
26760 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20   of P4 only the 
26770 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20  lower 4.** bits 
26780 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e  are significant.
26790 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f  .**.** This allo
267a0 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ws optimizations
267b0 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30  : (a) when P4==0
267c0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
267d0 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65  d to test.** the
267e0 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66   rowset object f
267f0 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69 73 20  or P3, as it is 
26800 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74  guaranteed not t
26810 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a  o contain it,.**
26820 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31   (b) when P4==-1
26830 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
26840 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20  d to insert the 
26850 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c  value, as it wil
26860 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65  l.** never be te
26870 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63  sted for, and (c
26880 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74  ) when a value t
26890 68 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 73  hat is part of s
268a0 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72  et X is.** inser
268b0 74 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f  ted, there is no
268c0 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68 20   need to search 
268d0 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 73 61  to see if the sa
268e0 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20  me value was.** 
268f0 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72  previously inser
26900 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73  ted as part of s
26910 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74  et X (only if it
26920 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a   was previously.
26930 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20 70  ** inserted as p
26940 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65  art of some othe
26950 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20  r set)..*/.case 
26960 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b  OP_RowSetTest: {
26970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26980 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
26990 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  1, in3 */.  int 
269a0 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73  iSet;.  int exis
269b0 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  ts;..  pIn1 = &a
269c0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
269d0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
269e0 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20  ->p3];.  iSet = 
269f0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73  pOp->p4.i;.  ass
26a00 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
26a10 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f  &MEM_Int );..  /
26a20 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61 6e  * If there is an
26a30 79 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61  ything other tha
26a40 6e 20 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63  n a rowset objec
26a50 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  t in memory cell
26a60 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65   P1,.  ** delete
26a70 20 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74   it now and init
26a80 69 61 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61  ialize P1 with a
26a90 6e 20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20  n empty rowset. 
26aa0 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   */.  if( (pIn1-
26ab0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
26ac0 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  Set)==0 ){.    s
26ad0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
26ae0 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20  RowSet(pIn1);.  
26af0 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
26b00 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
26b10 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
26b20 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74  m;.  }..  assert
26b30 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
26b40 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73  4_INT32 );.  ass
26b50 65 72 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c  ert( iSet==-1 ||
26b60 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66   iSet>=0 );.  if
26b70 28 20 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78  ( iSet ){.    ex
26b80 69 73 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f  ists = sqlite3Ro
26b90 77 53 65 74 54 65 73 74 28 70 49 6e 31 2d 3e 75  wSetTest(pIn1->u
26ba0 2e 70 52 6f 77 53 65 74 2c 20 0a 20 20 20 20 20  .pRowSet, .     
26bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bc0 20 20 20 20 20 20 20 20 20 20 28 75 38 29 28 69            (u8)(i
26bd0 53 65 74 3e 3d 30 20 3f 20 69 53 65 74 20 26 20  Set>=0 ? iSet & 
26be0 30 78 66 20 3a 20 30 78 66 66 29 2c 0a 20 20 20  0xf : 0xff),.   
26bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c00 20 20 20 20 20 20 20 20 20 20 20 20 70 49 6e 33              pIn3
26c10 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 69 66 28 20  ->u.i);.    if( 
26c20 65 78 69 73 74 73 20 29 7b 0a 20 20 20 20 20 20  exists ){.      
26c30 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
26c40 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
26c50 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69     }.  }.  if( i
26c60 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71  Set>=0 ){.    sq
26c70 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
26c80 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
26c90 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20  t, pIn3->u.i);. 
26ca0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a   }.  break;.}...
26cb0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
26cc0 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20  MIT_TRIGGER../* 
26cd0 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20  Opcode: Program 
26ce0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
26cf0 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
26d00 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
26d10 70 61 73 73 65 64 20 61 73 20 50 34 20 28 74 79  passed as P4 (ty
26d20 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d  pe P4_SUBPROGRAM
26d30 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e  ). .**.** P1 con
26d40 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
26d50 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  s of the memory 
26d60 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69  cell that contai
26d70 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d  ns the first mem
26d80 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20  ory .** cell in 
26d90 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75  an array of valu
26da0 65 73 20 75 73 65 64 20 61 73 20 61 72 67 75 6d  es used as argum
26db0 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d  ents to the sub-
26dc0 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20  program. P2 .** 
26dd0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
26de0 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
26df0 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  if the sub-progr
26e00 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e  am throws an IGN
26e10 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f  ORE .** exceptio
26e20 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41 49 53  n using the RAIS
26e30 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65  E() function. Re
26e40 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
26e50 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 0a  ns the address .
26e60 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63  ** of a memory c
26e70 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65  ell in this (the
26e80 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74   parent) VM that
26e90 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f   is used to allo
26ea0 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d  cate the .** mem
26eb0 6f 72 79 20 72 65 71 75 69 72 65 64 20 62 79 20  ory required by 
26ec0 74 68 65 20 73 75 62 2d 76 64 62 65 20 61 74 20  the sub-vdbe at 
26ed0 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50  runtime..**.** P
26ee0 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
26ef0 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e  o the VM contain
26f00 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
26f10 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65  program..*/.case
26f20 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20   OP_Program: {  
26f30 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
26f40 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20  .  int nMem;    
26f50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
26f60 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72  mber of memory r
26f70 65 67 69 73 74 65 72 73 20 66 6f 72 20 73 75 62  egisters for sub
26f80 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e  -program */.  in
26f90 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  t nByte;        
26fa0 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f        /* Bytes o
26fb0 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20  f runtime space 
26fc0 72 65 71 75 69 72 65 64 20 66 6f 72 20 73 75 62  required for sub
26fd0 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65  -program */.  Me
26fe0 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20  m *pRt;         
26ff0 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
27000 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75  r to allocate ru
27010 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20  ntime space */. 
27020 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
27030 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64           /* Used
27040 20 74 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f   to iterate thro
27050 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73  ugh memory cells
27060 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b   */.  Mem *pEnd;
27070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
27080 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c   Last memory cel
27090 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a  l in new array *
270a0 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
270b0 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  Frame;      /* N
270c0 65 77 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f  ew vdbe frame to
270d0 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20   execute in */. 
270e0 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
270f0 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d  ogram;   /* Sub-
27100 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75  program to execu
27110 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b  te */.  void *t;
27120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27130 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66  /* Token identif
27140 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a  ying trigger */.
27150 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f  .  pProgram = pO
27160 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a  p->p4.pProgram;.
27170 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f    pRt = &aMem[pO
27180 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
27190 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e  ( pProgram->nOp>
271a0 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20  0 );.  .  /* If 
271b0 74 68 65 20 70 35 20 66 6c 61 67 20 69 73 20 63  the p5 flag is c
271c0 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72  lear, then recur
271d0 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20  sive invocation 
271e0 6f 66 20 74 72 69 67 67 65 72 73 20 69 73 20 0a  of triggers is .
271f0 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f    ** disabled fo
27200 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70  r backwards comp
27210 61 74 69 62 69 6c 69 74 79 20 28 70 35 20 69 73  atibility (p5 is
27220 20 73 65 74 20 69 66 20 74 68 69 73 20 73 75 62   set if this sub
27230 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73  -program.  ** is
27240 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65   really a trigge
27250 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e  r, not a foreign
27260 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64   key action, and
27270 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20   the flag set.  
27280 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62  ** and cleared b
27290 79 20 74 68 65 20 22 50 52 41 47 4d 41 20 72 65  y the "PRAGMA re
272a0 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73  cursive_triggers
272b0 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65  " command is cle
272c0 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20  ar)..  ** .  ** 
272d0 49 74 20 69 73 20 72 65 63 75 72 73 69 76 65 20  It is recursive 
272e0 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72  invocation of tr
272f0 69 67 67 65 72 73 2c 20 61 74 20 74 68 65 20 53  iggers, at the S
27300 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69  QL level, that i
27310 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64  s .  ** disabled
27320 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20  . In some cases 
27330 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72  a single trigger
27340 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f   may generate mo
27350 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a  re than one .  *
27360 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66  * SubProgram (if
27370 20 74 68 65 20 74 72 69 67 67 65 72 20 6d 61 79   the trigger may
27380 20 62 65 20 65 78 65 63 75 74 65 64 20 77 69 74   be executed wit
27390 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  h more than one 
273a0 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20  different .  ** 
273b0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
273c0 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72  rithm). SubProgr
273d0 61 6d 20 73 74 72 75 63 74 75 72 65 73 20 61 73  am structures as
273e0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 0a  sociated with a.
273f0 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67    ** single trig
27400 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65  ger all have the
27410 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20   same value for 
27420 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74  the SubProgram.t
27430 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61  oken .  ** varia
27440 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70  ble.  */.  if( p
27450 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20  Op->p5 ){.    t 
27460 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
27470 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d  n;.    for(pFram
27480 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
27490 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74  ame && pFrame->t
274a0 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d  oken!=t; pFrame=
274b0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
274c0 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d 65  ;.    if( pFrame
274d0 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20   ) break;.  }.. 
274e0 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d   if( p->nFrame>=
274f0 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
27500 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f  E_LIMIT_TRIGGER_
27510 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63  DEPTH] ){.    rc
27520 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
27530 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
27540 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
27550 67 2c 20 64 62 2c 20 22 74 6f 6f 20 6d 61 6e 79  g, db, "too many
27560 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67   levels of trigg
27570 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a  er recursion");.
27580 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
27590 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52    /* Register pR
275a0 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
275b0 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65  re the memory re
275c0 71 75 69 72 65 64 20 74 6f 20 73 61 76 65 20 74  quired to save t
275d0 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66  he state.  ** of
275e0 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
275f0 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65  gram, and the me
27600 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 61 74  mory required at
27610 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63   runtime to exec
27620 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69  ute.  ** the tri
27630 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66  gger program. If
27640 20 74 68 69 73 20 74 72 69 67 67 65 72 20 68 61   this trigger ha
27650 73 20 62 65 65 6e 20 66 69 72 65 64 20 62 65 66  s been fired bef
27660 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20  ore, then pRt . 
27670 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61   ** is already a
27680 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77  llocated. Otherw
27690 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20  ise, it must be 
276a0 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f  initialized.  */
276b0 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61  .  if( (pRt->fla
276c0 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30  gs&MEM_Frame)==0
276d0 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72   ){.    /* SubPr
276e0 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65  ogram.nMem is se
276f0 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
27700 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
27710 75 73 65 64 20 62 79 20 74 68 65 20 0a 20 20 20  used by the .   
27720 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72   ** program stor
27730 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d  ed in SubProgram
27740 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73  .aOp. As well as
27750 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f   these, one memo
27760 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69  ry.    ** cell i
27770 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65  s required for e
27780 61 63 68 20 63 75 72 73 6f 72 20 75 73 65 64 20  ach cursor used 
27790 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  by the program. 
277a0 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a  Set local.    **
277b0 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28   variable nMem (
277c0 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46  and later, VdbeF
277d0 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20  rame.nChildMem) 
277e0 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20  to this value.. 
277f0 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d     */.    nMem =
27800 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20   pProgram->nMem 
27810 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
27820 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f  ;.    nByte = RO
27830 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65  UND8(sizeof(Vdbe
27840 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20  Frame)).        
27850 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73        + nMem * s
27860 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20  izeof(Mem).     
27870 20 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67           + pProg
27880 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65  ram->nCsr * size
27890 6f 66 28 56 64 62 65 43 75 72 73 6f 72 20 2a 29  of(VdbeCursor *)
278a0 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73  ;.    pFrame = s
278b0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
278c0 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20  ro(db, nByte);. 
278d0 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29     if( !pFrame )
278e0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
278f0 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  mem;.    }.    s
27900 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
27910 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70  ease(pRt);.    p
27920 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  Rt->flags = MEM_
27930 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e  Frame;.    pRt->
27940 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  u.pFrame = pFram
27950 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  e;..    pFrame->
27960 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d  v = p;.    pFram
27970 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e  e->nChildMem = n
27980 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
27990 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72  >nChildCsr = pPr
279a0 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
279b0 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63   pFrame->pc = pc
279c0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d  ;.    pFrame->aM
279d0 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
279e0 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d    pFrame->nMem =
279f0 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46   p->nMem;.    pF
27a00 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d  rame->apCsr = p-
27a10 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61  >apCsr;.    pFra
27a20 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d  me->nCursor = p-
27a30 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46  >nCursor;.    pF
27a40 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61  rame->aOp = p->a
27a50 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
27a60 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20  nOp = p->nOp;.  
27a70 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20    pFrame->token 
27a80 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
27a90 6e 3b 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26  n;..    pEnd = &
27aa0 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
27ab0 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68  ame)[pFrame->nCh
27ac0 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72  ildMem];.    for
27ad0 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d  (pMem=VdbeFrameM
27ae0 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d  em(pFrame); pMem
27af0 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b  !=pEnd; pMem++){
27b00 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61  .      pMem->fla
27b10 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
27b20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20       pMem->db = 
27b30 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  db;.    }.  }els
27b40 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  e{.    pFrame = 
27b50 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20  pRt->u.pFrame;. 
27b60 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67     assert( pProg
27b70 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72  ram->nMem+pProgr
27b80 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65  am->nCsr==pFrame
27b90 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20  ->nChildMem );. 
27ba0 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67     assert( pProg
27bb0 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d  ram->nCsr==pFram
27bc0 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a  e->nChildCsr );.
27bd0 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3d 3d      assert( pc==
27be0 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20  pFrame->pc );.  
27bf0 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b  }..  p->nFrame++
27c00 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  ;.  pFrame->pPar
27c10 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ent = p->pFrame;
27c20 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52  .  pFrame->lastR
27c30 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
27c40 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  owid;.  pFrame->
27c50 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68  nChange = p->nCh
27c60 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e  ange;.  p->nChan
27c70 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72  ge = 0;.  p->pFr
27c80 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20  ame = pFrame;.  
27c90 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d  p->aMem = aMem =
27ca0 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70   &VdbeFrameMem(p
27cb0 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d  Frame)[-1];.  p-
27cc0 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e  >nMem = pFrame->
27cd0 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e  nChildMem;.  p->
27ce0 6e 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70  nCursor = (u16)p
27cf0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
27d00 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28  ;.  p->apCsr = (
27d10 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61  VdbeCursor **)&a
27d20 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a  Mem[p->nMem+1];.
27d30 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d    p->aOp = aOp =
27d40 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a   pProgram->aOp;.
27d50 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67    p->nOp = pProg
27d60 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 63 20 3d  ram->nOp;.  pc =
27d70 20 2d 31 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d   -1;..  break;.}
27d80 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72  ../* Opcode: Par
27d90 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  am P1 P2 * * *.*
27da0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
27db0 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72   is only ever pr
27dc0 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f  esent in sub-pro
27dd0 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61  grams called via
27de0 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67   the .** OP_Prog
27df0 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ram instruction.
27e00 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75   Copy a value cu
27e10 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69  rrently stored i
27e20 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63  n a memory .** c
27e30 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69  ell of the calli
27e40 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d  ng (parent) fram
27e50 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20  e to cell P2 in 
27e60 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d  the current fram
27e70 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73  es .** address s
27e80 70 61 63 65 2e 20 54 68 69 73 20 69 73 20 75 73  pace. This is us
27e90 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
27ea0 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73  ograms to access
27eb0 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61   the new.* .** a
27ec0 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e  nd old.* values.
27ed0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65  .**.** The addre
27ee0 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69  ss of the cell i
27ef0 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  n the parent fra
27f00 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  me is determined
27f10 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68   by adding.** th
27f20 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
27f30 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
27f40 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
27f50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
27f60 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f  e.** calling OP_
27f70 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74  Program instruct
27f80 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
27f90 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20  Param: {        
27fa0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
27fb0 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 46  lease */.  VdbeF
27fc0 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
27fd0 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 46 72 61  Mem *pIn;.  pFra
27fe0 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
27ff0 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d    pIn = &pFrame-
28000 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20  >aMem[pOp->p1 + 
28010 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61  pFrame->aOp[pFra
28020 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a  me->pc].p1];   .
28030 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
28040 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
28050 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d  , pIn, MEM_Ephem
28060 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  );.  break;.}..#
28070 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
28080 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
28090 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GGER */..#ifndef
280a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
280b0 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f  EIGN_KEY./* Opco
280c0 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31  de: FkCounter P1
280d0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
280e0 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e  Increment a "con
280f0 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22  straint counter"
28100 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20 62   by P2 (P2 may b
28110 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f  e negative or po
28120 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50  sitive)..** If P
28130 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  1 is non-zero, t
28140 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
28150 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69  traint counter i
28160 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a  s incremented .*
28170 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72 65  * (deferred fore
28180 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
28190 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c  nts). Otherwise,
281a0 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20   if P1 is zero, 
281b0 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  the .** statemen
281c0 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
281d0 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69  remented (immedi
281e0 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
281f0 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f  constraints)..*/
28200 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74  .case OP_FkCount
28210 65 72 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d  er: {.  if( pOp-
28220 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e  >p1 ){.    db->n
28230 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20  DeferredCons += 
28240 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
28250 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73  {.    p->nFkCons
28260 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70  traint += pOp->p
28270 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
28280 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  }../* Opcode: Fk
28290 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a  IfZero P1 P2 * *
282a0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
282b0 63 6f 64 65 20 74 65 73 74 73 20 69 66 20 61 20  code tests if a 
282c0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
282d0 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
282e0 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f  s currently zero
282f0 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70  ..** If so, jump
28300 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
28310 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
28320 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
28330 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74  he next .** inst
28340 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  ruction..**.** I
28350 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
28360 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20  , then the jump 
28370 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
28380 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
28390 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69  int-counter.** i
283a0 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20  s zero (the one 
283b0 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65  that counts defe
283c0 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20  rred constraint 
283d0 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20  violations). If 
283e0 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74  P1 is.** zero, t
283f0 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
28400 20 69 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   if the statemen
28410 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  t constraint-cou
28420 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20  nter is zero.** 
28430 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69  (immediate forei
28440 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
28450 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a  t violations)..*
28460 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65  /.case OP_FkIfZe
28470 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  ro: {         /*
28480 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70   jump */.  if( p
28490 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 69 66  Op->p1 ){.    if
284a0 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  ( db->nDeferredC
284b0 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f  ons==0 ) pc = pO
284c0 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65  p->p2-1;.  }else
284d0 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b  {.    if( p->nFk
284e0 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 29 20  Constraint==0 ) 
284f0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
28500 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
28510 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
28520 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
28530 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66  EIGN_KEY */..#if
28540 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
28550 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f  _AUTOINCREMENT./
28560 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78  * Opcode: MemMax
28570 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
28580 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69 73  ** P1 is a regis
28590 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
285a0 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d  frame of this VM
285b0 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65   (the root frame
285c0 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74   is.** different
285d0 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
285e0 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73 20  t frame if this 
285f0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62  instruction is b
28600 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a  eing executed.**
28610 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72   within a sub-pr
28620 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20  ogram). Set the 
28630 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
28640 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69  r P1 to the maxi
28650 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63  mum of .** its c
28660 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64  urrent value and
28670 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
28680 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
28690 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
286a0 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f  n throws an erro
286b0 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  r if the memory 
286c0 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74  cell is not init
286d0 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65  ially.** an inte
286e0 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ger..*/.case OP_
286f0 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20  MemMax: {       
28700 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d   /* in2 */.  Mem
28710 20 2a 70 49 6e 31 3b 0a 20 20 56 64 62 65 46 72   *pIn1;.  VdbeFr
28720 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
28730 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
28740 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
28750 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
28760 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d  ->pParent; pFram
28770 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
28780 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  t);.    pIn1 = &
28790 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
287a0 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->p1];.  }else{.
287b0 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d      pIn1 = &aMem
287c0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20  [pOp->p1];.  }. 
287d0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
287e0 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
287f0 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
28800 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69  pOp->p2];.  sqli
28810 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
28820 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66  rify(pIn2);.  if
28830 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32  ( pIn1->u.i<pIn2
28840 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31  ->u.i){.    pIn1
28850 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e  ->u.i = pIn2->u.
28860 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  i;.  }.  break;.
28870 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
28880 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
28890 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  EMENT */../* Opc
288a0 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32  ode: IfPos P1 P2
288b0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20   * * *.**.** If 
288c0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
288d0 69 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72  ister P1 is 1 or
288e0 20 67 72 65 61 74 65 72 2c 20 6a 75 6d 70 20 74   greater, jump t
288f0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69  o P2..**.** It i
28900 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65  s illegal to use
28910 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
28920 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20  n on a register 
28930 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  that does.** not
28940 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
28950 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69  ger.  An asserti
28960 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65  on fault will re
28970 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e  sult if you try.
28980 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f  .*/.case OP_IfPo
28990 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
289a0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
289b0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
289c0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
289d0 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
289e0 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  nt );.  if( pIn1
289f0 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20  ->u.i>0 ){.     
28a00 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
28a10 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
28a20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e  ../* Opcode: IfN
28a30 65 67 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  eg P1 P2 * * *.*
28a40 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  *.** If the valu
28a50 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
28a60 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 7a 65   is less than ze
28a70 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  ro, jump to P2. 
28a80 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
28a90 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
28aa0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
28ab0 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
28ac0 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
28ad0 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
28ae0 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
28af0 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
28b00 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
28b10 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20  ase OP_IfNeg: { 
28b20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
28b30 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
28b40 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
28b50 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
28b60 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
28b70 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
28b80 3c 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  <0 ){.     pc = 
28b90 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
28ba0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
28bb0 4f 70 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50  Opcode: IfZero P
28bc0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
28bd0 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50  * The register P
28be0 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61  1 must contain a
28bf0 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 64 64 20  n integer.  Add 
28c00 6c 69 74 65 72 61 6c 20 50 33 20 74 6f 20 74 68  literal P3 to th
28c10 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65  e.** value in re
28c20 67 69 73 74 65 72 20 50 31 2e 20 20 49 66 20 74  gister P1.  If t
28c30 68 65 20 72 65 73 75 6c 74 20 69 73 20 65 78 61  he result is exa
28c40 63 74 6c 79 20 30 2c 20 6a 75 6d 70 20 74 6f 20  ctly 0, jump to 
28c50 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73  P2. .**.** It is
28c60 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20   illegal to use 
28c70 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
28c80 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20 74   on a register t
28c90 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20  hat does.** not 
28ca0 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
28cb0 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f  er.  An assertio
28cc0 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73  n fault will res
28cd0 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a  ult if you try..
28ce0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65 72  */.case OP_IfZer
28cf0 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  o: {        /* j
28d00 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
28d10 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
28d20 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
28d30 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
28d40 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  nt );.  pIn1->u.
28d50 69 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  i += pOp->p3;.  
28d60 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30  if( pIn1->u.i==0
28d70 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f   ){.     pc = pO
28d80 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
28d90 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
28da0 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20  code: AggStep * 
28db0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
28dc0 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74  * Execute the st
28dd0 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  ep function for 
28de0 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54  an aggregate.  T
28df0 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68  he.** function h
28e00 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e  as P5 arguments.
28e10 20 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74     P4 is a point
28e20 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65  er to the FuncDe
28e30 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74  f.** structure t
28e40 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  hat specifies th
28e50 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73 65  e function.  Use
28e60 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 20   register.** P3 
28e70 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  as the accumulat
28e80 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  or..**.** The P5
28e90 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
28ea0 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
28eb0 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a  er P2 and its.**
28ec0 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a   successors..*/.
28ed0 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a  case OP_AggStep:
28ee0 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e   {.  int n;.  in
28ef0 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  t i;.  Mem *pMem
28f00 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a 20  ;.  Mem *pRec;. 
28f10 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
28f20 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f   ctx;.  sqlite3_
28f30 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a  value **apVal;..
28f40 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20    n = pOp->p5;. 
28f50 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b   assert( n>=0 );
28f60 0a 20 20 70 52 65 63 20 3d 20 26 61 4d 65 6d 5b  .  pRec = &aMem[
28f70 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61  pOp->p2];.  apVa
28f80 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20  l = p->apArg;.  
28f90 61 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c  assert( apVal ||
28fa0 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69   n==0 );.  for(i
28fb0 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52  =0; i<n; i++, pR
28fc0 65 63 2b 2b 29 7b 0a 20 20 20 20 61 70 56 61 6c  ec++){.    apVal
28fd0 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20 20  [i] = pRec;.    
28fe0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
28ff0 6f 72 65 54 79 70 65 28 70 52 65 63 29 3b 0a 20  oreType(pRec);. 
29000 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d   }.  ctx.pFunc =
29010 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
29020 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
29030 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
29040 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 63 74 78  p->nMem );.  ctx
29050 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26  .pMem = pMem = &
29060 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
29070 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63 74   pMem->n++;.  ct
29080 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  x.s.flags = MEM_
29090 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a 20  Null;.  ctx.s.z 
290a0 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61  = 0;.  ctx.s.zMa
290b0 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e  lloc = 0;.  ctx.
290c0 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74  s.xDel = 0;.  ct
290d0 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63  x.s.db = db;.  c
290e0 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a  tx.isError = 0;.
290f0 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 30 3b    ctx.pColl = 0;
29100 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63  .  if( ctx.pFunc
29110 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
29120 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29  _FUNC_NEEDCOLL )
29130 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
29140 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20  p>p->aOp );.    
29150 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
29160 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
29170 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  EQ );.    assert
29180 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
29190 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a  ==OP_CollSeq );.
291a0 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20      ctx.pColl = 
291b0 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c  pOp[-1].p4.pColl
291c0 3b 0a 20 20 7d 0a 20 20 28 63 74 78 2e 70 46 75  ;.  }.  (ctx.pFu
291d0 6e 63 2d 3e 78 53 74 65 70 29 28 26 63 74 78 2c  nc->xStep)(&ctx,
291e0 20 6e 2c 20 61 70 56 61 6c 29 3b 0a 20 20 69 66   n, apVal);.  if
291f0 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b  ( ctx.isError ){
29200 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
29210 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
29220 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
29230 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
29240 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72 63  &ctx.s));.    rc
29250 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a   = ctx.isError;.
29260 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
29270 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78  eMemRelease(&ctx
29280 2e 73 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .s);.  break;.}.
29290 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46  ./* Opcode: AggF
292a0 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20  inal P1 P2 * P4 
292b0 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  *.**.** Execute 
292c0 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75  the finalizer fu
292d0 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
292e0 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a  gregate.  P1 is.
292f0 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  ** the memory lo
29300 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74  cation that is t
29310 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66  he accumulator f
29320 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65  or the aggregate
29330 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
29340 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
29350 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73  ments that the s
29360 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b  tep function tak
29370 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20  es and.** P4 is 
29380 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
29390 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69   FuncDef for thi
293a0 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65  s function.  The
293b0 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20   P2.** argument 
293c0 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74  is not used by t
293d0 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20  his opcode.  It 
293e0 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f  is only there to
293f0 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a   disambiguate.**
29400 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20   functions that 
29410 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67  can take varying
29420 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75   numbers of argu
29430 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50  ments.  The.** P
29440 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e  4 argument is on
29450 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68  ly needed for th
29460 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73  e degenerate cas
29470 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73  e where.** the s
29480 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  tep function was
29490 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
294a0 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  called..*/.case 
294b0 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20  OP_AggFinal: {. 
294c0 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73   Mem *pMem;.  as
294d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
294e0 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
294f0 4d 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20  Mem );.  pMem = 
29500 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
29510 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
29520 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e  >flags & ~(MEM_N
29530 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30  ull|MEM_Agg))==0
29540 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
29550 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a  e3VdbeMemFinaliz
29560 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e  e(pMem, pOp->p4.
29570 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63  pFunc);.  if( rc
29580 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
29590 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
295a0 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
295b0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
295c0 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20  xt(pMem));.  }. 
295d0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
295e0 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c  geEncoding(pMem,
295f0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
29600 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
29610 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73  E(pMem);.  if( s
29620 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
29630 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20  Big(pMem) ){.   
29640 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
29650 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a   }.  break;.}...
29660 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
29670 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29  ITE_OMIT_VACUUM)
29680 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
29690 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29  ITE_OMIT_ATTACH)
296a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75  ./* Opcode: Vacu
296b0 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  um * * * * *.**.
296c0 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e  ** Vacuum the en
296d0 74 69 72 65 20 64 61 74 61 62 61 73 65 2e 20 20  tire database.  
296e0 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  This opcode will
296f0 20 63 61 75 73 65 20 6f 74 68 65 72 20 76 69 72   cause other vir
29700 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73  tual.** machines
29710 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 20 61   to be created a
29720 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20  nd run.  It may 
29730 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72  not be called fr
29740 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74  om within.** a t
29750 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  ransaction..*/.c
29760 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b  ase OP_Vacuum: {
29770 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
29780 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f  fetyOff(db) ) go
29790 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
297a0 6d 69 73 75 73 65 3b 20 0a 20 20 72 63 20 3d 20  misuse; .  rc = 
297b0 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d  sqlite3RunVacuum
297c0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
297d0 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
297e0 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67  SafetyOn(db) ) g
297f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
29800 5f 6d 69 73 75 73 65 3b 0a 20 20 62 72 65 61 6b  _misuse;.  break
29810 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ;.}.#endif..#if 
29820 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
29830 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  OMIT_AUTOVACUUM)
29840 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72  ./* Opcode: Incr
29850 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a  Vacuum P1 P2 * *
29860 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d   *.**.** Perform
29870 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f   a single step o
29880 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61  f the incrementa
29890 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75  l vacuum procedu
298a0 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20  re on.** the P1 
298b0 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65  database. If the
298c0 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69   vacuum has fini
298d0 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  shed, jump to in
298e0 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e  struction.** P2.
298f0 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c   Otherwise, fall
29900 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
29910 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
29920 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63  ..*/.case OP_Inc
29930 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20  rVacuum: {      
29940 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42    /* jump */.  B
29950 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73  tree *pBt;..  as
29960 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
29970 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
29980 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
29990 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
299a0 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d   (1<<pOp->p1))!=
299b0 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d  0 );.  pBt = db-
299c0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
299d0 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  t;.  rc = sqlite
299e0 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d  3BtreeIncrVacuum
299f0 28 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63 3d  (pBt);.  if( rc=
29a00 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a  =SQLITE_DONE ){.
29a10 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
29a20 20 2d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53   - 1;.    rc = S
29a30 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20  QLITE_OK;.  }.  
29a40 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
29a50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70 69  ./* Opcode: Expi
29a60 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  re P1 * * * *.**
29a70 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f 6d  .** Cause precom
29a80 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73  piled statements
29a90 20 74 6f 20 62 65 63 6f 6d 65 20 65 78 70 69 72   to become expir
29aa0 65 64 2e 20 41 6e 20 65 78 70 69 72 65 64 20 73  ed. An expired s
29ab0 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66 61 69 6c  tatement.** fail
29ac0 73 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20  s with an error 
29ad0 63 6f 64 65 20 6f 66 20 53 51 4c 49 54 45 5f 53  code of SQLITE_S
29ae0 43 48 45 4d 41 20 69 66 20 69 74 20 69 73 20 65  CHEMA if it is e
29af0 76 65 72 20 65 78 65 63 75 74 65 64 20 0a 2a 2a  ver executed .**
29b00 20 28 76 69 61 20 73 71 6c 69 74 65 33 5f 73 74   (via sqlite3_st
29b10 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a 2a 20 49 66  ep())..** .** If
29b20 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61   P1 is 0, then a
29b30 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ll SQL statement
29b40 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64  s become expired
29b50 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  . If P1 is non-z
29b60 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c  ero,.** then onl
29b70 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  y the currently 
29b80 65 78 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d  executing statem
29b90 65 6e 74 20 69 73 20 61 66 66 65 63 74 65 64 2e  ent is affected.
29ba0 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70   .*/.case OP_Exp
29bb0 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f  ire: {.  if( !pO
29bc0 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c  p->p1 ){.    sql
29bd0 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
29be0 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
29bf0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
29c00 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20  ->expired = 1;. 
29c10 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
29c20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
29c30 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
29c40 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65  /* Opcode: Table
29c50 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50 34  Lock P1 P2 P3 P4
29c60 20 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20   *.**.** Obtain 
29c70 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74  a lock on a part
29c80 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68  icular table. Th
29c90 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
29ca0 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e  s only used when
29cb0 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63  .** the shared-c
29cc0 61 63 68 65 20 66 65 61 74 75 72 65 20 69 73 20  ache feature is 
29cd0 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20  enabled. .**.** 
29ce0 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
29cf0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
29d00 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  in sqlite3.aDb[]
29d10 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
29d20 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65  .** on which the
29d30 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65   lock is acquire
29d40 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69  d.  A readlock i
29d50 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33  s obtained if P3
29d60 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74  ==0 or.** a writ
29d70 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e  e lock if P3==1.
29d80 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69  .**.** P2 contai
29d90 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65  ns the root-page
29da0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
29db0 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20   lock..**.** P4 
29dc0 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74  contains a point
29dd0 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f  er to the name o
29de0 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  f the table bein
29df0 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69  g locked. This i
29e00 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74  s only.** used t
29e10 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72  o generate an er
29e20 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20 74  ror message if t
29e30 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62  he lock cannot b
29e40 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63  e obtained..*/.c
29e50 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b  ase OP_TableLock
29e60 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65  : {.  u8 isWrite
29e70 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e  Lock = (u8)pOp->
29e80 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74  p3;.  if( isWrit
29e90 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d  eLock || 0==(db-
29ea0 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65  >flags&SQLITE_Re
29eb0 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29  adUncommitted) )
29ec0 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70  {.    int p1 = p
29ed0 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73  Op->p1; .    ass
29ee0 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31  ert( p1>=0 && p1
29ef0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20  <db->nDb );.    
29f00 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
29f10 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 31 29 29  eMask & (1<<p1))
29f20 21 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  !=0 );.    asser
29f30 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d  t( isWriteLock==
29f40 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b  0 || isWriteLock
29f50 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  ==1 );.    rc = 
29f60 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b  sqlite3BtreeLock
29f70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31  Table(db->aDb[p1
29f80 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20  ].pBt, pOp->p2, 
29f90 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20  isWriteLock);.  
29fa0 20 20 69 66 28 20 28 72 63 26 30 78 46 46 29 3d    if( (rc&0xFF)=
29fb0 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29  =SQLITE_LOCKED )
29fc0 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
29fd0 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e  ar *z = pOp->p4.
29fe0 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  z;.      sqlite3
29ff0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2a000 72 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74 61  rrMsg, db, "data
2a010 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f  base table is lo
2a020 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20  cked: %s", z);. 
2a030 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
2a040 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2a050 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
2a060 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64  _CACHE */..#ifnd
2a070 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2a080 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2a090 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20  pcode: VBegin * 
2a0a0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
2a0b0 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74  4 may be a point
2a0c0 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  er to an sqlite3
2a0d0 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
2a0e0 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65   If so, call the
2a0f0 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68   .** xBegin meth
2a100 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c  od for that tabl
2a110 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77  e..**.** Also, w
2a120 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34  hether or not P4
2a130 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74   is set, check t
2a140 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20  hat this is not 
2a150 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f  being called fro
2a160 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61  m.** within a ca
2a170 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74  llback to a virt
2a180 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28  ual table xSync(
2a190 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20  ) method. If it 
2a1a0 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a  is, the error.**
2a1b0 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65   code will be se
2a1c0 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  t to SQLITE_LOCK
2a1d0 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ED..*/.case OP_V
2a1e0 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c  Begin: {.  VTabl
2a1f0 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61  e *pVTab;.  pVTa
2a200 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
2a210 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  b;.  rc = sqlite
2a220 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70  3VtabBegin(db, p
2a230 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54  VTab);.  if( pVT
2a240 61 62 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ab ){.    sqlite
2a250 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
2a260 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
2a270 7a 45 72 72 4d 73 67 20 3d 20 70 56 54 61 62 2d  zErrMsg = pVTab-
2a280 3e 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b  >pVtab->zErrMsg;
2a290 0a 20 20 20 20 70 56 54 61 62 2d 3e 70 56 74 61  .    pVTab->pVta
2a2a0 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  b->zErrMsg = 0;.
2a2b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2a2c0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2a2d0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2a2e0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2a2f0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2a300 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2a310 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a 20 2a  : VCreate P1 * *
2a320 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
2a330 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
2a340 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
2a350 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 43 61   database P1. Ca
2a360 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65 20 6d  ll the xCreate m
2a370 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74 68 61  ethod.** for tha
2a380 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  t table..*/.case
2a390 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20   OP_VCreate: {. 
2a3a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
2a3b0 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20  bCallCreate(db, 
2a3c0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
2a3d0 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29  .z, &p->zErrMsg)
2a3e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2a3f0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2a400 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2a410 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2a420 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2a430 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2a440 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a 20  VDestroy P1 * * 
2a450 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
2a460 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76   the name of a v
2a470 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20  irtual table in 
2a480 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 43 61  database P1.  Ca
2a490 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79 20  ll the xDestroy 
2a4a0 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61  method.** of tha
2a4b0 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  t table..*/.case
2a4c0 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a   OP_VDestroy: {.
2a4d0 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2a4e0 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20 73 71  d = 2;.  rc = sq
2a4f0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
2a500 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31  troy(db, pOp->p1
2a510 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
2a520 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
2a530 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
2a540 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2a550 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2a560 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2a570 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2a580 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2a590 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20  e: VOpen P1 * * 
2a5a0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
2a5b0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
2a5c0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
2a5d0 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
2a5e0 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
2a5f0 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73  .** P1 is a curs
2a600 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73  or number.  This
2a610 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20   opcode opens a 
2a620 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69  cursor to the vi
2a630 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61  rtual.** table a
2a640 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 63  nd stores that c
2a650 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a  ursor in P1..*/.
2a660 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b  case OP_VOpen: {
2a670 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2a680 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Cur;.  sqlite3_v
2a690 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61  tab_cursor *pVta
2a6a0 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74  bCursor;.  sqlit
2a6b0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
2a6c0 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65    sqlite3_module
2a6d0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 43   *pModule;..  pC
2a6e0 75 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 43  ur = 0;.  pVtabC
2a6f0 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 70 56 74  ursor = 0;.  pVt
2a700 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
2a710 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  ab->pVtab;.  pMo
2a720 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f  dule = (sqlite3_
2a730 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e  module *)pVtab->
2a740 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
2a750 74 28 70 56 74 61 62 20 26 26 20 70 4d 6f 64 75  t(pVtab && pModu
2a760 6c 65 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  le);.  if( sqlit
2a770 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
2a780 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2a790 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 72 63  _to_misuse;.  rc
2a7a0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65   = pModule->xOpe
2a7b0 6e 28 70 56 74 61 62 2c 20 26 70 56 74 61 62 43  n(pVtab, &pVtabC
2a7c0 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65  ursor);.  sqlite
2a7d0 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
2a7e0 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45  ErrMsg);.  p->zE
2a7f0 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a  rrMsg = pVtab->z
2a800 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d  ErrMsg;.  pVtab-
2a810 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  >zErrMsg = 0;.  
2a820 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
2a830 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61  yOn(db) ) goto a
2a840 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
2a850 73 65 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45  se;.  if( SQLITE
2a860 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f  _OK==rc ){.    /
2a870 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c  * Initialize sql
2a880 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
2a890 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20   base class */. 
2a8a0 20 20 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e     pVtabCursor->
2a8b0 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a  pVtab = pVtab;..
2a8c0 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 73      /* Initialis
2a8d0 65 20 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62  e vdbe cursor ob
2a8e0 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70 43 75 72  ject */.    pCur
2a8f0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
2a900 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  r(p, pOp->p1, 0,
2a910 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20 69 66 28   -1, 0);.    if(
2a920 20 70 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70   pCur ){.      p
2a930 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2a940 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a   = pVtabCursor;.
2a950 20 20 20 20 20 20 70 43 75 72 2d 3e 70 4d 6f 64        pCur->pMod
2a960 75 6c 65 20 3d 20 70 56 74 61 62 43 75 72 73 6f  ule = pVtabCurso
2a970 72 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  r->pVtab->pModul
2a980 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  e;.    }else{.  
2a990 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61      db->mallocFa
2a9a0 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  iled = 1;.      
2a9b0 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28  pModule->xClose(
2a9c0 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2a9d0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
2a9e0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2a9f0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2aa00 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
2aa10 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2aa20 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2aa30 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31  code: VFilter P1
2aa40 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
2aa50 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72  * P1 is a cursor
2aa60 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f   opened using VO
2aa70 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61  pen.  P2 is an a
2aa80 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74  ddress to jump t
2aa90 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74  o if.** the filt
2aaa0 65 72 65 64 20 72 65 73 75 6c 74 20 73 65 74 20  ered result set 
2aab0 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20  is empty..**.** 
2aac0 50 34 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c  P4 is either NUL
2aad0 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68  L or a string th
2aae0 61 74 20 77 61 73 20 67 65 6e 65 72 61 74 65 64  at was generated
2aaf0 20 62 79 20 74 68 65 20 78 42 65 73 74 49 6e 64   by the xBestInd
2ab00 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20  ex.** method of 
2ab10 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65  the module.  The
2ab20 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
2ab30 6f 66 20 74 68 65 20 50 34 20 73 74 72 69 6e 67  of the P4 string
2ab40 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74   is left.** to t
2ab50 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  he module implem
2ab60 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
2ab70 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
2ab80 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65 72 20  kes the xFilter 
2ab90 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69  method on the vi
2aba0 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63  rtual table spec
2abb0 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20  ified.** by P1. 
2abc0 20 54 68 65 20 69 6e 74 65 67 65 72 20 71 75 65   The integer que
2abd0 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65  ry plan paramete
2abe0 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20  r to xFilter is 
2abf0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
2ac00 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74  er.** P3. Regist
2ac10 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74  er P3+1 stores t
2ac20 68 65 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  he argc paramete
2ac30 72 20 74 6f 20 62 65 20 70 61 73 73 65 64 20 74  r to be passed t
2ac40 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72  o the.** xFilter
2ac50 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65   method. Registe
2ac60 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72  rs P3+2..P3+1+ar
2ac70 67 63 20 61 72 65 20 74 68 65 20 61 72 67 63 0a  gc are the argc.
2ac80 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61  ** additional pa
2ac90 72 61 6d 65 74 65 72 73 20 77 68 69 63 68 20 61  rameters which a
2aca0 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20  re passed to.** 
2acb0 78 46 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e  xFilter as argv.
2acc0 20 52 65 67 69 73 74 65 72 20 50 33 2b 32 20 62   Register P3+2 b
2acd0 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77  ecomes argv[0] w
2ace0 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46  hen passed to xF
2acf0 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a  ilter..**.** A j
2ad00 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
2ad10 32 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  2 if the result 
2ad20 73 65 74 20 61 66 74 65 72 20 66 69 6c 74 65 72  set after filter
2ad30 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70  ing would be emp
2ad40 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ty..*/.case OP_V
2ad50 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a  Filter: {   /* j
2ad60 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72  ump */.  int nAr
2ad70 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b  g;.  int iQuery;
2ad80 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
2ad90 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
2ada0 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b  ;.  Mem *pQuery;
2adb0 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20  .  Mem *pArgc;. 
2adc0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
2add0 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f  rsor *pVtabCurso
2ade0 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
2adf0 62 20 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65  b *pVtab;.  Vdbe
2ae00 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
2ae10 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69  int res;.  int i
2ae20 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b  ;.  Mem **apArg;
2ae30 0a 0a 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d  ..  pQuery = &aM
2ae40 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70  em[pOp->p3];.  p
2ae50 41 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31  Argc = &pQuery[1
2ae60 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61  ];.  pCur = p->a
2ae70 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2ae80 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
2ae90 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29  pOp->p3, pQuery)
2aea0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
2aeb0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b  ->pVtabCursor );
2aec0 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d  .  pVtabCursor =
2aed0 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2aee0 6f 72 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56  or;.  pVtab = pV
2aef0 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
2af00 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
2af10 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20  tab->pModule;.. 
2af20 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64   /* Grab the ind
2af30 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72  ex number and ar
2af40 67 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f  gc parameters */
2af50 0a 20 20 61 73 73 65 72 74 28 20 28 70 51 75 65  .  assert( (pQue
2af60 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  ry->flags&MEM_In
2af70 74 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e  t)!=0 && pArgc->
2af80 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
2af90 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29  ;.  nArg = (int)
2afa0 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51  pArgc->u.i;.  iQ
2afb0 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65  uery = (int)pQue
2afc0 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49  ry->u.i;..  /* I
2afd0 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65  nvoke the xFilte
2afe0 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a  r method */.  {.
2aff0 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
2b000 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72   apArg = p->apAr
2b010 67 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30  g;.    for(i = 0
2b020 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
2b030 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d        apArg[i] =
2b040 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20   &pArgc[i+1];.  
2b050 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2b060 65 6d 53 74 6f 72 65 54 79 70 65 28 61 70 41 72  emStoreType(apAr
2b070 67 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  g[i]);.    }..  
2b080 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
2b090 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
2b0a0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
2b0b0 69 73 75 73 65 3b 0a 20 20 20 20 70 2d 3e 69 6e  isuse;.    p->in
2b0c0 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a  VtabMethod = 1;.
2b0d0 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65      rc = pModule
2b0e0 2d 3e 78 46 69 6c 74 65 72 28 70 56 74 61 62 43  ->xFilter(pVtabC
2b0f0 75 72 73 6f 72 2c 20 69 51 75 65 72 79 2c 20 70  ursor, iQuery, p
2b100 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20  Op->p4.z, nArg, 
2b110 61 70 41 72 67 29 3b 0a 20 20 20 20 70 2d 3e 69  apArg);.    p->i
2b120 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b  nVtabMethod = 0;
2b130 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
2b140 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
2b150 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
2b160 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72  sg = pVtab->zErr
2b170 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e  Msg;.    pVtab->
2b180 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20  zErrMsg = 0;.   
2b190 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2b1a0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  OK ){.      res 
2b1b0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
2b1c0 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2b1d0 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69    }.    if( sqli
2b1e0 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
2b1f0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2b200 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 20  _to_misuse;..   
2b210 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
2b220 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2b230 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   1;.    }.  }.  
2b240 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20  pCur->nullRow = 
2b250 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  0;..  break;.}.#
2b260 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2b270 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2b280 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2b290 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2b2a0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2b2b0 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  : VColumn P1 P2 
2b2c0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f  P3 * *.**.** Sto
2b2d0 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  re the value of 
2b2e0 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e  the P2-th column
2b2f0 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f   of.** the row o
2b300 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61  f the virtual-ta
2b310 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a  ble that the .**
2b320 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f   P1 cursor is po
2b330 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72  inting to into r
2b340 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63  egister P3..*/.c
2b350 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20  ase OP_VColumn: 
2b360 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
2b370 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
2b380 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
2b390 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20  *pModule;.  Mem 
2b3a0 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65  *pDest;.  sqlite
2b3b0 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65  3_context sConte
2b3c0 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f  xt;..  VdbeCurso
2b3d0 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  r *pCur = p->apC
2b3e0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2b3f0 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74  ssert( pCur->pVt
2b400 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  abCursor );.  as
2b410 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
2b420 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  && pOp->p3<=p->n
2b430 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20 3d  Mem );.  pDest =
2b440 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2b450 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
2b460 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69  lRow ){.    sqli
2b470 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
2b480 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72  l(pDest);.    br
2b490 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
2b4a0 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
2b4b0 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
2b4c0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
2b4d0 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
2b4e0 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c  t( pModule->xCol
2b4f0 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28  umn );.  memset(
2b500 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69  &sContext, 0, si
2b510 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b  zeof(sContext));
2b520 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75  ..  /* The outpu
2b530 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61  t cell may alrea
2b540 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72  dy have a buffer
2b550 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65   allocated. Move
2b560 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e  .  ** the curren
2b570 74 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43  t contents to sC
2b580 6f 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20 63  ontext.s so in c
2b590 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e  ase the user-fun
2b5a0 63 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20  ction .  ** can 
2b5b0 75 73 65 20 74 68 65 20 61 6c 72 65 61 64 79 20  use the already 
2b5c0 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72  allocated buffer
2b5d0 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f   instead of allo
2b5e0 63 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e  cating a .  ** n
2b5f0 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73  ew one..  */.  s
2b600 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
2b610 65 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70  e(&sContext.s, p
2b620 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54  Dest);.  MemSetT
2b630 79 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65 78  ypeFlag(&sContex
2b640 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  t.s, MEM_Null);.
2b650 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
2b660 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f  fetyOff(db) ) go
2b670 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2b680 6d 69 73 75 73 65 3b 0a 20 20 72 63 20 3d 20 70  misuse;.  rc = p
2b690 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28  Module->xColumn(
2b6a0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2b6b0 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f  r, &sContext, pO
2b6c0 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65  p->p2);.  sqlite
2b6d0 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
2b6e0 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45  ErrMsg);.  p->zE
2b6f0 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a  rrMsg = pVtab->z
2b700 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d  ErrMsg;.  pVtab-
2b710 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  >zErrMsg = 0;.  
2b720 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45  if( sContext.isE
2b730 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d  rror ){.    rc =
2b740 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f   sContext.isErro
2b750 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70  r;.  }..  /* Cop
2b760 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  y the result of 
2b770 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  the function to 
2b780 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72 2e  the P3 register.
2b790 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73   We.  ** do this
2b7a0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
2b7b0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e  hether or not an
2b7c0 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20   error occurred 
2b7d0 74 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a 20 20  to ensure any.  
2b7e0 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63  ** dynamic alloc
2b7f0 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78  ation in sContex
2b800 74 2e 73 20 28 61 20 4d 65 6d 20 73 74 72 75 63  t.s (a Mem struc
2b810 74 29 20 69 73 20 20 72 65 6c 65 61 73 65 64 2e  t) is  released.
2b820 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  .  */.  sqlite3V
2b830 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
2b840 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65  g(&sContext.s, e
2b850 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69  ncoding);.  sqli
2b860 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
2b870 44 65 73 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e  Dest, &sContext.
2b880 73 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  s);.  REGISTER_T
2b890 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
2b8a0 65 73 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  est);.  UPDATE_M
2b8b0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
2b8c0 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  t);..  if( sqlit
2b8d0 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
2b8e0 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  {.    goto abort
2b8f0 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
2b900 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
2b910 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
2b920 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74  Dest) ){.    got
2b930 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
2b940 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2b950 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2b960 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2b970 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2b980 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2b990 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65  E./* Opcode: VNe
2b9a0 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  xt P1 P2 * * *.*
2b9b0 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72  *.** Advance vir
2b9c0 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f  tual table P1 to
2b9d0 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e   the next row in
2b9e0 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20   its result set 
2b9f0 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69  and.** jump to i
2ba00 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20  nstruction P2.  
2ba10 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74 75  Or, if the virtu
2ba20 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65 61  al table has rea
2ba30 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20  ched.** the end 
2ba40 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73 65  of its result se
2ba50 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  t, then fall thr
2ba60 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2ba70 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2ba80 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20  .case OP_VNext: 
2ba90 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
2baa0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
2bab0 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
2bac0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2bad0 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73  odule;.  int res
2bae0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
2baf0 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30  pCur;..  res = 0
2bb00 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70  ;.  pCur = p->ap
2bb10 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2bb20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56  assert( pCur->pV
2bb30 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69  tabCursor );.  i
2bb40 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  f( pCur->nullRow
2bb50 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   ){.    break;. 
2bb60 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75   }.  pVtab = pCu
2bb70 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e  r->pVtabCursor->
2bb80 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
2bb90 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
2bba0 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f  e;.  assert( pMo
2bbb0 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a  dule->xNext );..
2bbc0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
2bbd0 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f  xNext() method o
2bbe0 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68  f the module. Th
2bbf0 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f  ere is no way fo
2bc00 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72  r the.  ** under
2bc10 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61  lying implementa
2bc20 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61  tion to return a
2bc30 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f  n error if one o
2bc40 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a  ccurs during.  *
2bc50 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65  * xNext(). Inste
2bc60 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20  ad, if an error 
2bc70 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69 73 20  occurs, true is 
2bc80 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61  returned (indica
2bc90 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20  ting that .  ** 
2bca0 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c  data is availabl
2bcb0 65 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72  e) and the error
2bcc0 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77   code returned w
2bcd0 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20  hen xColumn or. 
2bce0 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d   ** some other m
2bcf0 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e  ethod is next in
2bd00 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76  voked on the sav
2bd10 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
2bd20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 69  cursor..  */.  i
2bd30 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
2bd40 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61  Off(db) ) goto a
2bd50 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
2bd60 73 65 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d  se;.  p->inVtabM
2bd70 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20  ethod = 1;.  rc 
2bd80 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74  = pModule->xNext
2bd90 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73  (pCur->pVtabCurs
2bda0 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62  or);.  p->inVtab
2bdb0 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 73 71  Method = 0;.  sq
2bdc0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
2bdd0 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70  p->zErrMsg);.  p
2bde0 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61  ->zErrMsg = pVta
2bdf0 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56  b->zErrMsg;.  pV
2be00 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  tab->zErrMsg = 0
2be10 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
2be20 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73  TE_OK ){.    res
2be30 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66   = pModule->xEof
2be40 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73  (pCur->pVtabCurs
2be50 6f 72 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  or);.  }.  if( s
2be60 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
2be70 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
2be80 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a  due_to_misuse;..
2be90 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20    if( !res ){.  
2bea0 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
2beb0 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50   data, jump to P
2bec0 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f  2 */.    pc = pO
2bed0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
2bee0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2bef0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2bf00 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2bf10 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2bf20 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2bf30 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65  E./* Opcode: VRe
2bf40 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  name P1 * * P4 *
2bf50 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
2bf60 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
2bf70 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
2bf80 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
2bf90 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
2bfa0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
2bfb0 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f  kes the correspo
2bfc0 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65  nding xRename me
2bfd0 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a  thod. The value.
2bfe0 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ** in register P
2bff0 31 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  1 is passed as t
2c000 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e  he zName argumen
2c010 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65  t to the xRename
2c020 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65   method..*/.case
2c030 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20   OP_VRename: {. 
2c040 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
2c050 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61  Vtab;.  Mem *pNa
2c060 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70  me;..  pVtab = p
2c070 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
2c080 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26  tab;.  pName = &
2c090 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2c0a0 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e   assert( pVtab->
2c0b0 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
2c0c0 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
2c0d0 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e  RACE(pOp->p1, pN
2c0e0 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ame);.  assert( 
2c0f0 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d  pName->flags & M
2c100 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66 28 20  EM_Str );.  if( 
2c110 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
2c120 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
2c130 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
2c140 0a 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70  .  rc = pVtab->p
2c150 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28  Module->xRename(
2c160 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29  pVtab, pName->z)
2c170 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
2c180 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
2c190 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  );.  p->zErrMsg 
2c1a0 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  = pVtab->zErrMsg
2c1b0 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  ;.  pVtab->zErrM
2c1c0 73 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 73 71  sg = 0;.  if( sq
2c1d0 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62  lite3SafetyOn(db
2c1e0 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
2c1f0 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20  ue_to_misuse;.. 
2c200 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2c210 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2c220 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2c230 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55  LE./* Opcode: VU
2c240 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50  pdate P1 P2 P3 P
2c250 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
2c260 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
2c270 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
2c280 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
2c290 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
2c2a0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2c2b0 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
2c2c0 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65  sponding xUpdate
2c2d0 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75   method. P2 valu
2c2e0 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67  es.** are contig
2c2f0 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  uous memory cell
2c300 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50 33  s starting at P3
2c310 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20   to pass to the 
2c320 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f  xUpdate .** invo
2c330 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75  cation. The valu
2c340 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 28 50  e in register (P
2c350 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f  3+P2-1) correspo
2c360 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70  nds to the .** p
2c370 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  2th element of t
2c380 68 65 20 61 72 67 76 20 61 72 72 61 79 20 70 61  he argv array pa
2c390 73 73 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e  ssed to xUpdate.
2c3a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61  .**.** The xUpda
2c3b0 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64  te method will d
2c3c0 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e  o a DELETE or an
2c3d0 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e   INSERT or both.
2c3e0 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20  .** The argv[0] 
2c3f0 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63  element (which c
2c400 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65  orresponds to me
2c410 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a  mory cell P3).**
2c420 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
2c430 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
2c440 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73  .  If argv[0] is
2c450 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a   NULL then no .*
2c460 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72  * deletion occur
2c470 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20  s.  The argv[1] 
2c480 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72  element is the r
2c490 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20  owid of the new 
2c4a0 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63  .** row.  This c
2c4b0 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61  an be NULL to ha
2c4c0 76 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  ve the virtual t
2c4d0 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20  able select the 
2c4e0 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f  new .** rowid fo
2c4f0 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73  r itself.  The s
2c500 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e  ubsequent elemen
2c510 74 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 20  ts in the array 
2c520 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  are .** the valu
2c530 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  es of columns in
2c540 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a   the new row..**
2c550 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65  .** If P2==1 the
2c560 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70  n no insert is p
2c570 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b  erformed.  argv[
2c580 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  0] is the rowid 
2c590 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64  of.** a row to d
2c5a0 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  elete..**.** P1 
2c5b0 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61  is a boolean fla
2c5c0 67 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 20  g. If it is set 
2c5d0 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65 20  to true and the 
2c5e0 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20  xUpdate call.** 
2c5f0 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74  is successful, t
2c600 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65  hen the value re
2c610 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
2c620 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
2c630 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74  wid() .** is set
2c640 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
2c650 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74   the rowid for t
2c660 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65  he row just inse
2c670 72 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rted..*/.case OP
2c680 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71  _VUpdate: {.  sq
2c690 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2c6a0 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64  b;.  sqlite3_mod
2c6b0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
2c6c0 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20  int nArg;.  int 
2c6d0 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36  i;.  sqlite_int6
2c6e0 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a  4 rowid;.  Mem *
2c6f0 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70  *apArg;.  Mem *p
2c700 58 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f  X;..  pVtab = pO
2c710 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
2c720 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
2c730 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20  (sqlite3_module 
2c740 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  *)pVtab->pModule
2c750 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e  ;.  nArg = pOp->
2c760 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p2;.  assert( pO
2c770 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54  p->p4type==P4_VT
2c780 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41  AB );.  if( ALWA
2c790 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64  YS(pModule->xUpd
2c7a0 61 74 65 29 20 29 7b 0a 20 20 20 20 61 70 41 72  ate) ){.    apAr
2c7b0 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20  g = p->apArg;.  
2c7c0 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70    pX = &aMem[pOp
2c7d0 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69  ->p3];.    for(i
2c7e0 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
2c7f0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
2c800 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
2c810 70 58 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67  pX);.      apArg
2c820 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20  [i] = pX;.      
2c830 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  pX++;.    }.    
2c840 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
2c850 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20  yOff(db) ) goto 
2c860 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
2c870 75 73 65 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  use;.    rc = pM
2c880 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70  odule->xUpdate(p
2c890 56 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72  Vtab, nArg, apAr
2c8a0 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20  g, &rowid);.    
2c8b0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
2c8c0 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
2c8d0 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
2c8e0 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a  pVtab->zErrMsg;.
2c8f0 20 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d      pVtab->zErrM
2c900 73 67 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  sg = 0;.    if( 
2c910 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
2c920 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
2c930 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
2c940 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2c950 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31  TE_OK && pOp->p1
2c960 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
2c970 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72  ( nArg>1 && apAr
2c980 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30  g[0] && (apArg[0
2c990 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c  ]->flags&MEM_Nul
2c9a0 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  l) );.      db->
2c9b0 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69  lastRowid = rowi
2c9c0 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e  d;.    }.    p->
2c9d0 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 7d 0a 20  nChange++;.  }. 
2c9e0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2c9f0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2ca00 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2ca10 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45  .#ifndef  SQLITE
2ca20 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
2ca30 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  MAS./* Opcode: P
2ca40 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20 2a  agecount P1 P2 *
2ca50 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
2ca60 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75 6d   the current num
2ca70 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
2ca80 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 6d  database P1 to m
2ca90 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a  emory cell P2..*
2caa0 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63 6f  /.case OP_Pageco
2cab0 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  unt: {          
2cac0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
2cad0 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 31  ease */.  int p1
2cae0 3b 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 0a 20  ;.  int nPage;. 
2caf0 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 0a   Pager *pPager;.
2cb00 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
2cb10 20 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c   .  pPager = sql
2cb20 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 64  ite3BtreePager(d
2cb30 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 29 3b  b->aDb[p1].pBt);
2cb40 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50  .  rc = sqlite3P
2cb50 61 67 65 72 50 61 67 65 63 6f 75 6e 74 28 70 50  agerPagecount(pP
2cb60 61 67 65 72 2c 20 26 6e 50 61 67 65 29 3b 0a 20  ager, &nPage);. 
2cb70 20 2f 2a 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74   /* OP_Pagecount
2cb80 20 69 73 20 61 6c 77 61 79 73 20 63 61 6c 6c 65   is always calle
2cb90 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20  d from within a 
2cba0 72 65 61 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  read transaction
2cbb0 2e 20 20 54 68 65 0a 20 20 2a 2a 20 70 61 67 65  .  The.  ** page
2cbc0 20 63 6f 75 6e 74 20 68 61 73 20 61 6c 72 65 61   count has alrea
2cbd0 64 79 20 62 65 65 6e 20 73 75 63 63 65 73 73 66  dy been successf
2cbe0 75 6c 6c 79 20 72 65 61 64 20 61 6e 64 20 63 61  ully read and ca
2cbf0 63 68 65 64 2e 20 20 53 6f 20 74 68 65 0a 20 20  ched.  So the.  
2cc00 2a 2a 20 73 71 6c 69 74 65 33 50 61 67 65 72 50  ** sqlite3PagerP
2cc10 61 67 65 63 6f 75 6e 74 28 29 20 63 61 6c 6c 20  agecount() call 
2cc20 61 62 6f 76 65 20 63 61 6e 6e 6f 74 20 66 61 69  above cannot fai
2cc30 6c 2e 20 2a 2f 0a 20 20 69 66 28 20 41 4c 57 41  l. */.  if( ALWA
2cc40 59 53 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  YS(rc==SQLITE_OK
2cc50 29 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  ) ){.    pOut->u
2cc60 2e 69 20 3d 20 6e 50 61 67 65 3b 0a 20 20 7d 0a  .i = nPage;.  }.
2cc70 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2cc80 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2cc90 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 20  E_OMIT_TRACE./* 
2cca0 4f 70 63 6f 64 65 3a 20 54 72 61 63 65 20 2a 20  Opcode: Trace * 
2ccb0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49  * * P4 *.**.** I
2ccc0 66 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61  f tracing is ena
2ccd0 62 6c 65 64 20 28 62 79 20 74 68 65 20 73 71 6c  bled (by the sql
2cce0 69 74 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e  ite3_trace()) in
2ccf0 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a  terface, then.**
2cd00 20 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e   the UTF-8 strin
2cd10 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50  g contained in P
2cd20 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20  4 is emitted on 
2cd30 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61  the trace callba
2cd40 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  ck..*/.case OP_T
2cd50 72 61 63 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a  race: {.  char *
2cd60 7a 54 72 61 63 65 3b 0a 0a 20 20 7a 54 72 61 63  zTrace;..  zTrac
2cd70 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f  e = (pOp->p4.z ?
2cd80 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e   pOp->p4.z : p->
2cd90 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72  zSql);.  if( zTr
2cda0 61 63 65 20 29 7b 0a 20 20 20 20 69 66 28 20 64  ace ){.    if( d
2cdb0 62 2d 3e 78 54 72 61 63 65 20 29 7b 0a 20 20 20  b->xTrace ){.   
2cdc0 20 20 20 63 68 61 72 20 2a 7a 20 3d 20 73 71 6c     char *z = sql
2cdd0 69 74 65 33 56 64 62 65 45 78 70 61 6e 64 53 71  ite3VdbeExpandSq
2cde0 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20  l(p, zTrace);.  
2cdf0 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64      db->xTrace(d
2ce00 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 29  b->pTraceArg, z)
2ce10 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  ;.      sqlite3D
2ce20 62 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20  bFree(db, z);.  
2ce30 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54    }.#ifdef SQLIT
2ce40 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
2ce50 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  (db->flags & SQL
2ce60 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30  ITE_SqlTrace)!=0
2ce70 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
2ce80 33 44 65 62 75 67 50 72 69 6e 74 66 28 22 53 51  3DebugPrintf("SQ
2ce90 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20  L-trace: %s\n", 
2cea0 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 23  zTrace);.    }.#
2ceb0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2cec0 44 45 42 55 47 20 2a 2f 0a 20 20 7d 0a 20 20 62  DEBUG */.  }.  b
2ced0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
2cee0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70  ./* Opcode: Noop
2cef0 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
2cf00 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68   Do nothing.  Th
2cf10 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
2cf20 73 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61  s often useful a
2cf30 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74  s a jump.** dest
2cf40 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a  ination..*/./*.*
2cf50 2a 20 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c  * The magic Expl
2cf60 61 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f  ain opcode are o
2cf70 6e 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68 65  nly inserted whe
2cf80 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68  n explain==2 (wh
2cf90 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79  ich.** is to say
2cfa0 20 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49   when the EXPLAI
2cfb0 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e  N QUERY PLAN syn
2cfc0 74 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a  tax is used.).**
2cfd0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63   This opcode rec
2cfe0 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ords information
2cff0 20 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69   from the optimi
2d000 7a 65 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a  zer.  It is the.
2d010 2a 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 61  ** the same as a
2d020 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70   no-op.  This op
2d030 63 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65 61  codesnever appea
2d040 72 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20  rs in a real VM 
2d050 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61  program..*/.defa
2d060 75 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ult: {          
2d070 2f 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c  /* This is reall
2d080 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50  y OP_Noop and OP
2d090 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73  _Explain */.  as
2d0a0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2d0b0 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f  e==OP_Noop || pO
2d0c0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78  p->opcode==OP_Ex
2d0d0 70 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b  plain );.  break
2d0e0 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ;.}../**********
2d0f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d100 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d110 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d120 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d130 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73  ***.** The cases
2d140 20 6f 66 20 74 68 65 20 73 77 69 74 63 68 20 73   of the switch s
2d150 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74  tatement above t
2d160 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20  his line should 
2d170 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a  all be indented.
2d180 2a 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e 20  ** by 6 spaces. 
2d190 20 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f   But the left-mo
2d1a0 73 74 20 36 20 73 70 61 63 65 73 20 68 61 76 65  st 6 spaces have
2d1b0 20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f   been removed to
2d1c0 20 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20   improve the.** 
2d1d0 72 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72  readability.  Fr
2d1e0 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e  om this point on
2d1f0 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61   down, the norma
2d200 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75  l indentation ru
2d210 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f  les are.** resto
2d220 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  red..***********
2d230 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d240 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d250 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d260 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2d270 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65  **/.    }..#ifde
2d280 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
2d290 20 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65     {.      u64 e
2d2a0 6c 61 70 73 65 64 20 3d 20 73 71 6c 69 74 65 33  lapsed = sqlite3
2d2b0 48 77 74 69 6d 65 28 29 20 2d 20 73 74 61 72 74  Hwtime() - start
2d2c0 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 79 63  ;.      pOp->cyc
2d2d0 6c 65 73 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a  les += elapsed;.
2d2e0 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b        pOp->cnt++
2d2f0 3b 0a 23 69 66 20 30 0a 20 20 20 20 20 20 20 20  ;.#if 0.        
2d300 66 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c 20  fprintf(stdout, 
2d310 22 25 31 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73  "%10llu ", elaps
2d320 65 64 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ed);.        sql
2d330 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
2d340 73 74 64 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20  stdout, origPc, 
2d350 26 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23  &aOp[origPc]);.#
2d360 65 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64  endif.    }.#end
2d370 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66  if..    /* The f
2d380 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64  ollowing code ad
2d390 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68  ds nothing to th
2d3a0 65 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f  e actual functio
2d3b0 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66  nality.    ** of
2d3c0 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49   the program.  I
2d3d0 74 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66  t is only here f
2d3e0 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64  or testing and d
2d3f0 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a  ebugging..    **
2d400 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61   On the other ha
2d410 6e 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e  nd, it does burn
2d420 20 43 50 55 20 63 79 63 6c 65 73 20 65 76 65 72   CPU cycles ever
2d430 79 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20  y time through. 
2d440 20 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61     ** the evalua
2d450 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65  tor loop.  So we
2d460 20 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75   can leave it ou
2d470 74 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73  t when NDEBUG is
2d480 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f   defined..    */
2d490 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
2d4a0 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d      assert( pc>=
2d4b0 2d 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20  -1 && pc<p->nOp 
2d4c0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
2d4d0 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
2d4e0 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20  p->trace ){.    
2d4f0 20 20 69 66 28 20 72 63 21 3d 30 20 29 20 66 70    if( rc!=0 ) fp
2d500 72 69 6e 74 66 28 70 2d 3e 74 72 61 63 65 2c 22  rintf(p->trace,"
2d510 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20  rc=%d\n",rc);.  
2d520 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66      if( pOp->opf
2d530 6c 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55  lags & (OPFLG_OU
2d540 54 32 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f 50  T2_PRERELEASE|OP
2d550 46 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20  FLG_OUT2) ){.   
2d560 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61       registerTra
2d570 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70  ce(p->trace, pOp
2d580 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p2, &aMem[pOp-
2d590 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p2]);.      }. 
2d5a0 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70       if( pOp->op
2d5b0 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55  flags & OPFLG_OU
2d5c0 54 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  T3 ){.        re
2d5d0 67 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74  gisterTrace(p->t
2d5e0 72 61 63 65 2c 20 70 4f 70 2d 3e 70 33 2c 20 26  race, pOp->p3, &
2d5f0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
2d600 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
2d610 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f  ndif  /* SQLITE_
2d620 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20  DEBUG */.#endif 
2d630 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20   /* NDEBUG */.  
2d640 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66  }  /* The end of
2d650 20 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f   the for(;;) loo
2d660 70 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f  p the loops thro
2d670 75 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a  ugh opcodes */..
2d680 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68    /* If we reach
2d690 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20   this point, it 
2d6a0 6d 65 61 6e 73 20 74 68 61 74 20 65 78 65 63 75  means that execu
2d6b0 74 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64  tion is finished
2d6c0 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72   with.  ** an er
2d6d0 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64  ror of some kind
2d6e0 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f  ..  */.vdbe_erro
2d6f0 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74  r_halt:.  assert
2d700 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20  ( rc );.  p->rc 
2d710 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 56  = rc;.  sqlite3V
2d720 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 69 66  dbeHalt(p);.  if
2d730 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45  ( rc==SQLITE_IOE
2d740 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d  RR_NOMEM ) db->m
2d750 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
2d760 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45  .  rc = SQLITE_E
2d770 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 65 73 65  RROR;.  if( rese
2d780 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 29  tSchemaOnFault )
2d790 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74   sqlite3ResetInt
2d7a0 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20  ernalSchema(db, 
2d7b0 30 29 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69  0);..  /* This i
2d7c0 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f  s the only way o
2d7d0 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65  ut of this proce
2d7e0 64 75 72 65 2e 20 20 57 65 20 68 61 76 65 20 74  dure.  We have t
2d7f0 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65 20 74  o.  ** release t
2d800 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 62 74  he mutexes on bt
2d810 72 65 65 73 20 74 68 61 74 20 77 65 72 65 20 61  rees that were a
2d820 63 71 75 69 72 65 64 20 61 74 20 74 68 65 0a 20  cquired at the. 
2d830 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65   ** top. */.vdbe
2d840 5f 72 65 74 75 72 6e 3a 0a 20 20 73 71 6c 69 74  _return:.  sqlit
2d850 65 33 42 74 72 65 65 4d 75 74 65 78 41 72 72 61  e3BtreeMutexArra
2d860 79 4c 65 61 76 65 28 26 70 2d 3e 61 4d 75 74 65  yLeave(&p->aMute
2d870 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  x);.  return rc;
2d880 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
2d890 65 72 65 20 69 66 20 61 20 73 74 72 69 6e 67 20  ere if a string 
2d8a0 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74  or blob larger t
2d8b0 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c  han SQLITE_MAX_L
2d8c0 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e  ENGTH.  ** is en
2d8d0 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a  countered..  */.
2d8e0 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74  too_big:.  sqlit
2d8f0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
2d900 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 73 74  zErrMsg, db, "st
2d910 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f  ring or blob too
2d920 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53   big");.  rc = S
2d930 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20  QLITE_TOOBIG;.  
2d940 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
2d950 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
2d960 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61   to here if a ma
2d970 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20  lloc() fails..  
2d980 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d  */.no_mem:.  db-
2d990 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
2d9a0 31 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  1;.  sqlite3SetS
2d9b0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2d9c0 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d  g, db, "out of m
2d9d0 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20  emory");.  rc = 
2d9e0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
2d9f0 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
2da00 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
2da10 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 20   to here for an 
2da20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72  SQLITE_MISUSE er
2da30 72 6f 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f  ror..  */.abort_
2da40 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3a 0a 20  due_to_misuse:. 
2da50 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
2da60 55 53 45 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  USE;.  /* Fall t
2da70 68 72 75 20 69 6e 74 6f 20 61 62 6f 72 74 5f 64  hru into abort_d
2da80 75 65 5f 74 6f 5f 65 72 72 6f 72 20 2a 2f 0a 0a  ue_to_error */..
2da90 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
2daa0 65 20 66 6f 72 20 61 6e 79 20 6f 74 68 65 72 20  e for any other 
2dab0 6b 69 6e 64 20 6f 66 20 66 61 74 61 6c 20 65 72  kind of fatal er
2dac0 72 6f 72 2e 20 20 54 68 65 20 22 72 63 22 20 76  ror.  The "rc" v
2dad0 61 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f  ariable.  ** sho
2dae0 75 6c 64 20 68 6f 6c 64 20 74 68 65 20 65 72 72  uld hold the err
2daf0 6f 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a  or number..  */.
2db00 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2db10 6f 72 3a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  or:.  assert( p-
2db20 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20  >zErrMsg==0 );. 
2db30 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
2db40 61 69 6c 65 64 20 29 20 72 63 20 3d 20 53 51 4c  ailed ) rc = SQL
2db50 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28  ITE_NOMEM;.  if(
2db60 20 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52   rc!=SQLITE_IOER
2db70 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73  R_NOMEM ){.    s
2db80 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2db90 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2dba0 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72   "%s", sqlite3Er
2dbb0 72 53 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20  rStr(rc));.  }. 
2dbc0 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
2dbd0 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d  _halt;..  /* Jum
2dbe0 70 20 74 6f 20 68 65 72 65 20 69 66 20 74 68 65  p to here if the
2dbf0 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
2dc00 70 74 28 29 20 41 50 49 20 73 65 74 73 20 74 68  pt() API sets th
2dc10 65 20 69 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a  e interrupt.  **
2dc20 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72   flag..  */.abor
2dc30 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
2dc40 70 74 3a 0a 20 20 61 73 73 65 72 74 28 20 64 62  pt:.  assert( db
2dc50 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74  ->u1.isInterrupt
2dc60 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ed );.  rc = SQL
2dc70 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  ITE_INTERRUPT;. 
2dc80 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73   p->rc = rc;.  s
2dc90 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2dca0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2dcb0 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72   "%s", sqlite3Er
2dcc0 72 53 74 72 28 72 63 29 29 3b 0a 20 20 67 6f 74  rStr(rc));.  got
2dcd0 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
2dce0 74 3b 0a 7d 0a                                   t;.}.