/ Hex Artifact Content
Login

Artifact e7c3355a39dfa0bf0be69e123061a6c1503fb327:


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 2a 0a 2a 2a 20 24 49 64 3a 20 76 64 62  ..**.** $Id: vdb
0840: 65 2e 63 2c 76 20 31 2e 38 34 31 20 32 30 30 39  e.c,v 1.841 2009
0850: 2f 30 35 2f 30 34 20 31 31 3a 34 32 3a 33 30 20  /05/04 11:42:30 
0860: 64 61 6e 69 65 6c 6b 31 39 37 37 20 45 78 70 20  danielk1977 Exp 
0870: 24 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  $.*/.#include "s
0880: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0890: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
08a0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
08b0: 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20 76 61 72  owing global var
08c0: 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d 65  iable is increme
08d0: 6e 74 65 64 20 65 76 65 72 79 20 74 69 6d 65 20  nted every time 
08e0: 61 20 63 75 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65  a cursor.** move
08f0: 73 2c 20 65 69 74 68 65 72 20 62 79 20 74 68 65  s, either by the
0900: 20 4f 50 5f 53 65 65 6b 58 58 2c 20 4f 50 5f 4e   OP_SeekXX, OP_N
0910: 65 78 74 2c 20 6f 72 20 4f 50 5f 50 72 65 76 20  ext, or OP_Prev 
0920: 6f 70 63 6f 64 65 73 2e 20 20 54 68 65 20 74 65  opcodes.  The te
0930: 73 74 0a 2a 2a 20 70 72 6f 63 65 64 75 72 65 73  st.** procedures
0940: 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d   use this inform
0950: 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75  ation to make su
0960: 72 65 20 74 68 61 74 20 69 6e 64 69 63 65 73 20  re that indices 
0970: 61 72 65 0a 2a 2a 20 77 6f 72 6b 69 6e 67 20 63  are.** working c
0980: 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20  orrectly.  This 
0990: 76 61 72 69 61 62 6c 65 20 68 61 73 20 6e 6f 20  variable has no 
09a0: 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74  function other t
09b0: 68 61 6e 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76  han to.** help v
09c0: 65 72 69 66 79 20 74 68 65 20 63 6f 72 72 65 63  erify the correc
09d0: 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  t operation of t
09e0: 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23  he library..*/.#
09f0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
0a00: 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 65  T.int sqlite3_se
0a10: 61 72 63 68 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a  arch_count = 0;.
0a20: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68  #endif../*.** Wh
0a30: 65 6e 20 74 68 69 73 20 67 6c 6f 62 61 6c 20 76  en this global v
0a40: 61 72 69 61 62 6c 65 20 69 73 20 70 6f 73 69 74  ariable is posit
0a50: 69 76 65 2c 20 69 74 20 67 65 74 73 20 64 65 63  ive, it gets dec
0a60: 72 65 6d 65 6e 74 65 64 20 6f 6e 63 65 20 62 65  remented once be
0a70: 66 6f 72 65 0a 2a 2a 20 65 61 63 68 20 69 6e 73  fore.** each ins
0a80: 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  truction in the 
0a90: 56 44 42 45 2e 20 20 57 68 65 6e 20 72 65 61 63  VDBE.  When reac
0aa0: 68 65 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31  hes zero, the u1
0ab0: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a  .isInterrupted.*
0ac0: 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73  * field of the s
0ad0: 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
0ae0: 20 69 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72   is set in order
0af0: 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 64   to simulate and
0b00: 20 69 6e 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a   interrupt..**.*
0b10: 2a 20 54 68 69 73 20 66 61 63 69 6c 69 74 79 20  * This facility 
0b20: 69 73 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  is used for test
0b30: 69 6e 67 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c  ing purposes onl
0b40: 79 2e 20 20 49 74 20 64 6f 65 73 20 6e 6f 74 20  y.  It does not 
0b50: 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61  function.** in a
0b60: 6e 20 6f 72 64 69 6e 61 72 79 20 62 75 69 6c 64  n ordinary build
0b70: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
0b80: 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69  TE_TEST.int sqli
0b90: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
0ba0: 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  unt = 0;.#endif.
0bb0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  ./*.** The next 
0bc0: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
0bd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65  is incremented e
0be0: 61 63 68 20 74 79 70 65 20 74 68 65 20 4f 50 5f  ach type the OP_
0bf0: 53 6f 72 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  Sort opcode.** i
0c00: 73 20 65 78 65 63 75 74 65 64 2e 20 20 54 68 65  s executed.  The
0c10: 20 74 65 73 74 20 70 72 6f 63 65 64 75 72 65 73   test procedures
0c20: 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d   use this inform
0c30: 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75  ation to make su
0c40: 72 65 20 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69  re that.** sorti
0c50: 6e 67 20 69 73 20 6f 63 63 75 72 72 69 6e 67 20  ng is occurring 
0c60: 6f 72 20 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67  or not occurring
0c70: 20 61 74 20 61 70 70 72 6f 70 72 69 61 74 65 20   at appropriate 
0c80: 74 69 6d 65 73 2e 20 20 20 54 68 69 73 20 76 61  times.   This va
0c90: 72 69 61 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f  riable.** has no
0ca0: 20 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20   function other 
0cb0: 74 68 61 6e 20 74 6f 20 68 65 6c 70 20 76 65 72  than to help ver
0cc0: 69 66 79 20 74 68 65 20 63 6f 72 72 65 63 74 20  ify the correct 
0cd0: 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  operation of the
0ce0: 0a 2a 2a 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a  .** library..*/.
0cf0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
0d00: 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73  ST.int sqlite3_s
0d10: 6f 72 74 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23  ort_count = 0;.#
0d20: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
0d30: 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61 72   next global var
0d40: 69 61 62 6c 65 20 72 65 63 6f 72 64 73 20 74 68  iable records th
0d50: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6c 61  e size of the la
0d60: 72 67 65 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a  rgest MEM_Blob.*
0d70: 2a 20 6f 72 20 4d 45 4d 5f 53 74 72 20 74 68 61  * or MEM_Str tha
0d80: 74 20 68 61 73 20 62 65 65 6e 20 75 73 65 64 20  t has been used 
0d90: 62 79 20 61 20 56 44 42 45 20 6f 70 63 6f 64 65  by a VDBE opcode
0da0: 2e 20 20 54 68 65 20 74 65 73 74 20 70 72 6f 63  .  The test proc
0db0: 65 64 75 72 65 73 0a 2a 2a 20 75 73 65 20 74 68  edures.** use th
0dc0: 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  is information t
0dd0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  o make sure that
0de0: 20 74 68 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66   the zero-blob f
0df0: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20  unctionality.** 
0e00: 69 73 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  is working corre
0e10: 63 74 6c 79 2e 20 20 20 54 68 69 73 20 76 61 72  ctly.   This var
0e20: 69 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e  iable has no fun
0e30: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0e40: 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69   to.** help veri
0e50: 66 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f  fy the correct o
0e60: 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  peration of the 
0e70: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0e80: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0e90: 6e 74 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62  nt sqlite3_max_b
0ea0: 6c 6f 62 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61  lobsize = 0;.sta
0eb0: 74 69 63 20 76 6f 69 64 20 75 70 64 61 74 65 4d  tic void updateM
0ec0: 61 78 42 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a  axBlobsize(Mem *
0ed0: 70 29 7b 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c  p){.  if( (p->fl
0ee0: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
0ef0: 45 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 26 26 20  EM_Blob))!=0 && 
0f00: 70 2d 3e 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78  p->n>sqlite3_max
0f10: 5f 62 6c 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20  _blobsize ){.   
0f20: 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f   sqlite3_max_blo
0f30: 62 73 69 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20  bsize = p->n;.  
0f40: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  }.}.#endif../*.*
0f50: 2a 20 54 65 73 74 20 61 20 72 65 67 69 73 74 65  * Test a registe
0f60: 72 20 74 6f 20 73 65 65 20 69 66 20 69 74 20 65  r to see if it e
0f70: 78 63 65 65 64 73 20 74 68 65 20 63 75 72 72 65  xceeds the curre
0f80: 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f 62 20  nt maximum blob 
0f90: 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74 20 64  size..** If it d
0fa0: 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20  oes, record the 
0fb0: 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c 6f 62  new maximum blob
0fc0: 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20 64 65   size..*/.#if de
0fd0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
0fe0: 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
0ff0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
1000: 49 4e 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e  IN_TEST).# defin
1010: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
1020: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
1030: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
1040: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
1050: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1060: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1070: 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65 20 67  ** Convert the g
1080: 69 76 65 6e 20 72 65 67 69 73 74 65 72 20 69 6e  iven register in
1090: 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66 20 69  to a string if i
10a0: 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a 20 61  t isn't one.** a
10b0: 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e 20 6e  lready. Return n
10c0: 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d 61 6c  on-zero if a mal
10d0: 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a 2f 0a  loc() fails..*/.
10e0: 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67 69 66  #define Stringif
10f0: 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20 20 69  y(P, enc) \.   i
1100: 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 28 4d  f(((P)->flags&(M
1110: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
1120: 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65 33 56  )==0 && sqlite3V
1130: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
1140: 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20 20 7b  P,enc)) \.     {
1150: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a   goto no_mem; }.
1160: 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65 6d 65  ./*.** An epheme
1170: 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  ral string value
1180: 20 28 73 69 67 6e 69 66 69 65 64 20 62 79 20 74   (signified by t
1190: 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66 6c 61  he MEM_Ephem fla
11a0: 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 61  g) contains.** a
11b0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 64 79   pointer to a dy
11c0: 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
11d0: 74 65 64 20 73 74 72 69 6e 67 20 77 68 65 72 65  ted string where
11e0: 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e 74 69   some other enti
11f0: 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f 6e 73  ty.** is respons
1200: 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c 6f 63  ible for dealloc
1210: 61 74 69 6e 67 20 74 68 61 74 20 73 74 72 69 6e  ating that strin
1220: 67 2e 20 20 42 65 63 61 75 73 65 20 74 68 65 20  g.  Because the 
1230: 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f 65 73  register.** does
1240: 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74 68 65   not control the
1250: 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69 67 68   string, it migh
1260: 74 20 62 65 20 64 65 6c 65 74 65 64 20 77 69 74  t be deleted wit
1270: 68 6f 75 74 20 74 68 65 20 72 65 67 69 73 74 65  hout the registe
1280: 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69 74 2e  r.** knowing it.
1290: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
12a0: 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  ine converts an 
12b0: 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67  ephemeral string
12c0: 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69 63 61   into a dynamica
12d0: 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  lly allocated.**
12e0: 20 73 74 72 69 6e 67 20 74 68 61 74 20 74 68 65   string that the
12f0: 20 72 65 67 69 73 74 65 72 20 69 74 73 65 6c 66   register itself
1300: 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e 20 6f   controls.  In o
1310: 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74 0a 2a  ther words, it.*
1320: 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 4d 45  * converts an ME
1330: 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67 20 69  M_Ephem string i
1340: 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e 20 73  nto an MEM_Dyn s
1350: 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tring..*/.#defin
1360: 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65  e Deephemeralize
1370: 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28 28 50  (P) \.   if( ((P
1380: 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45 70 68  )->flags&MEM_Eph
1390: 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20 20 20  em)!=0 \.       
13a0: 26 26 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  && sqlite3VdbeMe
13b0: 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 50  mMakeWriteable(P
13c0: 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ) ){ goto no_mem
13d0: 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c 6c 20 73  ;}../*.** Call s
13e0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
13f0: 61 6e 64 42 6c 6f 62 28 29 20 6f 6e 20 74 68 65  andBlob() on the
1400: 20 73 75 70 70 6c 69 65 64 20 76 61 6c 75 65 20   supplied value 
1410: 28 74 79 70 65 20 4d 65 6d 2a 29 0a 2a 2a 20 50  (type Mem*).** P
1420: 20 69 66 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   if required..*/
1430: 0a 23 64 65 66 69 6e 65 20 45 78 70 61 6e 64 42  .#define ExpandB
1440: 6c 6f 62 28 50 29 20 28 28 28 50 29 2d 3e 66 6c  lob(P) (((P)->fl
1450: 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 29 3f 73 71  ags&MEM_Zero)?sq
1460: 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
1470: 6e 64 42 6c 6f 62 28 50 29 3a 30 29 0a 0a 2f 2a  ndBlob(P):0)../*
1480: 0a 2a 2a 20 41 72 67 75 6d 65 6e 74 20 70 4d 65  .** Argument pMe
1490: 6d 20 70 6f 69 6e 74 73 20 61 74 20 61 20 72 65  m points at a re
14a0: 67 69 73 74 65 72 20 74 68 61 74 20 77 69 6c 6c  gister that will
14b0: 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 61 0a   be passed to a.
14c0: 2a 2a 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20  ** user-defined 
14d0: 66 75 6e 63 74 69 6f 6e 20 6f 72 20 72 65 74 75  function or retu
14e0: 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  rned to the user
14f0: 20 61 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f   as the result o
1500: 66 20 61 20 71 75 65 72 79 2e 0a 2a 2a 20 54 68  f a query..** Th
1510: 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e  e second argumen
1520: 74 2c 20 27 64 62 5f 65 6e 63 27 20 69 73 20 74  t, 'db_enc' is t
1530: 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  he text encoding
1540: 20 75 73 65 64 20 62 79 20 74 68 65 20 76 64 62   used by the vdb
1550: 65 20 66 6f 72 0a 2a 2a 20 72 65 67 69 73 74 65  e for.** registe
1560: 72 20 76 61 72 69 61 62 6c 65 73 2e 20 20 54 68  r variables.  Th
1570: 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20  is routine sets 
1580: 74 68 65 20 70 4d 65 6d 2d 3e 65 6e 63 20 61 6e  the pMem->enc an
1590: 64 20 70 4d 65 6d 2d 3e 74 79 70 65 0a 2a 2a 20  d pMem->type.** 
15a0: 76 61 72 69 61 62 6c 65 73 20 75 73 65 64 20 62  variables used b
15b0: 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 61  y the sqlite3_va
15c0: 6c 75 65 5f 2a 28 29 20 72 6f 75 74 69 6e 65 73  lue_*() routines
15d0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 74 6f  ..*/.#define sto
15e0: 72 65 54 79 70 65 49 6e 66 6f 28 41 2c 42 29 20  reTypeInfo(A,B) 
15f0: 5f 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 41  _storeTypeInfo(A
1600: 29 0a 73 74 61 74 69 63 20 76 6f 69 64 20 5f 73  ).static void _s
1610: 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 4d 65 6d  toreTypeInfo(Mem
1620: 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74 20 66   *pMem){.  int f
1630: 6c 61 67 73 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61  lags = pMem->fla
1640: 67 73 3b 0a 20 20 69 66 28 20 66 6c 61 67 73 20  gs;.  if( flags 
1650: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
1660: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
1670: 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a 20 20 7d 0a  QLITE_NULL;.  }.
1680: 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73    else if( flags
1690: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20   & MEM_Int ){.  
16a0: 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53    pMem->type = S
16b0: 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3b 0a 20  QLITE_INTEGER;. 
16c0: 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c   }.  else if( fl
16d0: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
16e0: 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65  {.    pMem->type
16f0: 20 3d 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3b   = SQLITE_FLOAT;
1700: 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20  .  }.  else if( 
1710: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
1720: 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70  ){.    pMem->typ
1730: 65 20 3d 20 53 51 4c 49 54 45 5f 54 45 58 54 3b  e = SQLITE_TEXT;
1740: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4d  .  }else{.    pM
1750: 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54  em->type = SQLIT
1760: 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a 0a 2f  E_BLOB;.  }.}../
1770: 2a 0a 2a 2a 20 50 72 6f 70 65 72 74 69 65 73 20  *.** Properties 
1780: 6f 66 20 6f 70 63 6f 64 65 73 2e 20 20 54 68 65  of opcodes.  The
1790: 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a   OPFLG_INITIALIZ
17a0: 45 52 20 6d 61 63 72 6f 20 69 73 0a 2a 2a 20 63  ER macro is.** c
17b0: 72 65 61 74 65 64 20 62 79 20 6d 6b 6f 70 63 6f  reated by mkopco
17c0: 64 65 68 2e 61 77 6b 20 64 75 72 69 6e 67 20 63  deh.awk during c
17d0: 6f 6d 70 69 6c 61 74 69 6f 6e 2e 20 20 44 61 74  ompilation.  Dat
17e0: 61 20 69 73 20 6f 62 74 61 69 6e 65 64 0a 2a 2a  a is obtained.**
17f0: 20 66 72 6f 6d 20 74 68 65 20 63 6f 6d 6d 65 6e   from the commen
1800: 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ts following the
1810: 20 22 63 61 73 65 20 4f 50 5f 78 78 78 78 3a 22   "case OP_xxxx:"
1820: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 0a 2a   statements in.*
1830: 2a 20 74 68 69 73 20 66 69 6c 65 2e 20 20 0a 2a  * this file.  .*
1840: 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75  /.static const u
1850: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 70 63  nsigned char opc
1860: 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 20 3d 20  odeProperty[] = 
1870: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
1880: 52 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  R;../*.** Return
1890: 20 74 72 75 65 20 69 66 20 61 6e 20 6f 70 63 6f   true if an opco
18a0: 64 65 20 68 61 73 20 61 6e 79 20 6f 66 20 74 68  de has any of th
18b0: 65 20 4f 50 46 4c 47 5f 78 78 78 20 70 72 6f 70  e OPFLG_xxx prop
18c0: 65 72 74 69 65 73 0a 2a 2a 20 73 70 65 63 69 66  erties.** specif
18d0: 69 65 64 20 62 79 20 6d 61 73 6b 2e 0a 2a 2f 0a  ied by mask..*/.
18e0: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 4f  int sqlite3VdbeO
18f0: 70 63 6f 64 65 48 61 73 50 72 6f 70 65 72 74 79  pcodeHasProperty
1900: 28 69 6e 74 20 6f 70 63 6f 64 65 2c 20 69 6e 74  (int opcode, int
1910: 20 6d 61 73 6b 29 7b 0a 20 20 61 73 73 65 72 74   mask){.  assert
1920: 28 20 6f 70 63 6f 64 65 3e 30 20 26 26 20 6f 70  ( opcode>0 && op
1930: 63 6f 64 65 3c 28 69 6e 74 29 73 69 7a 65 6f 66  code<(int)sizeof
1940: 28 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 29  (opcodeProperty)
1950: 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 6f 70   );.  return (op
1960: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 6f 70 63  codeProperty[opc
1970: 6f 64 65 5d 26 6d 61 73 6b 29 21 3d 30 3b 0a 7d  ode]&mask)!=0;.}
1980: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  ../*.** Allocate
1990: 20 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d 62   VdbeCursor numb
19a0: 65 72 20 69 43 75 72 2e 20 20 52 65 74 75 72 6e  er iCur.  Return
19b0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74   a pointer to it
19c0: 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a  .  Return NULL.*
19d0: 2a 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74 20  * if we run out 
19e0: 6f 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74  of memory..*/.st
19f0: 61 74 69 63 20 56 64 62 65 43 75 72 73 6f 72 20  atic VdbeCursor 
1a00: 2a 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28  *allocateCursor(
1a10: 0a 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20 20  .  Vdbe *p,     
1a20: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1a30: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
1a40: 2a 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 20  */.  int iCur,  
1a50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1a60: 64 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20 56  dex of the new V
1a70: 64 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20 69  dbeCursor */.  i
1a80: 6e 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20 20  nt nField,      
1a90: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1aa0: 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
1ab0: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 2a  table or index *
1ac0: 2f 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20 20  /.  int iDb,    
1ad0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65            /* Whe
1ae0: 6e 20 64 61 74 61 62 61 73 65 20 74 68 65 20 63  n database the c
1af0: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
1b00: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 69 6e 74  , or -1 */.  int
1b10: 20 69 73 42 74 72 65 65 43 75 72 73 6f 72 20 20   isBtreeCursor  
1b20: 20 20 20 2f 2a 20 2a 2f 0a 29 7b 0a 20 20 2f 2a     /* */.){.  /*
1b30: 20 46 69 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79   Find the memory
1b40: 20 63 65 6c 6c 20 74 68 61 74 20 77 69 6c 6c 20   cell that will 
1b50: 62 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  be used to store
1b60: 20 74 68 65 20 62 6c 6f 62 20 6f 66 20 6d 65 6d   the blob of mem
1b70: 6f 72 79 0a 20 20 2a 2a 20 72 65 71 75 69 72 65  ory.  ** require
1b80: 64 20 66 6f 72 20 74 68 69 73 20 56 64 62 65 43  d for this VdbeC
1b90: 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65 2e  ursor structure.
1ba0: 20 49 74 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e   It is convenien
1bb0: 74 20 74 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a  t to use a .  **
1bc0: 20 76 64 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c   vdbe memory cel
1bd0: 6c 20 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20  l to manage the 
1be0: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
1bf0: 6e 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 61  n required for a
1c00: 0a 20 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72  .  ** VdbeCursor
1c10: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 74   structure for t
1c20: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61  he following rea
1c30: 73 6f 6e 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20  sons:.  **.  ** 
1c40: 20 20 2a 20 53 6f 6d 65 74 69 6d 65 73 20 63 75    * Sometimes cu
1c50: 72 73 6f 72 20 6e 75 6d 62 65 72 73 20 61 72 65  rsor numbers are
1c60: 20 75 73 65 64 20 66 6f 72 20 61 20 63 6f 75 70   used for a coup
1c70: 6c 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 0a  le of different.
1c80: 20 20 2a 2a 20 20 20 20 20 70 75 72 70 6f 73 65    **     purpose
1c90: 73 20 69 6e 20 61 20 76 64 62 65 20 70 72 6f 67  s in a vdbe prog
1ca0: 72 61 6d 2e 20 54 68 65 20 64 69 66 66 65 72 65  ram. The differe
1cb0: 6e 74 20 75 73 65 73 20 6d 69 67 68 74 20 72 65  nt uses might re
1cc0: 71 75 69 72 65 0a 20 20 2a 2a 20 20 20 20 20 64  quire.  **     d
1cd0: 69 66 66 65 72 65 6e 74 20 73 69 7a 65 64 20 61  ifferent sized a
1ce0: 6c 6c 6f 63 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f  llocations. Memo
1cf0: 72 79 20 63 65 6c 6c 73 20 70 72 6f 76 69 64 65  ry cells provide
1d00: 20 67 72 6f 77 61 62 6c 65 0a 20 20 2a 2a 20 20   growable.  **  
1d10: 20 20 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a     allocations..
1d20: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 57 68    **.  **   * Wh
1d30: 65 6e 20 75 73 69 6e 67 20 45 4e 41 42 4c 45 5f  en using ENABLE_
1d40: 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e  MEMORY_MANAGEMEN
1d50: 54 2c 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 62  T, memory cell b
1d60: 75 66 66 65 72 73 20 63 61 6e 0a 20 20 2a 2a 20  uffers can.  ** 
1d70: 20 20 20 20 62 65 20 66 72 65 65 64 20 6c 61 7a      be freed laz
1d80: 69 6c 79 20 76 69 61 20 74 68 65 20 73 71 6c 69  ily via the sqli
1d90: 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  te3_release_memo
1da0: 72 79 28 29 20 41 50 49 2e 20 54 68 69 73 0a 20  ry() API. This. 
1db0: 20 2a 2a 20 20 20 20 20 6d 69 6e 69 6d 69 7a 65   **     minimize
1dc0: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1dd0: 6d 61 6c 6c 6f 63 20 63 61 6c 6c 73 20 6d 61 64  malloc calls mad
1de0: 65 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e  e by the system.
1df0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4d 65 6d 6f 72  .  **.  ** Memor
1e00: 79 20 63 65 6c 6c 73 20 66 6f 72 20 63 75 72 73  y cells for curs
1e10: 6f 72 73 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  ors are allocate
1e20: 64 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20  d at the top of 
1e30: 74 68 65 20 61 64 64 72 65 73 73 0a 20 20 2a 2a  the address.  **
1e40: 20 73 70 61 63 65 2e 20 4d 65 6d 6f 72 79 20 63   space. Memory c
1e50: 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 29 20 63 6f  ell (p->nMem) co
1e60: 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 63 75 72  rresponds to cur
1e70: 73 6f 72 20 30 2e 20 53 70 61 63 65 20 66 6f 72  sor 0. Space for
1e80: 0a 20 20 2a 2a 20 63 75 72 73 6f 72 20 31 20 69  .  ** cursor 1 i
1e90: 73 20 6d 61 6e 61 67 65 64 20 62 79 20 6d 65 6d  s managed by mem
1ea0: 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65  ory cell (p->nMe
1eb0: 6d 2d 31 29 2c 20 65 74 63 2e 0a 20 20 2a 2f 0a  m-1), etc..  */.
1ec0: 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 26 70    Mem *pMem = &p
1ed0: 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69  ->aMem[p->nMem-i
1ee0: 43 75 72 5d 3b 0a 0a 20 20 69 6e 74 20 6e 42 79  Cur];..  int nBy
1ef0: 74 65 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  te;.  VdbeCursor
1f00: 20 2a 70 43 78 20 3d 20 30 3b 0a 20 20 6e 42 79   *pCx = 0;.  nBy
1f10: 74 65 20 3d 20 0a 20 20 20 20 20 20 73 69 7a 65  te = .      size
1f20: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 20 2b  of(VdbeCursor) +
1f30: 20 0a 20 20 20 20 20 20 28 69 73 42 74 72 65 65   .      (isBtree
1f40: 43 75 72 73 6f 72 3f 73 71 6c 69 74 65 33 42 74  Cursor?sqlite3Bt
1f50: 72 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a  reeCursorSize():
1f60: 30 29 20 2b 20 0a 20 20 20 20 20 20 32 2a 6e 46  0) + .      2*nF
1f70: 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29  ield*sizeof(u32)
1f80: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
1f90: 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  r<p->nCursor );.
1fa0: 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69    if( p->apCsr[i
1fb0: 43 75 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69  Cur] ){.    sqli
1fc0: 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f  te3VdbeFreeCurso
1fd0: 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43  r(p, p->apCsr[iC
1fe0: 75 72 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70 43  ur]);.    p->apC
1ff0: 73 72 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20 20  sr[iCur] = 0;.  
2000: 7d 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  }.  if( SQLITE_O
2010: 4b 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65  K==sqlite3VdbeMe
2020: 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e 42 79 74  mGrow(pMem, nByt
2030: 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 70 2d 3e  e, 0) ){.    p->
2040: 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43  apCsr[iCur] = pC
2050: 78 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a  x = (VdbeCursor*
2060: 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65  )pMem->z;.    me
2070: 6d 73 65 74 28 70 4d 65 6d 2d 3e 7a 2c 20 30 2c  mset(pMem->z, 0,
2080: 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 70 43 78   nByte);.    pCx
2090: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
20a0: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
20b0: 46 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 6e  Field;.    if( n
20c0: 46 69 65 6c 64 20 29 7b 0a 20 20 20 20 20 20 70  Field ){.      p
20d0: 43 78 2d 3e 61 54 79 70 65 20 3d 20 28 75 33 32  Cx->aType = (u32
20e0: 20 2a 29 26 70 4d 65 6d 2d 3e 7a 5b 73 69 7a 65   *)&pMem->z[size
20f0: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 5d 3b  of(VdbeCursor)];
2100: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69  .    }.    if( i
2110: 73 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a  sBtreeCursor ){.
2120: 20 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73        pCx->pCurs
2130: 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29  or = (BtCursor*)
2140: 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d  .          &pMem
2150: 2d 3e 7a 5b 73 69 7a 65 6f 66 28 56 64 62 65 43  ->z[sizeof(VdbeC
2160: 75 72 73 6f 72 29 2b 32 2a 6e 46 69 65 6c 64 2a  ursor)+2*nField*
2170: 73 69 7a 65 6f 66 28 75 33 32 29 5d 3b 0a 20 20  sizeof(u32)];.  
2180: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
2190: 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54   pCx;.}../*.** T
21a0: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20  ry to convert a 
21b0: 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d  value into a num
21c0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
21d0: 69 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a  ion if we can.**
21e0: 20 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20 6c   do so without l
21f0: 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  oss of informati
2200: 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
2210: 72 64 73 2c 20 69 66 20 74 68 65 20 73 74 72 69  rds, if the stri
2220: 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65  ng.** looks like
2230: 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65   a number, conve
2240: 72 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d  rt it into a num
2250: 62 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65 73  ber.  If it does
2260: 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b   not.** look lik
2270: 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76  e a number, leav
2280: 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2f 0a 73  e it alone..*/.s
2290: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
22a0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
22b0: 4d 65 6d 20 2a 70 52 65 63 29 7b 0a 20 20 69 66  Mem *pRec){.  if
22c0: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  ( (pRec->flags &
22d0: 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49   (MEM_Real|MEM_I
22e0: 6e 74 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  nt))==0 ){.    i
22f0: 6e 74 20 72 65 61 6c 6e 75 6d 3b 0a 20 20 20 20  nt realnum;.    
2300: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
2310: 6c 54 65 72 6d 69 6e 61 74 65 28 70 52 65 63 29  lTerminate(pRec)
2320: 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d  ;.    if( (pRec-
2330: 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 0a  >flags&MEM_Str).
2340: 20 20 20 20 20 20 20 20 20 26 26 20 73 71 6c 69           && sqli
2350: 74 65 33 49 73 4e 75 6d 62 65 72 28 70 52 65 63  te3IsNumber(pRec
2360: 2d 3e 7a 2c 20 26 72 65 61 6c 6e 75 6d 2c 20 70  ->z, &realnum, p
2370: 52 65 63 2d 3e 65 6e 63 29 20 29 7b 0a 20 20 20  Rec->enc) ){.   
2380: 20 20 20 69 36 34 20 76 61 6c 75 65 3b 0a 20 20     i64 value;.  
2390: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
23a0: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 52  hangeEncoding(pR
23b0: 65 63 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  ec, SQLITE_UTF8)
23c0: 3b 0a 20 20 20 20 20 20 69 66 28 20 21 72 65 61  ;.      if( !rea
23d0: 6c 6e 75 6d 20 26 26 20 73 71 6c 69 74 65 33 41  lnum && sqlite3A
23e0: 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26  toi64(pRec->z, &
23f0: 76 61 6c 75 65 29 20 29 7b 0a 20 20 20 20 20 20  value) ){.      
2400: 20 20 70 52 65 63 2d 3e 75 2e 69 20 3d 20 76 61    pRec->u.i = va
2410: 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d  lue;.        Mem
2420: 53 65 74 54 79 70 65 46 6c 61 67 28 70 52 65 63  SetTypeFlag(pRec
2430: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20  , MEM_Int);.    
2440: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
2450: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
2460: 65 61 6c 69 66 79 28 70 52 65 63 29 3b 0a 20 20  ealify(pRec);.  
2470: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
2480: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73  }../*.** Process
2490: 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ing is determine
24a0: 20 62 79 20 74 68 65 20 61 66 66 69 6e 69 74 79   by the affinity
24b0: 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a   parameter:.**.*
24c0: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  * SQLITE_AFF_INT
24d0: 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  EGER:.** SQLITE_
24e0: 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c  AFF_REAL:.** SQL
24f0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 3a  ITE_AFF_NUMERIC:
2500: 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20 63 6f  .**    Try to co
2510: 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 6e  nvert pRec to an
2520: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2530: 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a  ntation or a .**
2540: 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69      floating-poi
2550: 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  nt representatio
2560: 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65 72 20  n if an integer 
2570: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a  representation.*
2580: 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f 73 73  *    is not poss
2590: 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61 74  ible.  Note that
25a0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 65 70   the integer rep
25b0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a 2a  resentation is.*
25c0: 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72 65 66  *    always pref
25d0: 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66 20 74  erred, even if t
25e0: 68 65 20 61 66 66 69 6e 69 74 79 20 69 73 20 52  he affinity is R
25f0: 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a 20  EAL, because.** 
2600: 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65     an integer re
2610: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 20  presentation is 
2620: 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66 69 63  more space effic
2630: 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a  ient on disk..**
2640: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  .** SQLITE_AFF_T
2650: 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76 65  EXT:.**    Conve
2660: 72 74 20 70 52 65 63 20 74 6f 20 61 20 74 65 78  rt pRec to a tex
2670: 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  t representation
2680: 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  ..**.** SQLITE_A
2690: 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20 4e  FF_NONE:.**    N
26a0: 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73 20 75  o-op.  pRec is u
26b0: 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61  nchanged..*/.sta
26c0: 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 41 66  tic void applyAf
26d0: 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a 70  finity(.  Mem *p
26e0: 52 65 63 2c 20 20 20 20 20 20 20 20 20 20 2f 2a  Rec,          /*
26f0: 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 61 70   The value to ap
2700: 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74 6f 20  ply affinity to 
2710: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
2720: 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ty,      /* The 
2730: 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61  affinity to be a
2740: 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20 65  pplied */.  u8 e
2750: 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20 20  nc              
2760: 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65 78 74  /* Use this text
2770: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a   encoding */.){.
2780: 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d    if( affinity==
2790: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
27a0: 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61  ){.    /* Only a
27b0: 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65  ttempt the conve
27c0: 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66  rsion to TEXT if
27d0: 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74   there is an int
27e0: 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20  eger or real.   
27f0: 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69   ** representati
2800: 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c  on (blob and NUL
2810: 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e  L do not get con
2820: 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73  verted) but no s
2830: 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70  tring.    ** rep
2840: 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20  resentation..   
2850: 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28   */.    if( 0==(
2860: 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pRec->flags&MEM_
2870: 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e 66  Str) && (pRec->f
2880: 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d  lags&(MEM_Real|M
2890: 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20 20  EM_Int)) ){.    
28a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
28b0: 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20  Stringify(pRec, 
28c0: 65 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  enc);.    }.    
28d0: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
28e0: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
28f0: 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  t);.  }else if( 
2900: 61 66 66 69 6e 69 74 79 21 3d 53 51 4c 49 54 45  affinity!=SQLITE
2910: 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20 20 20  _AFF_NONE ){.   
2920: 20 61 73 73 65 72 74 28 20 61 66 66 69 6e 69 74   assert( affinit
2930: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  y==SQLITE_AFF_IN
2940: 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74  TEGER || affinit
2950: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  y==SQLITE_AFF_RE
2960: 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  AL.             
2970: 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  || affinity==SQL
2980: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
2990: 29 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d 65  );.    applyNume
29a0: 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65 63  ricAffinity(pRec
29b0: 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d  );.    if( pRec-
29c0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
29d0: 6c 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  l ){.      sqlit
29e0: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
29f0: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2a00: 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   }.  }.}../*.** 
2a10: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 74  Try to convert t
2a20: 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75 6e  he type of a fun
2a30: 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f  ction argument o
2a40: 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  r a result colum
2a50: 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65  n.** into a nume
2a60: 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74 69  ric representati
2a70: 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72 20  on.  Use either 
2a80: 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20  INTEGER or REAL 
2a90: 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73 20  whichever.** is 
2aa0: 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42 75  appropriate.  Bu
2ab0: 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f  t only do the co
2ac0: 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20 69  nversion if it i
2ad0: 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68 6f  s possible witho
2ae0: 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e  ut.** loss of in
2af0: 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65  formation and re
2b00: 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65 64  turn the revised
2b10: 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72 67   type of the arg
2b20: 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ument..**.** Thi
2b30: 73 20 69 73 20 61 6e 20 45 58 50 45 52 49 4d 45  s is an EXPERIME
2b40: 4e 54 41 4c 20 61 70 69 20 61 6e 64 20 69 73 20  NTAL api and is 
2b50: 73 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67  subject to chang
2b60: 65 20 6f 72 20 72 65 6d 6f 76 61 6c 2e 0a 2a 2f  e or removal..*/
2b70: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c  .int sqlite3_val
2b80: 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28  ue_numeric_type(
2b90: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
2ba0: 56 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65  Val){.  Mem *pMe
2bb0: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2bc0: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
2bd0: 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a 20 20  finity(pMem);.  
2be0: 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 70 4d  storeTypeInfo(pM
2bf0: 65 6d 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e  em, 0);.  return
2c00: 20 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a 7d 0a 0a   pMem->type;.}..
2c10: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2c20: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2c30: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2c40: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2c50: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2c60: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
2c70: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
2c80: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2c90: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
2ca0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
2cb0: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
2cc0: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
2cd0: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
2ce0: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
2cf0: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
2d00: 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
2d10: 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72  E_DEBUG./*.** Wr
2d20: 69 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e  ite a nice strin
2d30: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
2d40: 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73   of the contents
2d50: 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a   of cell pMem.**
2d60: 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75   into buffer zBu
2d70: 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a  f, length nBuf..
2d80: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
2d90: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
2da0: 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61  t(Mem *pMem, cha
2db0: 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72  r *zBuf){.  char
2dc0: 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20   *zCsr = zBuf;. 
2dd0: 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66   int f = pMem->f
2de0: 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20  lags;..  static 
2df0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
2e00: 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b  t encnames[] = {
2e10: 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28  "(X)", "(8)", "(
2e20: 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22  16LE)", "(16BE)"
2e30: 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f  };..  if( f&MEM_
2e40: 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20  Blob ){.    int 
2e50: 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20  i;.    char c;. 
2e60: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
2e70: 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  yn ){.      c = 
2e80: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
2e90: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
2ea0: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
2eb0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
2ec0: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
2ed0: 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  ic ){.      c = 
2ee0: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
2ef0: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
2f00: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
2f10: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
2f20: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
2f30: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b  {.      c = 'e';
2f40: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
2f50: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
2f60: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
2f70: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2f80: 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a   c = 's';.    }.
2f90: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
2fa0: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
2fb0: 20 22 25 63 22 2c 20 63 29 3b 0a 20 20 20 20 7a   "%c", c);.    z
2fc0: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
2fd0: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
2fe0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
2ff0: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3000: 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20  d[", pMem->n);. 
3010: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
3020: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
3030: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
3040: 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e  <16 && i<pMem->n
3050: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71  ; i++){.      sq
3060: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3070: 30 30 2c 20 7a 43 73 72 2c 20 22 25 30 32 58 22  00, zCsr, "%02X"
3080: 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b  , ((int)pMem->z[
3090: 69 5d 20 26 20 30 78 46 46 29 29 3b 0a 20 20 20  i] & 0xFF));.   
30a0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
30b0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
30c0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28  ;.    }.    for(
30d0: 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70  i=0; i<16 && i<p
30e0: 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20  Mem->n; i++){.  
30f0: 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d 65      char z = pMe
3100: 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69  m->z[i];.      i
3110: 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36  f( z<32 || z>126
3120: 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27   ) *zCsr++ = '.'
3130: 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a 43  ;.      else *zC
3140: 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a  sr++ = z;.    }.
3150: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3160: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
3170: 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d 65 73   "]%s", encnames
3180: 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20  [pMem->enc]);.  
3190: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
31a0: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
31b0: 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d  .    if( f & MEM
31c0: 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73  _Zero ){.      s
31d0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
31e0: 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22  100, zCsr,"+%dz"
31f0: 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b  ,pMem->u.nZero);
3200: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
3210: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3220: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
3230: 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20  *zCsr = '\0';.  
3240: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
3250: 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e 74  M_Str ){.    int
3260: 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b   j, k;.    zBuf[
3270: 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69 66  0] = ' ';.    if
3280: 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b  ( f & MEM_Dyn ){
3290: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
32a0: 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'z';.      asse
32b0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
32c0: 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  atic|MEM_Ephem))
32d0: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
32e0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61   if( f & MEM_Sta
32f0: 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42 75  tic ){.      zBu
3300: 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20  f[1] = 't';.    
3310: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
3320: 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65  MEM_Dyn|MEM_Ephe
3330: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
3340: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
3350: 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a  Ephem ){.      z
3360: 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20  Buf[1] = 'e';.  
3370: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3380: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
3390: 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20  _Dyn))==0 );.   
33a0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42   }else{.      zB
33b0: 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20  uf[1] = 's';.   
33c0: 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20   }.    k = 2;.  
33d0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
33e0: 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d  tf(100, &zBuf[k]
33f0: 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29  , "%d", pMem->n)
3400: 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74  ;.    k += sqlit
3410: 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66  e3Strlen30(&zBuf
3420: 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b  [k]);.    zBuf[k
3430: 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66  ++] = '[';.    f
3440: 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20  or(j=0; j<15 && 
3450: 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b  j<pMem->n; j++){
3460: 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20 70 4d  .      u8 c = pM
3470: 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20  em->z[j];.      
3480: 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63  if( c>=0x20 && c
3490: 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20 20  <0x7f ){.       
34a0: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a   zBuf[k++] = c;.
34b0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
34c0: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
34d0: 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20   '.';.      }.  
34e0: 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b    }.    zBuf[k++
34f0: 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c  ] = ']';.    sql
3500: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3510: 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e  0,&zBuf[k], encn
3520: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
3530: 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74  ;.    k += sqlit
3540: 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66  e3Strlen30(&zBuf
3550: 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b  [k]);.    zBuf[k
3560: 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23  ++] = 0;.  }.}.#
3570: 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
3580: 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
3590: 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65   Print the value
35a0: 20 6f 66 20 61 20 72 65 67 69 73 74 65 72 20 66   of a register f
35b0: 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f  or tracing purpo
35c0: 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ses:.*/.static v
35d0: 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e  oid memTracePrin
35e0: 74 28 46 49 4c 45 20 2a 6f 75 74 2c 20 4d 65 6d  t(FILE *out, Mem
35f0: 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66   *p){.  if( p->f
3600: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
3610: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
3620: 75 74 2c 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20  ut, " NULL");.  
3630: 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c  }else if( (p->fl
3640: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
3650: 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49  EM_Str))==(MEM_I
3660: 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20  nt|MEM_Str) ){. 
3670: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20     fprintf(out, 
3680: 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  " si:%lld", p->u
3690: 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  .i);.  }else if(
36a0: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
36b0: 49 6e 74 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  Int ){.    fprin
36c0: 74 66 28 6f 75 74 2c 20 22 20 69 3a 25 6c 6c 64  tf(out, " i:%lld
36d0: 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65  ", p->u.i);.  }e
36e0: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
36f0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
3700: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20     fprintf(out, 
3710: 22 20 72 3a 25 67 22 2c 20 70 2d 3e 72 29 3b 0a  " r:%g", p->r);.
3720: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3730: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
3740: 74 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66  t ){.    fprintf
3750: 28 6f 75 74 2c 20 22 20 28 72 6f 77 73 65 74 29  (out, " (rowset)
3760: 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ");.  }else{.   
3770: 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b   char zBuf[200];
3780: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
3790: 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70  MemPrettyPrint(p
37a0: 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 66 70 72  , zBuf);.    fpr
37b0: 69 6e 74 66 28 6f 75 74 2c 20 22 20 22 29 3b 0a  intf(out, " ");.
37c0: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
37d0: 20 22 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20   "%s", zBuf);.  
37e0: 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  }.}.static void 
37f0: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 46 49  registerTrace(FI
3800: 4c 45 20 2a 6f 75 74 2c 20 69 6e 74 20 69 52 65  LE *out, int iRe
3810: 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 66 70  g, Mem *p){.  fp
3820: 72 69 6e 74 66 28 6f 75 74 2c 20 22 52 45 47 5b  rintf(out, "REG[
3830: 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a  %d] = ", iReg);.
3840: 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28    memTracePrint(
3850: 6f 75 74 2c 20 70 29 3b 0a 20 20 66 70 72 69 6e  out, p);.  fprin
3860: 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 7d  tf(out, "\n");.}
3870: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
3880: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20  SQLITE_DEBUG.#  
3890: 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f  define REGISTER_
38a0: 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 70 2d  TRACE(R,M) if(p-
38b0: 3e 74 72 61 63 65 29 72 65 67 69 73 74 65 72 54  >trace)registerT
38c0: 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 52 2c  race(p->trace,R,
38d0: 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  M).#else.#  defi
38e0: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
38f0: 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a  E(R,M).#endif...
3900: 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
3910: 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69  ILE../* .** hwti
3920: 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e  me.h contains in
3930: 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63  line assembler c
3940: 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e  ode for implemen
3950: 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65  ting .** high-pe
3960: 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67  rformance timing
3970: 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69   routines..*/.#i
3980: 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68  nclude "hwtime.h
3990: 22 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  "..#endif../*.**
39a0: 20 54 68 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49   The CHECK_FOR_I
39b0: 4e 54 45 52 52 55 50 54 20 6d 61 63 72 6f 20 64  NTERRUPT macro d
39c0: 65 66 69 6e 65 64 20 68 65 72 65 20 6c 6f 6f 6b  efined here look
39d0: 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 0a  s to see if the.
39e0: 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  ** sqlite3_inter
39f0: 72 75 70 74 28 29 20 72 6f 75 74 69 6e 65 20 68  rupt() routine h
3a00: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 2e 20  as been called. 
3a10: 20 49 66 20 69 74 20 68 61 73 20 62 65 65 6e 2c   If it has been,
3a20: 20 74 68 65 6e 0a 2a 2a 20 70 72 6f 63 65 73 73   then.** process
3a30: 69 6e 67 20 6f 66 20 74 68 65 20 56 44 42 45 20  ing of the VDBE 
3a40: 70 72 6f 67 72 61 6d 20 69 73 20 69 6e 74 65 72  program is inter
3a50: 72 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  rupted..**.** Th
3a60: 69 73 20 6d 61 63 72 6f 20 61 64 64 65 64 20 74  is macro added t
3a70: 6f 20 65 76 65 72 79 20 69 6e 73 74 72 75 63 74  o every instruct
3a80: 69 6f 6e 20 74 68 61 74 20 64 6f 65 73 20 61 20  ion that does a 
3a90: 6a 75 6d 70 20 69 6e 20 6f 72 64 65 72 20 74 6f  jump in order to
3aa0: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20  .** implement a 
3ab0: 6c 6f 6f 70 2e 20 20 54 68 69 73 20 74 65 73 74  loop.  This test
3ac0: 20 75 73 65 64 20 74 6f 20 62 65 20 6f 6e 20 65   used to be on e
3ad0: 76 65 72 79 20 73 69 6e 67 6c 65 20 69 6e 73 74  very single inst
3ae0: 72 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62 75 74 20  ruction,.** but 
3af0: 74 68 61 74 20 6d 65 61 6e 74 20 77 65 20 6d 6f  that meant we mo
3b00: 72 65 20 74 65 73 74 69 6e 67 20 74 68 61 74 20  re testing that 
3b10: 77 65 20 6e 65 65 64 65 64 2e 20 20 42 79 20 6f  we needed.  By o
3b20: 6e 6c 79 20 74 65 73 74 69 6e 67 20 74 68 65 0a  nly testing the.
3b30: 2a 2a 20 66 6c 61 67 20 6f 6e 20 6a 75 6d 70 20  ** flag on jump 
3b40: 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c 20 77 65  instructions, we
3b50: 20 67 65 74 20 61 20 28 73 6d 61 6c 6c 29 20 73   get a (small) s
3b60: 70 65 65 64 20 69 6d 70 72 6f 76 65 6d 65 6e 74  peed improvement
3b70: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 48 45  ..*/.#define CHE
3b80: 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54  CK_FOR_INTERRUPT
3b90: 20 5c 0a 20 20 20 69 66 28 20 64 62 2d 3e 75 31   \.   if( db->u1
3ba0: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
3bb0: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
3bc0: 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 0a 23  to_interrupt;..#
3bd0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3be0: 55 47 0a 73 74 61 74 69 63 20 69 6e 74 20 66 69  UG.static int fi
3bf0: 6c 65 45 78 69 73 74 73 28 73 71 6c 69 74 65 33  leExists(sqlite3
3c00: 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72   *db, const char
3c10: 20 2a 7a 46 69 6c 65 29 7b 0a 20 20 69 6e 74 20   *zFile){.  int 
3c20: 72 65 73 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72  res = 0;.  int r
3c30: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23  c = SQLITE_OK;.#
3c40: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
3c50: 54 0a 20 20 2f 2a 20 49 66 20 77 65 20 61 72 65  T.  /* If we are
3c60: 20 63 75 72 72 65 6e 74 6c 79 20 74 65 73 74 69   currently testi
3c70: 6e 67 20 49 4f 20 65 72 72 6f 72 73 2c 20 74 68  ng IO errors, th
3c80: 65 6e 20 64 6f 20 6e 6f 74 20 63 61 6c 6c 20 4f  en do not call O
3c90: 73 41 63 63 65 73 73 28 29 20 74 6f 0a 20 20 2a  sAccess() to.  *
3ca0: 2a 20 74 65 73 74 20 66 6f 72 20 74 68 65 20 70  * test for the p
3cb0: 72 65 73 65 6e 63 65 20 6f 66 20 7a 46 69 6c 65  resence of zFile
3cc0: 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73  . This is becaus
3cd0: 65 20 61 6e 79 20 49 4f 20 65 72 72 6f 72 20 74  e any IO error t
3ce0: 68 61 74 0a 20 20 2a 2a 20 6f 63 63 75 72 73 20  hat.  ** occurs 
3cf0: 68 65 72 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  here will not be
3d00: 20 72 65 70 6f 72 74 65 64 2c 20 63 61 75 73 69   reported, causi
3d10: 6e 67 20 74 68 65 20 74 65 73 74 20 74 6f 20 66  ng the test to f
3d20: 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 65 78 74 65  ail..  */.  exte
3d30: 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 69  rn int sqlite3_i
3d40: 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69 6e 67 3b  o_error_pending;
3d50: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69  .  if( sqlite3_i
3d60: 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69 6e 67 3c  o_error_pending<
3d70: 3d 30 20 29 0a 23 65 6e 64 69 66 0a 20 20 20 20  =0 ).#endif.    
3d80: 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63  rc = sqlite3OsAc
3d90: 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a  cess(db->pVfs, z
3da0: 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 41 43 43  File, SQLITE_ACC
3db0: 45 53 53 5f 45 58 49 53 54 53 2c 20 26 72 65 73  ESS_EXISTS, &res
3dc0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 72 65 73  );.  return (res
3dd0: 20 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   && rc==SQLITE_O
3de0: 4b 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  K);.}.#endif..#i
3df0: 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a  fndef NDEBUG./*.
3e00: 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** This function
3e10: 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20   is only called 
3e20: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61  from within an a
3e30: 73 73 65 72 74 28 29 20 65 78 70 72 65 73 73 69  ssert() expressi
3e40: 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73  on. It.** checks
3e50: 20 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65   that the sqlite
3e60: 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76  3.nTransaction v
3e70: 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65  ariable is corre
3e80: 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74  ctly set to.** t
3e90: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  he number of non
3ea0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76  -transaction sav
3eb0: 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c  epoints currentl
3ec0: 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e  y in the .** lin
3ed0: 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e  ked list startin
3ee0: 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61  g at sqlite3.pSa
3ef0: 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20  vepoint..** .** 
3f00: 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  Usage:.**.**    
3f10: 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61   assert( checkSa
3f20: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29  vepointCount(db)
3f30: 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e   );.*/.static in
3f40: 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74  t checkSavepoint
3f50: 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64  Count(sqlite3 *d
3f60: 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b  b){.  int n = 0;
3f70: 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b  .  Savepoint *p;
3f80: 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61  .  for(p=db->pSa
3f90: 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d  vepoint; p; p=p-
3fa0: 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61  >pNext) n++;.  a
3fb0: 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e  ssert( n==(db->n
3fc0: 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e  Savepoint + db->
3fd0: 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
3fe0: 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74  epoint) );.  ret
3ff0: 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a  urn 1;.}.#endif.
4000: 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61  ./*.** Execute a
4010: 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45  s much of a VDBE
4020: 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63   program as we c
4030: 61 6e 20 74 68 65 6e 20 72 65 74 75 72 6e 2e 0a  an then return..
4040: 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  **.** sqlite3Vdb
4050: 65 4d 61 6b 65 52 65 61 64 79 28 29 20 6d 75 73  eMakeReady() mus
4060: 74 20 62 65 20 63 61 6c 6c 65 64 20 62 65 66 6f  t be called befo
4070: 72 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  re this routine 
4080: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63  in order to.** c
4090: 6c 6f 73 65 20 74 68 65 20 70 72 6f 67 72 61 6d  lose the program
40a0: 20 77 69 74 68 20 61 20 66 69 6e 61 6c 20 4f 50   with a final OP
40b0: 5f 48 61 6c 74 20 61 6e 64 20 74 6f 20 73 65 74  _Halt and to set
40c0: 20 75 70 20 74 68 65 20 63 61 6c 6c 62 61 63 6b   up the callback
40d0: 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 65 72 72  s.** and the err
40e0: 6f 72 20 6d 65 73 73 61 67 65 20 70 6f 69 6e 74  or message point
40f0: 65 72 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 65 76  er..**.** Whenev
4100: 65 72 20 61 20 72 6f 77 20 6f 72 20 72 65 73 75  er a row or resu
4110: 6c 74 20 64 61 74 61 20 69 73 20 61 76 61 69 6c  lt data is avail
4120: 61 62 6c 65 2c 20 74 68 69 73 20 72 6f 75 74 69  able, this routi
4130: 6e 65 20 77 69 6c 6c 20 65 69 74 68 65 72 0a 2a  ne will either.*
4140: 2a 20 69 6e 76 6f 6b 65 20 74 68 65 20 72 65 73  * invoke the res
4150: 75 6c 74 20 63 61 6c 6c 62 61 63 6b 20 28 69 66  ult callback (if
4160: 20 74 68 65 72 65 20 69 73 20 6f 6e 65 29 20 6f   there is one) o
4170: 72 20 72 65 74 75 72 6e 20 77 69 74 68 0a 2a 2a  r return with.**
4180: 20 53 51 4c 49 54 45 5f 52 4f 57 2e 0a 2a 2a 0a   SQLITE_ROW..**.
4190: 2a 2a 20 49 66 20 61 6e 20 61 74 74 65 6d 70 74  ** If an attempt
41a0: 20 69 73 20 6d 61 64 65 20 74 6f 20 6f 70 65 6e   is made to open
41b0: 20 61 20 6c 6f 63 6b 65 64 20 64 61 74 61 62 61   a locked databa
41c0: 73 65 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f  se, then this ro
41d0: 75 74 69 6e 65 0a 2a 2a 20 77 69 6c 6c 20 65 69  utine.** will ei
41e0: 74 68 65 72 20 69 6e 76 6f 6b 65 20 74 68 65 20  ther invoke the 
41f0: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 28 69  busy callback (i
4200: 66 20 74 68 65 72 65 20 69 73 20 6f 6e 65 29 20  f there is one) 
4210: 6f 72 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 72 65  or it will.** re
4220: 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59  turn SQLITE_BUSY
4230: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 65 72  ..**.** If an er
4240: 72 6f 72 20 6f 63 63 75 72 73 2c 20 61 6e 20 65  ror occurs, an e
4250: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20  rror message is 
4260: 77 72 69 74 74 65 6e 20 74 6f 20 6d 65 6d 6f 72  written to memor
4270: 79 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 66 72  y obtained.** fr
4280: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
4290: 63 28 29 20 61 6e 64 20 70 2d 3e 7a 45 72 72 4d  c() and p->zErrM
42a0: 73 67 20 69 73 20 6d 61 64 65 20 74 6f 20 70 6f  sg is made to po
42b0: 69 6e 74 20 74 6f 20 74 68 61 74 20 6d 65 6d 6f  int to that memo
42c0: 72 79 2e 0a 2a 2a 20 54 68 65 20 65 72 72 6f 72  ry..** The error
42d0: 20 63 6f 64 65 20 69 73 20 73 74 6f 72 65 64 20   code is stored 
42e0: 69 6e 20 70 2d 3e 72 63 20 61 6e 64 20 74 68 69  in p->rc and thi
42f0: 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e  s routine return
4300: 73 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a  s SQLITE_ERROR..
4310: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 61 6c  **.** If the cal
4320: 6c 62 61 63 6b 20 65 76 65 72 20 72 65 74 75 72  lback ever retur
4330: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  ns non-zero, the
4340: 6e 20 74 68 65 20 70 72 6f 67 72 61 6d 20 65 78  n the program ex
4350: 69 74 73 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  its.** immediate
4360: 6c 79 2e 20 20 54 68 65 72 65 20 77 69 6c 6c 20  ly.  There will 
4370: 62 65 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73  be no error mess
4380: 61 67 65 20 62 75 74 20 74 68 65 20 70 2d 3e 72  age but the p->r
4390: 63 20 66 69 65 6c 64 20 69 73 0a 2a 2a 20 73 65  c field is.** se
43a0: 74 20 74 6f 20 53 51 4c 49 54 45 5f 41 42 4f 52  t to SQLITE_ABOR
43b0: 54 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74 69  T and this routi
43c0: 6e 65 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 53  ne will return S
43d0: 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a  QLITE_ERROR..**.
43e0: 2a 2a 20 41 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ** A memory allo
43f0: 63 61 74 69 6f 6e 20 65 72 72 6f 72 20 63 61 75  cation error cau
4400: 73 65 73 20 70 2d 3e 72 63 20 74 6f 20 62 65 20  ses p->rc to be 
4410: 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4e 4f  set to SQLITE_NO
4420: 4d 45 4d 20 61 6e 64 20 74 68 69 73 0a 2a 2a 20  MEM and this.** 
4430: 72 6f 75 74 69 6e 65 20 74 6f 20 72 65 74 75 72  routine to retur
4440: 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a  n SQLITE_ERROR..
4450: 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 66 61 74 61  **.** Other fata
4460: 6c 20 65 72 72 6f 72 73 20 72 65 74 75 72 6e 20  l errors return 
4470: 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a  SQLITE_ERROR..**
4480: 0a 2a 2a 20 41 66 74 65 72 20 74 68 69 73 20 72  .** After this r
4490: 6f 75 74 69 6e 65 20 68 61 73 20 66 69 6e 69 73  outine has finis
44a0: 68 65 64 2c 20 73 71 6c 69 74 65 33 56 64 62 65  hed, sqlite3Vdbe
44b0: 46 69 6e 61 6c 69 7a 65 28 29 20 73 68 6f 75 6c  Finalize() shoul
44c0: 64 20 62 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20  d be.** used to 
44d0: 63 6c 65 61 6e 20 75 70 20 74 68 65 20 6d 65 73  clean up the mes
44e0: 73 20 74 68 61 74 20 77 61 73 20 6c 65 66 74 20  s that was left 
44f0: 62 65 68 69 6e 64 2e 0a 2a 2f 0a 69 6e 74 20 73  behind..*/.int s
4500: 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 0a  qlite3VdbeExec(.
4510: 20 20 56 64 62 65 20 2a 70 20 20 20 20 20 20 20    Vdbe *p       
4520: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4530: 54 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20  The VDBE */.){. 
4540: 20 69 6e 74 20 70 63 3b 20 20 20 20 20 20 20 20   int pc;        
4550: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
4560: 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74  he program count
4570: 65 72 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b  er */.  Op *pOp;
4580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4590: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70     /* Current op
45a0: 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  eration */.  int
45b0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
45c0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
45d0: 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20   to return */.  
45e0: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d  sqlite3 *db = p-
45f0: 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  >db;       /* Th
4600: 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  e database */.  
4610: 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e  u8 encoding = EN
4620: 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68  C(db);     /* Th
4630: 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64  e database encod
4640: 69 6e 67 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  ing */.  Mem *pI
4650: 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n1 = 0;         
4660: 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74      /* 1st input
4670: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4680: 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20  m *pIn2 = 0;    
4690: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20           /* 2nd 
46a0: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
46b0: 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30  .  Mem *pIn3 = 0
46c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
46d0: 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61   3rd input opera
46e0: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75  nd */.  Mem *pOu
46f0: 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  t = 0;          
4700: 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65     /* Output ope
4710: 72 61 6e 64 20 2a 2f 0a 20 20 75 38 20 6f 70 50  rand */.  u8 opP
4720: 72 6f 70 65 72 74 79 3b 0a 20 20 69 6e 74 20 69  roperty;.  int i
4730: 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20  Compare = 0;    
4740: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
4750: 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61  of last OP_Compa
4760: 72 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  re operation */.
4770: 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20    int *aPermute 
4780: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
4790: 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63  Permutation of c
47a0: 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f  olumns for OP_Co
47b0: 6d 70 61 72 65 20 2a 2f 0a 23 69 66 64 65 66 20  mpare */.#ifdef 
47c0: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75  VDBE_PROFILE.  u
47d0: 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20 20  64 start;       
47e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55            /* CPU
47f0: 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20   clock count at 
4800: 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20  start of opcode 
4810: 2a 2f 0a 20 20 69 6e 74 20 6f 72 69 67 50 63 3b  */.  int origPc;
4820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4830: 2f 2a 20 50 72 6f 67 72 61 6d 20 63 6f 75 6e 74  /* Program count
4840: 65 72 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f  er at start of o
4850: 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  pcode */.#endif.
4860: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4870: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
4880: 4c 42 41 43 4b 0a 20 20 69 6e 74 20 6e 50 72 6f  LBACK.  int nPro
4890: 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 20 20 20  gressOps = 0;   
48a0: 20 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 65 78     /* Opcodes ex
48b0: 65 63 75 74 65 64 20 73 69 6e 63 65 20 70 72 6f  ecuted since pro
48c0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 2e 20  gress callback. 
48d0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20  */.#endif..  /* 
48e0: 54 65 6d 70 6f 72 61 72 79 20 73 70 61 63 65 20  Temporary space 
48f0: 69 6e 74 6f 20 77 68 69 63 68 20 74 6f 20 75 6e  into which to un
4900: 70 61 63 6b 20 61 20 72 65 63 6f 72 64 2e 20 2a  pack a record. *
4910: 2f 0a 20 20 63 68 61 72 20 61 54 65 6d 70 52 65  /.  char aTempRe
4920: 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  c[ROUND8(sizeof(
4930: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29  UnpackedRecord))
4940: 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 33   + sizeof(Mem)*3
4950: 20 2b 20 37 5d 3b 0a 0a 20 20 61 73 73 65 72 74   + 7];..  assert
4960: 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45  ( p->magic==VDBE
4970: 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f  _MAGIC_RUN );  /
4980: 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  * sqlite3_step()
4990: 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20 2a   verifies this *
49a0: 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  /.  assert( db->
49b0: 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41  magic==SQLITE_MA
49c0: 47 49 43 5f 42 55 53 59 20 29 3b 0a 20 20 73 71  GIC_BUSY );.  sq
49d0: 6c 69 74 65 33 56 64 62 65 4d 75 74 65 78 41 72  lite3VdbeMutexAr
49e0: 72 61 79 45 6e 74 65 72 28 70 29 3b 0a 20 20 69  rayEnter(p);.  i
49f0: 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  f( p->rc==SQLITE
4a00: 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a  _NOMEM ){.    /*
4a10: 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 66   This happens if
4a20: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69   a malloc() insi
4a30: 64 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c  de a call to sql
4a40: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
4a50: 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c  () or.    ** sql
4a60: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
4a70: 31 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f  16() failed.  */
4a80: 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
4a90: 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
4aa0: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->rc==SQLITE_OK
4ab0: 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54   || p->rc==SQLIT
4ac0: 45 5f 42 55 53 59 20 29 3b 0a 20 20 70 2d 3e 72  E_BUSY );.  p->r
4ad0: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
4ae0: 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c   assert( p->expl
4af0: 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70  ain==0 );.  p->p
4b00: 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20  ResultSet = 0;. 
4b10: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
4b20: 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 43 48  .nBusy = 0;.  CH
4b30: 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50  ECK_FOR_INTERRUP
4b40: 54 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  T;.  sqlite3Vdbe
4b50: 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23  IOTraceSql(p);.#
4b60: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4b70: 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69  UG.  sqlite3Begi
4b80: 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  nBenignMalloc();
4b90: 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 20  .  if( p->pc==0 
4ba0: 0a 20 20 20 26 26 20 28 28 70 2d 3e 64 62 2d 3e  .   && ((p->db->
4bb0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4bc0: 64 62 65 4c 69 73 74 69 6e 67 29 20 7c 7c 20 66  dbeListing) || f
4bd0: 69 6c 65 45 78 69 73 74 73 28 64 62 2c 20 22 76  ileExists(db, "v
4be0: 64 62 65 5f 65 78 70 6c 61 69 6e 22 29 29 0a 20  dbe_explain")). 
4bf0: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
4c00: 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20     printf("VDBE 
4c10: 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a  Program Listing:
4c20: 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  \n");.    sqlite
4c30: 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29  3VdbePrintSql(p)
4c40: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
4c50: 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20  <p->nOp; i++){. 
4c60: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4c70: 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20  PrintOp(stdout, 
4c80: 69 2c 20 26 70 2d 3e 61 4f 70 5b 69 5d 29 3b 0a  i, &p->aOp[i]);.
4c90: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
4ca0: 66 69 6c 65 45 78 69 73 74 73 28 64 62 2c 20 22  fileExists(db, "
4cb0: 76 64 62 65 5f 74 72 61 63 65 22 29 20 29 7b 0a  vdbe_trace") ){.
4cc0: 20 20 20 20 70 2d 3e 74 72 61 63 65 20 3d 20 73      p->trace = s
4cd0: 74 64 6f 75 74 3b 0a 20 20 7d 0a 20 20 73 71 6c  tdout;.  }.  sql
4ce0: 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
4cf0: 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20  loc();.#endif.  
4d00: 66 6f 72 28 70 63 3d 70 2d 3e 70 63 3b 20 72 63  for(pc=p->pc; rc
4d10: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b  ==SQLITE_OK; pc+
4d20: 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
4d30: 70 63 3e 3d 30 20 26 26 20 70 63 3c 70 2d 3e 6e  pc>=0 && pc<p->n
4d40: 4f 70 20 29 3b 0a 20 20 20 20 69 66 28 20 64 62  Op );.    if( db
4d50: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
4d60: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69   goto no_mem;.#i
4d70: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
4d80: 45 0a 20 20 20 20 6f 72 69 67 50 63 20 3d 20 70  E.    origPc = p
4d90: 63 3b 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73  c;.    start = s
4da0: 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a  qlite3Hwtime();.
4db0: 23 65 6e 64 69 66 0a 20 20 20 20 70 4f 70 20 3d  #endif.    pOp =
4dc0: 20 26 70 2d 3e 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 64 62 2d 3e 78 50 72 6f 67 72    if( db->xProgr
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 44 6f 20 63 6f 6d 6d  ..    /* Do comm
5400: 6f 6e 20 73 65 74 75 70 20 70 72 6f 63 65 73 73  on setup process
5410: 69 6e 67 20 66 6f 72 20 61 6e 79 20 6f 70 63 6f  ing for any opco
5420: 64 65 20 74 68 61 74 20 69 73 20 6d 61 72 6b 65  de that is marke
5430: 64 0a 20 20 20 20 2a 2a 20 77 69 74 68 20 74 68  d.    ** with th
5440: 65 20 22 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  e "out2-prerelea
5450: 73 65 22 20 74 61 67 2e 20 20 53 75 63 68 20 6f  se" tag.  Such o
5460: 70 63 6f 64 65 73 20 68 61 76 65 20 61 20 73 69  pcodes have a si
5470: 6e 67 6c 65 0a 20 20 20 20 2a 2a 20 6f 75 74 70  ngle.    ** outp
5480: 75 74 20 77 68 69 63 68 20 69 73 20 73 70 65 63  ut which is spec
5490: 69 66 69 65 64 20 62 79 20 74 68 65 20 50 32 20  ified by the P2 
54a0: 70 61 72 61 6d 65 74 65 72 2e 20 20 54 68 65 20  parameter.  The 
54b0: 50 32 20 72 65 67 69 73 74 65 72 0a 20 20 20 20  P2 register.    
54c0: 2a 2a 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  ** is initialize
54d0: 64 20 74 6f 20 61 20 4e 55 4c 4c 2e 0a 20 20 20  d to a NULL..   
54e0: 20 2a 2f 0a 20 20 20 20 6f 70 50 72 6f 70 65 72   */.    opProper
54f0: 74 79 20 3d 20 6f 70 63 6f 64 65 50 72 6f 70 65  ty = opcodePrope
5500: 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d  rty[pOp->opcode]
5510: 3b 0a 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f  ;.    if( (opPro
5520: 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55  perty & OPFLG_OU
5530: 54 32 5f 50 52 45 52 45 4c 45 41 53 45 29 21 3d  T2_PRERELEASE)!=
5540: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
5550: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
5560: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5570: 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p2<=p->nMem )
5580: 3b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26  ;.      pOut = &
5590: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  p->aMem[pOp->p2]
55a0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
55b0: 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74  dbeMemReleaseExt
55c0: 65 72 6e 61 6c 28 70 4f 75 74 29 3b 0a 20 20 20  ernal(pOut);.   
55d0: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
55e0: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 7d   MEM_Null;.    }
55f0: 65 6c 73 65 0a 20 0a 20 20 20 20 2f 2a 20 44 6f  else. .    /* Do
5600: 20 63 6f 6d 6d 6f 6e 20 73 65 74 75 70 20 66 6f   common setup fo
5610: 72 20 6f 70 63 6f 64 65 73 20 6d 61 72 6b 65 64  r opcodes marked
5620: 20 77 69 74 68 20 6f 6e 65 20 6f 66 20 74 68 65   with one of the
5630: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 20 20 20 20 2a   following.    *
5640: 2a 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f  * combinations o
5650: 66 20 70 72 6f 70 65 72 74 69 65 73 2e 0a 20 20  f properties..  
5660: 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 20 20 20 20    **.    **     
5670: 20 20 20 20 20 20 69 6e 31 0a 20 20 20 20 2a 2a        in1.    **
5680: 20 20 20 20 20 20 20 20 20 20 20 69 6e 31 20 69             in1 i
5690: 6e 32 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20  n2.    **       
56a0: 20 20 20 20 69 6e 31 20 69 6e 32 20 6f 75 74 33      in1 in2 out3
56b0: 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20  .    **         
56c0: 20 20 69 6e 31 20 69 6e 33 0a 20 20 20 20 2a 2a    in1 in3.    **
56d0: 0a 20 20 20 20 2a 2a 20 56 61 72 69 61 62 6c 65  .    ** Variable
56e0: 73 20 70 49 6e 31 2c 20 70 49 6e 32 2c 20 61 6e  s pIn1, pIn2, an
56f0: 64 20 70 49 6e 33 20 61 72 65 20 6d 61 64 65 20  d pIn3 are made 
5700: 74 6f 20 70 6f 69 6e 74 20 74 6f 20 61 70 70 72  to point to appr
5710: 6f 70 72 69 61 74 65 0a 20 20 20 20 2a 2a 20 72  opriate.    ** r
5720: 65 67 69 73 74 65 72 73 20 66 6f 72 20 69 6e 70  egisters for inp
5730: 75 74 73 2e 20 20 56 61 72 69 61 62 6c 65 20 70  uts.  Variable p
5740: 4f 75 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  Out points to th
5750: 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
5760: 72 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  r..    */.    if
5770: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5780: 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b  OPFLG_IN1)!=0 ){
5790: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
57a0: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20  Op->p1>0 );.    
57b0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
57c0: 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  1<=p->nMem );.  
57d0: 20 20 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61      pIn1 = &p->a
57e0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
57f0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5800: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31  CE(pOp->p1, pIn1
5810: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70  );.      if( (op
5820: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
5830: 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN2)!=0 ){.    
5840: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5850: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p2>0 );.       
5860: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5870: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
5880: 20 20 20 20 20 70 49 6e 32 20 3d 20 26 70 2d 3e       pIn2 = &p->
5890: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
58a0: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
58b0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
58c0: 49 6e 32 29 3b 0a 20 20 20 20 20 20 20 20 69 66  In2);.        if
58d0: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
58e0: 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29  OPFLG_OUT3)!=0 )
58f0: 7b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  {.          asse
5900: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
5910: 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
5920: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  t( pOp->p3<=p->n
5930: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 20  Mem );.         
5940: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
5950: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
5960: 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65     }.      }else
5970: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
5980: 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30   & OPFLG_IN3)!=0
5990: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
59a0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
59b0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
59c0: 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
59d0: 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 70 49 6e  m );.        pIn
59e0: 33 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  3 = &p->aMem[pOp
59f0: 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 52  ->p3];.        R
5a00: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5a10: 70 2d 3e 70 33 2c 20 70 49 6e 33 29 3b 0a 20 20  p->p3, pIn3);.  
5a20: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20      }.    }else 
5a30: 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20  if( (opProperty 
5a40: 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20  & OPFLG_IN2)!=0 
5a50: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
5a60: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
5a70: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5a80: 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p2<=p->nMem );.
5a90: 20 20 20 20 20 20 70 49 6e 32 20 3d 20 26 70 2d        pIn2 = &p-
5aa0: 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  >aMem[pOp->p2];.
5ab0: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
5ac0: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 49  RACE(pOp->p2, pI
5ad0: 6e 32 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  n2);.    }else i
5ae0: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
5af0: 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29   OPFLG_IN3)!=0 )
5b00: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5b10: 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
5b20: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5b30: 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
5b40: 20 20 20 20 20 70 49 6e 33 20 3d 20 26 70 2d 3e       pIn3 = &p->
5b50: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
5b60: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
5b70: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 49 6e  ACE(pOp->p3, pIn
5b80: 33 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73  3);.    }..    s
5b90: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
5ba0: 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  de ){../********
5bb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5bc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5bd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5be0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5bf0: 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f  *****.** What fo
5c00: 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73 73 69  llows is a massi
5c10: 76 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  ve switch statem
5c20: 65 6e 74 20 77 68 65 72 65 20 65 61 63 68 20 63  ent where each c
5c30: 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ase implements a
5c40: 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69 6e 73  .** separate ins
5c50: 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  truction in the 
5c60: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
5c70: 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74    If we follow t
5c80: 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65  he usual.** inde
5c90: 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69  ntation conventi
5ca0: 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65 20 73  ons, each case s
5cb0: 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65  hould be indente
5cc0: 64 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  d by 6 spaces.  
5cd0: 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73 20 61  But.** that is a
5ce0: 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64 20 73   lot of wasted s
5cf0: 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65 66 74  pace on the left
5d00: 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74 68 65   margin.  So the
5d10: 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20   code within.** 
5d20: 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65  the switch state
5d30: 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b 20  ment will break 
5d40: 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20  with convention 
5d50: 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c 65 66  and be flush-lef
5d60: 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69  t. Another.** bi
5d70: 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c  g comment (simil
5d80: 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65 29 20  ar to this one) 
5d90: 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f  will mark the po
5da0: 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64 65 20  int in the code 
5db0: 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e  where.** we tran
5dc0: 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e  sition back to n
5dd0: 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f  ormal indentatio
5de0: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72  n..**.** The for
5df0: 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63 68 20  matting of each 
5e00: 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74 61 6e  case is importan
5e10: 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69 6c 65  t.  The makefile
5e20: 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67   for SQLite.** g
5e30: 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43 20 66  enerates two C f
5e40: 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e 68 22  iles "opcodes.h"
5e50: 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63 22   and "opcodes.c"
5e60: 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69   by scanning thi
5e70: 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e  s.** file lookin
5e80: 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68 61 74  g for lines that
5e90: 20 62 65 67 69 6e 20 77 69 74 68 20 22 63 61 73   begin with "cas
5ea0: 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70 63  e OP_".  The opc
5eb0: 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20  odes.h files.** 
5ec0: 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20 77  will be filled w
5ed0: 69 74 68 20 23 64 65 66 69 6e 65 73 20 74 68 61  ith #defines tha
5ee0: 74 20 67 69 76 65 20 75 6e 69 71 75 65 20 69 6e  t give unique in
5ef0: 74 65 67 65 72 20 76 61 6c 75 65 73 20 74 6f 20  teger values to 
5f00: 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61  each.** opcode a
5f10: 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73 2e 63  nd the opcodes.c
5f20: 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65 64 20   file is filled 
5f30: 77 69 74 68 20 61 6e 20 61 72 72 61 79 20 6f 66  with an array of
5f40: 20 73 74 72 69 6e 67 73 20 77 68 65 72 65 0a 2a   strings where.*
5f50: 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20 69 73  * each string is
5f60: 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61   the symbolic na
5f70: 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65  me for the corre
5f80: 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e  sponding opcode.
5f90: 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61 73 65    If the.** case
5fa0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 66 6f   statement is fo
5fb0: 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d  llowed by a comm
5fc0: 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ent of the form 
5fd0: 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20  "/# same as ... 
5fe0: 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d  #/".** that comm
5ff0: 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 64  ent is used to d
6000: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70 61 72  etermine the par
6010: 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20 6f 66  ticular value of
6020: 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a   the opcode..**.
6030: 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f 72 64  ** Other keyword
6040: 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74  s in the comment
6050: 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61   that follows ea
6060: 63 68 20 63 61 73 65 20 61 72 65 20 75 73 65 64  ch case are used
6070: 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74   to.** construct
6080: 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49   the OPFLG_INITI
6090: 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74 68 61  ALIZER value tha
60a0: 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70  t initializes op
60b0: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a  codeProperty[]..
60c0: 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c  ** Keywords incl
60d0: 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69  ude: in1, in2, i
60e0: 6e 33 2c 20 6f 75 74 32 5f 70 72 65 72 65 6c 65  n3, out2_prerele
60f0: 61 73 65 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e  ase, out2, out3.
6100: 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f    See.** the mko
6110: 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70  pcodeh.awk scrip
6120: 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  t for additional
6130: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
6140: 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f  .** Documentatio
6150: 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63  n about VDBE opc
6160: 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61 74 65  odes is generate
6170: 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68  d by scanning th
6180: 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c  is file.** for l
6190: 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e  ines of that con
61a0: 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20  tain "Opcode:". 
61b0: 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61   That line and a
61c0: 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a  ll subsequent.**
61d0: 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61   comment lines a
61e0: 72 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  re used in the g
61f0: 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  eneration of the
6200: 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63   opcode.html doc
6210: 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69  umentation.** fi
6220: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52  le..**.** SUMMAR
6230: 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72  Y:.**.**     For
6240: 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72  matting is impor
6250: 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20  tant to scripts 
6260: 74 68 61 74 20 73 63 61 6e 20 74 68 69 73 20 66  that scan this f
6270: 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e  ile..**     Do n
6280: 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20  ot deviate from 
6290: 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73  the formatting s
62a0: 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69  tyle currently i
62b0: 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a  n use..**.******
62c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6300: 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63  *******/../* Opc
6310: 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20  ode:  Goto * P2 
6320: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75  * * *.**.** An u
6330: 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d  nconditional jum
6340: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
6350: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73  .** The next ins
6360: 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65  truction execute
6370: 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68  d will be .** th
6380: 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50  e one at index P
6390: 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  2 from the begin
63a0: 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70  ning of.** the p
63b0: 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20  rogram..*/.case 
63c0: 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20  OP_Goto: {      
63d0: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
63e0: 2f 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e  /.  CHECK_FOR_IN
63f0: 54 45 52 52 55 50 54 3b 0a 20 20 70 63 20 3d 20  TERRUPT;.  pc = 
6400: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62  pOp->p2 - 1;.  b
6410: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6420: 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32  de:  Gosub P1 P2
6430: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
6440: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 61  te the current a
6450: 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69  ddress onto regi
6460: 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74  ster P1.** and t
6470: 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  hen jump to addr
6480: 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ess P2..*/.case 
6490: 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20  OP_Gosub: {     
64a0: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
64b0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
64c0: 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p1>0 );.  asser
64d0: 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  t( pOp->p1<=p->n
64e0: 4d 65 6d 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  Mem );.  pIn1 = 
64f0: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
6500: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  ];.  assert( (pI
6510: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
6520: 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  Dyn)==0 );.  pIn
6530: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  1->flags = MEM_I
6540: 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  nt;.  pIn1->u.i 
6550: 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52  = pc;.  REGISTER
6560: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
6570: 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 4f  pIn1);.  pc = pO
6580: 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65  p->p2 - 1;.  bre
6590: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
65a0: 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a  :  Return P1 * *
65b0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
65c0: 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
65d0: 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68  ruction after th
65e0: 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67  e address in reg
65f0: 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ister P1..*/.cas
6600: 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20  e OP_Return: {  
6610: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
6620: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  */.  assert( pIn
6630: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
6640: 6e 74 20 29 3b 0a 20 20 70 63 20 3d 20 28 69 6e  nt );.  pc = (in
6650: 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 62  t)pIn1->u.i;.  b
6660: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6670: 64 65 3a 20 20 59 69 65 6c 64 20 50 31 20 2a 20  de:  Yield P1 * 
6680: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70  * * *.**.** Swap
6690: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75   the program cou
66a0: 6e 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61  nter with the va
66b0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
66c0: 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59  P1..*/.case OP_Y
66d0: 69 65 6c 64 3a 20 7b 20 20 20 20 20 20 20 20 20  ield: {         
66e0: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69     /* in1 */.  i
66f0: 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 61 73 73  nt pcDest;.  ass
6700: 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ert( (pIn1->flag
6710: 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20  s & MEM_Dyn)==0 
6720: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
6730: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63   = MEM_Int;.  pc
6740: 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49 6e 31  Dest = (int)pIn1
6750: 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75  ->u.i;.  pIn1->u
6760: 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53  .i = pc;.  REGIS
6770: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
6780: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d  1, pIn1);.  pc =
6790: 20 70 63 44 65 73 74 3b 0a 20 20 62 72 65 61 6b   pcDest;.  break
67a0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
67b0: 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20   HaltIfNull  P1 
67c0: 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
67d0: 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65   Check the value
67e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
67f0: 20 20 49 66 20 69 73 20 69 73 20 4e 55 4c 4c 20    If is is NULL 
6800: 74 68 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a  then Halt using.
6810: 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c  ** parameter P1,
6820: 20 50 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69   P2, and P4 as i
6830: 66 20 74 68 69 73 20 77 65 72 65 20 61 20 48 61  f this were a Ha
6840: 6c 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  lt instruction. 
6850: 20 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65   If the.** value
6860: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
6870: 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
6880: 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69  n this routine i
6890: 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61  s a no-op..*/.ca
68a0: 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c  se OP_HaltIfNull
68b0: 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20  : {      /* in3 
68c0: 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  */.  if( (pIn3->
68d0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
68e0: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
68f0: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
6900: 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a  into OP_Halt */.
6910: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48  }../* Opcode:  H
6920: 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 2a  alt P1 P2 * P4 *
6930: 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65  .**.** Exit imme
6940: 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70  diately.  All op
6950: 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20  en cursors, etc 
6960: 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75  are closed.** au
6970: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a  tomatically..**.
6980: 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73  ** P1 is the res
6990: 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ult code returne
69a0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65  d by sqlite3_exe
69b0: 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73  c(), sqlite3_res
69c0: 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69  et(),.** or sqli
69d0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20  te3_finalize(). 
69e0: 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61   For a normal ha
69f0: 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20  lt, this should 
6a00: 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29  be SQLITE_OK (0)
6a10: 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c  ..** For errors,
6a20: 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20   it can be some 
6a30: 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66  other value.  If
6a40: 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77   P1!=0 then P2 w
6a50: 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a  ill determine.**
6a60: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
6a70: 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  to rollback the 
6a80: 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
6a90: 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c  ion.  Do not rol
6aa0: 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d  lback.** if P2==
6ab0: 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20  OE_Fail. Do the 
6ac0: 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d  rollback if P2==
6ad0: 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66  OE_Rollback.  If
6ae0: 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a   P2==OE_Abort,.*
6af0: 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20  * then back out 
6b00: 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74  all changes that
6b10: 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64   have occurred d
6b20: 75 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75  uring this execu
6b30: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56  tion of the.** V
6b40: 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  DBE, but do not 
6b50: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
6b60: 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a  nsaction. .**.**
6b70: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75   If P4 is not nu
6b80: 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e  ll then it is an
6b90: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   error message s
6ba0: 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  tring..**.** The
6bb0: 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64  re is an implied
6bc0: 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e   "Halt 0 0 0" in
6bd0: 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74  struction insert
6be0: 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65  ed at the very e
6bf0: 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70  nd of.** every p
6c00: 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75  rogram.  So a ju
6c10: 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  mp past the last
6c20: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
6c30: 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69  the program.** i
6c40: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78  s the same as ex
6c50: 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f  ecuting Halt..*/
6c60: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b  .case OP_Halt: {
6c70: 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e  .  p->rc = pOp->
6c80: 70 31 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63  p1;.  p->pc = pc
6c90: 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69  ;.  p->errorActi
6ca0: 6f 6e 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  on = pOp->p2;.  
6cb0: 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b  if( pOp->p4.z ){
6cc0: 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
6cd0: 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
6ce0: 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 70 4f 70  g, db, "%s", pOp
6cf0: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 7d 0a 20 20 72  ->p4.z);.  }.  r
6d00: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48  c = sqlite3VdbeH
6d10: 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74  alt(p);.  assert
6d20: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
6d30: 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  Y || rc==SQLITE_
6d40: 4f 4b 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  OK );.  if( rc==
6d50: 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
6d60: 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
6d70: 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d  SQLITE_BUSY;.  }
6d80: 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 70  else{.    rc = p
6d90: 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52  ->rc ? SQLITE_ER
6da0: 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e  ROR : SQLITE_DON
6db0: 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64  E;.  }.  goto vd
6dc0: 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a  be_return;.}../*
6dd0: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72   Opcode: Integer
6de0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
6df0: 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69 6e  ** The 32-bit in
6e00: 74 65 67 65 72 20 76 61 6c 75 65 20 50 31 20 69  teger value P1 i
6e10: 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 72  s written into r
6e20: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
6e30: 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20  ase OP_Integer: 
6e40: 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74  {         /* out
6e50: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
6e60: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
6e70: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 4f 75 74 2d  MEM_Int;.  pOut-
6e80: 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  >u.i = pOp->p1;.
6e90: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6ea0: 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50  pcode: Int64 * P
6eb0: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  2 * P4 *.**.** P
6ec0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
6ed0: 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  o a 64-bit integ
6ee0: 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  er value..** Wri
6ef0: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
6f00: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
6f10: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34  */.case OP_Int64
6f20: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
6f30: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
6f40: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
6f50: 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b  p->p4.pI64!=0 );
6f60: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
6f70: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 4f 75 74   MEM_Int;.  pOut
6f80: 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34  ->u.i = *pOp->p4
6f90: 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a  .pI64;.  break;.
6fa0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
6fb0: 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  al * P2 * P4 *.*
6fc0: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
6fd0: 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74  nter to a 64-bit
6fe0: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
6ff0: 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20  value..** Write 
7000: 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20  that value into 
7010: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
7020: 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20  case OP_Real: { 
7030: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
7040: 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20  me as TK_FLOAT, 
7050: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7060: 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  */.  pOut->flags
7070: 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61   = MEM_Real;.  a
7080: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49  ssert( !sqlite3I
7090: 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52  sNaN(*pOp->p4.pR
70a0: 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  eal) );.  pOut->
70b0: 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65  r = *pOp->p4.pRe
70c0: 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  al;.  break;.}..
70d0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
70e0: 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  g8 * P2 * P4 *.*
70f0: 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74  *.** P4 points t
7100: 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74  o a nul terminat
7110: 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e  ed UTF-8 string.
7120: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
7130: 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20  transformed .** 
7140: 69 6e 74 6f 20 61 6e 20 4f 50 5f 53 74 72 69 6e  into an OP_Strin
7150: 67 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65  g before it is e
7160: 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20  xecuted for the 
7170: 66 69 72 73 74 20 74 69 6d 65 2e 0a 2a 2f 0a 63  first time..*/.c
7180: 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20  ase OP_String8: 
7190: 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d  {         /* sam
71a0: 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20  e as TK_STRING, 
71b0: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
71c0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
71d0: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
71e0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f  Op->opcode = OP_
71f0: 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70  String;.  pOp->p
7200: 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  1 = sqlite3Strle
7210: 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  n30(pOp->p4.z);.
7220: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
7230: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28  OMIT_UTF16.  if(
7240: 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54   encoding!=SQLIT
7250: 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 73 71  E_UTF8 ){.    sq
7260: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
7270: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
7280: 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  .z, -1, SQLITE_U
7290: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
72a0: 49 43 29 3b 0a 20 20 20 20 69 66 28 20 53 51 4c  IC);.    if( SQL
72b0: 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56  ITE_OK!=sqlite3V
72c0: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
72d0: 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67  g(pOut, encoding
72e0: 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
72f0: 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f  .    if( SQLITE_
7300: 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 4d  OK!=sqlite3VdbeM
7310: 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28  emMakeWriteable(
7320: 70 4f 75 74 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pOut) ) goto no_
7330: 6d 65 6d 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a  mem;.    pOut->z
7340: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
7350: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
7360: 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 70  EM_Static;.    p
7370: 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d  Out->flags &= ~M
7380: 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69 66 28 20  EM_Dyn;.    if( 
7390: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
73a0: 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20  DYNAMIC ){.     
73b0: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
73c0: 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  b, pOp->p4.z);. 
73d0: 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34     }.    pOp->p4
73e0: 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49  type = P4_DYNAMI
73f0: 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a  C;.    pOp->p4.z
7400: 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20   = pOut->z;.    
7410: 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e  pOp->p1 = pOut->
7420: 6e 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  n;.    if( pOp->
7430: 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  p1>db->aLimit[SQ
7440: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
7450: 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  H] ){.      goto
7460: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a   too_big;.    }.
7470: 20 20 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42      UPDATE_MAX_B
7480: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
7490: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
74a0: 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ndif.  if( pOp->
74b0: 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  p1>db->aLimit[SQ
74c0: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
74d0: 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
74e0: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a  oo_big;.  }.  /*
74f0: 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   Fall through to
7500: 20 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20   the next case, 
7510: 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20  OP_String */.}. 
7520: 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72   ./* Opcode: Str
7530: 69 6e 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ing P1 P2 * P4 *
7540: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e  .**.** The strin
7550: 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65  g value P4 of le
7560: 6e 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20  ngth P1 (bytes) 
7570: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
7580: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
7590: 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20  e OP_String: {  
75a0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
75b0: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
75c0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
75d0: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  z!=0 );.  pOut->
75e0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c  flags = MEM_Str|
75f0: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
7600: 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d  erm;.  pOut->z =
7610: 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f   pOp->p4.z;.  pO
7620: 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b  ut->n = pOp->p1;
7630: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
7640: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
7650: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
7660: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
7670: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
7680: 6c 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  l * P2 * * *.**.
7690: 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20  ** Write a NULL 
76a0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
76b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
76c0: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  l: {           /
76d0: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
76e0: 65 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  e */.  break;.}.
76f0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f  ../* Opcode: Blo
7700: 62 20 50 31 20 50 32 20 2a 20 50 34 0a 2a 2a 0a  b P1 P2 * P4.**.
7710: 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20  ** P4 points to 
7720: 61 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50  a blob of data P
7730: 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53  1 bytes long.  S
7740: 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f  tore this.** blo
7750: 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  b in register P2
7760: 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
7770: 6f 6e 20 69 73 20 6e 6f 74 20 63 6f 64 65 64 20  on is not coded 
7780: 64 69 72 65 63 74 6c 79 0a 2a 2a 20 62 79 20 74  directly.** by t
7790: 68 65 20 63 6f 6d 70 69 6c 65 72 2e 20 49 6e 73  he compiler. Ins
77a0: 74 65 61 64 2c 20 74 68 65 20 63 6f 6d 70 69 6c  tead, the compil
77b0: 65 72 20 6c 61 79 65 72 20 73 70 65 63 69 66 69  er layer specifi
77c0: 65 73 0a 2a 2a 20 61 6e 20 4f 50 5f 48 65 78 42  es.** an OP_HexB
77d0: 6c 6f 62 20 6f 70 63 6f 64 65 2c 20 77 69 74 68  lob opcode, with
77e0: 20 74 68 65 20 68 65 78 20 73 74 72 69 6e 67 20   the hex string 
77f0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
7800: 66 0a 2a 2a 20 74 68 65 20 62 6c 6f 62 20 61 73  f.** the blob as
7810: 20 50 34 2e 20 54 68 69 73 20 6f 70 63 6f 64 65   P4. This opcode
7820: 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20   is transformed 
7830: 74 6f 20 61 6e 20 4f 50 5f 42 6c 6f 62 0a 2a 2a  to an OP_Blob.**
7840: 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 20   the first time 
7850: 69 74 20 69 73 20 65 78 65 63 75 74 65 64 2e 0a  it is executed..
7860: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a  */.case OP_Blob:
7870: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
7880: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
7890: 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
78a0: 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c  ( pOp->p1 <= SQL
78b0: 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29  ITE_MAX_LENGTH )
78c0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
78d0: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
78e0: 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70  Op->p4.z, pOp->p
78f0: 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74  1, 0, 0);.  pOut
7900: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
7910: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
7920: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
7930: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7940: 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50  code: Variable P
7950: 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
7960: 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20  ** Transfer the 
7970: 76 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20  values of bound 
7980: 70 61 72 61 6d 65 74 65 72 73 20 50 31 2e 2e 50  parameters P1..P
7990: 31 2b 50 33 2d 31 20 69 6e 74 6f 20 72 65 67 69  1+P3-1 into regi
79a0: 73 74 65 72 73 0a 2a 2a 20 50 32 2e 2e 50 32 2b  sters.** P2..P2+
79b0: 50 33 2d 31 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  P3-1..**.** If t
79c0: 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  he parameter is 
79d0: 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20  named, then its 
79e0: 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20  name appears in 
79f0: 50 34 20 61 6e 64 20 50 33 3d 3d 31 2e 0a 2a 2a  P4 and P3==1..**
7a00: 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69 73   The P4 value is
7a10: 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
7a20: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
7a30: 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  name()..*/.case 
7a40: 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 0a 20  OP_Variable: {. 
7a50: 20 69 6e 74 20 6a 20 3d 20 70 4f 70 2d 3e 70 31   int j = pOp->p1
7a60: 20 2d 20 31 3b 0a 20 20 69 6e 74 20 6b 20 3d 20   - 1;.  int k = 
7a70: 70 4f 70 2d 3e 70 32 3b 0a 20 20 4d 65 6d 20 2a  pOp->p2;.  Mem *
7a80: 70 56 61 72 3b 0a 20 20 69 6e 74 20 6e 20 3d 20  pVar;.  int n = 
7a90: 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
7aa0: 74 28 20 6a 3e 3d 30 20 26 26 20 6a 2b 6e 3c 3d  t( j>=0 && j+n<=
7ab0: 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73  p->nVar );.  ass
7ac0: 65 72 74 28 20 6b 3e 3d 31 20 26 26 20 6b 2b 6e  ert( k>=1 && k+n
7ad0: 2d 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  -1<=p->nMem );. 
7ae0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
7af0: 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 33  .z==0 || pOp->p3
7b00: 3d 3d 31 20 29 3b 0a 0a 20 20 77 68 69 6c 65 28  ==1 );..  while(
7b10: 20 6e 2d 2d 20 3e 20 30 20 29 7b 0a 20 20 20 20   n-- > 0 ){.    
7b20: 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b  pVar = &p->aVar[
7b30: 6a 2b 2b 5d 3b 0a 20 20 20 20 69 66 28 20 73 71  j++];.    if( sq
7b40: 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
7b50: 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20  ig(pVar) ){.    
7b60: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
7b70: 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 20 3d      }.    pOut =
7b80: 20 26 70 2d 3e 61 4d 65 6d 5b 6b 2b 2b 5d 3b 0a   &p->aMem[k++];.
7b90: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
7ba0: 65 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61  emReleaseExterna
7bb0: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f 75  l(pOut);.    pOu
7bc0: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
7bd0: 75 6c 6c 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ull;.    sqlite3
7be0: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
7bf0: 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d  py(pOut, pVar, M
7c00: 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20  EM_Static);.    
7c10: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
7c20: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 7d 0a 20  IZE(pOut);.  }. 
7c30: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7c40: 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32  code: Move P1 P2
7c50: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f   P3 * *.**.** Mo
7c60: 76 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  ve the values in
7c70: 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50 31   register P1..P1
7c80: 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a  +P3-1 over into.
7c90: 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  ** registers P2.
7ca0: 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67 69 73  .P2+P3-1.  Regis
7cb0: 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 31 2d 31  ters P1..P1+P1-1
7cc0: 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c   are.** left hol
7cd0: 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74  ding a NULL.  It
7ce0: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72   is an error for
7cf0: 20 72 65 67 69 73 74 65 72 20 72 61 6e 67 65 73   register ranges
7d00: 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20  .** P1..P1+P3-1 
7d10: 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20  and P2..P2+P3-1 
7d20: 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63  to overlap..*/.c
7d30: 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20  ase OP_Move: {. 
7d40: 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 0a   char *zMalloc;.
7d50: 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e 70    int n = pOp->p
7d60: 33 3b 0a 20 20 69 6e 74 20 70 31 20 3d 20 70 4f  3;.  int p1 = pO
7d70: 70 2d 3e 70 31 3b 0a 20 20 69 6e 74 20 70 32 20  p->p1;.  int p2 
7d80: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
7d90: 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30  ert( n>0 && p1>0
7da0: 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73   && p2>0 );.  as
7db0: 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c  sert( p1+n<=p2 |
7dc0: 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20  | p2+n<=p1 );.. 
7dd0: 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIn1 = &p->aMem
7de0: 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  [p1];.  pOut = &
7df0: 70 2d 3e 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 77  p->aMem[p2];.  w
7e00: 68 69 6c 65 28 20 6e 2d 2d 20 29 7b 0a 20 20 20  hile( n-- ){.   
7e10: 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26   assert( pOut<=&
7e20: 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d  p->aMem[p->nMem]
7e30: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
7e40: 70 49 6e 31 3c 3d 26 70 2d 3e 61 4d 65 6d 5b 70  pIn1<=&p->aMem[p
7e50: 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 7a  ->nMem] );.    z
7e60: 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a  Malloc = pOut->z
7e70: 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f 75 74  Malloc;.    pOut
7e80: 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  ->zMalloc = 0;. 
7e90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
7ea0: 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31  mMove(pOut, pIn1
7eb0: 29 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d 61  );.    pIn1->zMa
7ec0: 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a  lloc = zMalloc;.
7ed0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
7ee0: 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a  CE(p2++, pOut);.
7ef0: 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20      pIn1++;.    
7f00: 70 4f 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72  pOut++;.  }.  br
7f10: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7f20: 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 2a 20  e: Copy P1 P2 * 
7f30: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61  * *.**.** Make a
7f40: 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65   copy of registe
7f50: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
7f60: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
7f70: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61  s instruction ma
7f80: 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79 20  kes a deep copy 
7f90: 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41  of the value.  A
7fa0: 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73   duplicate.** is
7fb0: 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72   made of any str
7fc0: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73  ing or blob cons
7fd0: 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20  tant.  See also 
7fe0: 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73  OP_SCopy..*/.cas
7ff0: 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 20 20 20 20  e OP_Copy: {    
8000: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
8010: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
8020: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p2>0 );.  asse
8030: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e  rt( pOp->p2<=p->
8040: 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d  nMem );.  pOut =
8050: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
8060: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
8070: 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71  ut!=pIn1 );.  sq
8080: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
8090: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
80a0: 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  n1, MEM_Ephem);.
80b0: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
80c0: 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54  (pOut);.  REGIST
80d0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
80e0: 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  , pOut);.  break
80f0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8100: 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20  SCopy P1 P2 * * 
8110: 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73  *.**.** Make a s
8120: 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72  hallow copy of r
8130: 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20  egister P1 into 
8140: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
8150: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
8160: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c  ion makes a shal
8170: 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20  low copy of the 
8180: 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76  value.  If the v
8190: 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72  alue.** is a str
81a0: 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65  ing or blob, the
81b0: 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e  n the copy is on
81c0: 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ly a pointer to 
81d0: 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
81e0: 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65  and hence if the
81f0: 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65   original change
8200: 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f  s so will the co
8210: 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66  py..** Worse, if
8220: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73   the original is
8230: 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68   deallocated, th
8240: 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69  e copy becomes i
8250: 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20  nvalid..** Thus 
8260: 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74  the program must
8270: 20 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20   guarantee that 
8280: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c  the original wil
8290: 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20  l not change.** 
82a0: 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74  during the lifet
82b0: 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e  ime of the copy.
82c0: 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f    Use OP_Copy to
82d0: 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65   make a complete
82e0: 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73  .** copy..*/.cas
82f0: 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20  e OP_SCopy: {   
8300: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
8310: 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  */.  REGISTER_TR
8320: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e  ACE(pOp->p1, pIn
8330: 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  1);.  assert( pO
8340: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  p->p2>0 );.  ass
8350: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d  ert( pOp->p2<=p-
8360: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20  >nMem );.  pOut 
8370: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
8380: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
8390: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73  Out!=pIn1 );.  s
83a0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
83b0: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
83c0: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
83d0: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
83e0: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
83f0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
8400: 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52   Opcode: ResultR
8410: 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ow P1 P2 * * *.*
8420: 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
8430: 72 73 20 50 31 20 74 68 72 6f 75 67 68 20 50 31  rs P1 through P1
8440: 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20  +P2-1 contain a 
8450: 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a  single row of.**
8460: 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f   results. This o
8470: 70 63 6f 64 65 20 63 61 75 73 65 73 20 74 68 65  pcode causes the
8480: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
8490: 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74  call to terminat
84a0: 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c  e.** with an SQL
84b0: 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63  ITE_ROW return c
84c0: 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74 73 20  ode and it sets 
84d0: 75 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73  up the sqlite3_s
84e0: 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  tmt.** structure
84f0: 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65   to provide acce
8500: 73 73 20 74 6f 20 74 68 65 20 74 6f 70 20 50 31  ss to the top P1
8510: 20 76 61 6c 75 65 73 20 61 73 20 74 68 65 20 72   values as the r
8520: 65 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f  esult.** row..*/
8530: 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52  .case OP_ResultR
8540: 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65  ow: {.  Mem *pMe
8550: 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73  m;.  int i;.  as
8560: 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c  sert( p->nResCol
8570: 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a  umn==pOp->p2 );.
8580: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8590: 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  1>0 );.  assert(
85a0: 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32   pOp->p1+pOp->p2
85b0: 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 0a  <=p->nMem+1 );..
85c0: 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49    /* If the SQLI
85d0: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61  TE_CountRows fla
85e0: 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69  g is set in sqli
85f0: 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  te3.flags mask, 
8600: 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73  then .  ** DML s
8610: 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65  tatements invoke
8620: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20   this opcode to 
8630: 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
8640: 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20  r of rows .  ** 
8650: 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20  modified to the 
8660: 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68  user. This is th
8670: 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20  e only way that 
8680: 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f  a VM that.  ** o
8690: 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74  pens a statement
86a0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
86b0: 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63   invoke this opc
86c0: 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  ode..  **.  ** I
86d0: 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73  n case this is s
86e0: 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c  uch a statement,
86f0: 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65   close any state
8700: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
8710: 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20  .  ** opened by 
8720: 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72  this VM before r
8730: 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c  eturning control
8740: 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68   to the user. Th
8750: 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e  is is to.  ** en
8760: 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d  sure that statem
8770: 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73  ent-transactions
8780: 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74   are always nest
8790: 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70  ed, not overlapp
87a0: 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65  ing..  ** If the
87b0: 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d   open statement-
87c0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
87d0: 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20  ot closed here, 
87e0: 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20  then the user.  
87f0: 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74  ** may step anot
8800: 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e  her VM that open
8810: 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d  s its own statem
8820: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ent transaction.
8830: 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c   This.  ** may l
8840: 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69  ead to overlappi
8850: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  ng statement tra
8860: 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2f 0a  nsactions..  */.
8870: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74    assert( p->iSt
8880: 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62  atement==0 || db
8890: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43  ->flags&SQLITE_C
88a0: 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 69 66  ountRows );.  if
88b0: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63  ( SQLITE_OK!=(rc
88c0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c   = sqlite3VdbeCl
88d0: 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20  oseStatement(p, 
88e0: 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
88f0: 45 29 29 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  E)) ){.    break
8900: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61  ;.  }..  /* Inva
8910: 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d  lidate all ephem
8920: 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20  eral cursor row 
8930: 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63  caches */.  p->c
8940: 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61  acheCtr = (p->ca
8950: 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a  cheCtr + 2)|1;..
8960: 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
8970: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
8980: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72  e current row ar
8990: 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65  e \000 terminate
89a0: 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20  d.  ** and have 
89b0: 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65  an assigned type
89c0: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61  .  The results a
89d0: 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69  re de-ephemerali
89e0: 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 73 20 73  zed as.  ** as s
89f0: 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f  ide effect..  */
8a00: 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65  .  pMem = p->pRe
8a10: 73 75 6c 74 53 65 74 20 3d 20 26 70 2d 3e 61 4d  sultSet = &p->aM
8a20: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66  em[pOp->p1];.  f
8a30: 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70  or(i=0; i<pOp->p
8a40: 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c  2; i++){.    sql
8a50: 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65  ite3VdbeMemNulTe
8a60: 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d  rminate(&pMem[i]
8a70: 29 3b 0a 20 20 20 20 73 74 6f 72 65 54 79 70 65  );.    storeType
8a80: 49 6e 66 6f 28 26 70 4d 65 6d 5b 69 5d 2c 20 65  Info(&pMem[i], e
8a90: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 52 45  ncoding);.    RE
8aa0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
8ab0: 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d  ->p1+i, &pMem[i]
8ac0: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d  );.  }.  if( db-
8ad0: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20  >mallocFailed ) 
8ae0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20  goto no_mem;..  
8af0: 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45  /* Return SQLITE
8b00: 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70  _ROW.  */.  p->p
8b10: 63 20 3d 20 70 63 20 2b 20 31 3b 0a 20 20 72 63  c = pc + 1;.  rc
8b20: 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20   = SQLITE_ROW;. 
8b30: 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
8b40: 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n;.}../* Opcode:
8b50: 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33   Concat P1 P2 P3
8b60: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74   * *.**.** Add t
8b70: 68 65 20 74 65 78 74 20 69 6e 20 72 65 67 69 73  he text in regis
8b80: 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20  ter P1 onto the 
8b90: 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74 20  end of the text 
8ba0: 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  in.** register P
8bb0: 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  2 and store the 
8bc0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
8bd0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
8be0: 68 65 72 20 74 68 65 20 50 31 20 6f 72 20 50 32  her the P1 or P2
8bf0: 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74   text are NULL t
8c00: 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69  hen store NULL i
8c10: 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33  n P3..**.**   P3
8c20: 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a   = P2 || P1.**.*
8c30: 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20  * It is illegal 
8c40: 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f  for P1 and P3 to
8c50: 20 62 65 20 74 68 65 20 73 61 6d 65 20 72 65 67   be the same reg
8c60: 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73  ister. Sometimes
8c70: 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68  ,.** if P3 is th
8c80: 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 20  e same register 
8c90: 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65  as P2, the imple
8ca0: 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c  mentation is abl
8cb0: 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20  e.** to avoid a 
8cc0: 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73  memcpy()..*/.cas
8cd0: 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20  e OP_Concat: {  
8ce0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
8cf0: 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69   as TK_CONCAT, i
8d00: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
8d10: 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20  .  i64 nByte;.. 
8d20: 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70   assert( pIn1!=p
8d30: 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49  Out );.  if( (pI
8d40: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
8d50: 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e  ->flags) & MEM_N
8d60: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
8d70: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
8d80: 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  (pOut);.    brea
8d90: 6b 3b 0a 20 20 7d 0a 20 20 45 78 70 61 6e 64 42  k;.  }.  ExpandB
8da0: 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 53 74 72  lob(pIn1);.  Str
8db0: 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63  ingify(pIn1, enc
8dc0: 6f 64 69 6e 67 29 3b 0a 20 20 45 78 70 61 6e 64  oding);.  Expand
8dd0: 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 53 74  Blob(pIn2);.  St
8de0: 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e  ringify(pIn2, en
8df0: 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65  coding);.  nByte
8e00: 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e   = pIn1->n + pIn
8e10: 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74  2->n;.  if( nByt
8e20: 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  e>db->aLimit[SQL
8e30: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
8e40: 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
8e50: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 4d 65 6d  o_big;.  }.  Mem
8e60: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
8e70: 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66  , MEM_Str);.  if
8e80: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
8e90: 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29  Grow(pOut, (int)
8ea0: 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70  nByte+2, pOut==p
8eb0: 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  In2) ){.    goto
8ec0: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 69   no_mem;.  }.  i
8ed0: 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b  f( pOut!=pIn2 ){
8ee0: 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74  .    memcpy(pOut
8ef0: 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49  ->z, pIn2->z, pI
8f00: 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65  n2->n);.  }.  me
8f10: 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49  mcpy(&pOut->z[pI
8f20: 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c  n2->n], pIn1->z,
8f30: 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75   pIn1->n);.  pOu
8f40: 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20 30 3b  t->z[nByte] = 0;
8f50: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
8f60: 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d  +1] = 0;.  pOut-
8f70: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65  >flags |= MEM_Te
8f80: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  rm;.  pOut->n = 
8f90: 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f  (int)nByte;.  pO
8fa0: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
8fb0: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
8fc0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
8fd0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8fe0: 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50  Opcode: Add P1 P
8ff0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  2 P3 * *.**.** A
9000: 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  dd the value in 
9010: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74  register P1 to t
9020: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
9030: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
9040: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
9050: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
9060: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
9070: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
9080: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
9090: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  */./* Opcode: Mu
90a0: 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20  ltiply P1 P2 P3 
90b0: 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c  * *.**.**.** Mul
90c0: 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20  tiply the value 
90d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
90e0: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
90f0: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
9100: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
9110: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
9120: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
9130: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
9140: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9150: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
9160: 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20   Subtract P1 P2 
9170: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 75 62  P3 * *.**.** Sub
9180: 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20  tract the value 
9190: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66  in register P1 f
91a0: 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rom the value in
91b0: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
91c0: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
91d0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
91e0: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
91f0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
9200: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
9210: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
9220: 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20  e: Divide P1 P2 
9230: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 69 76  P3 * *.**.** Div
9240: 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ide the value in
9250: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
9260: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9270: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
9280: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
9290: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
92a0: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69    If the value i
92b0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
92c0: 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74   is zero, then t
92d0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
92e0: 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  L..** If either 
92f0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
9300: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
9310: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
9320: 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32   Remainder P1 P2
9330: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f   P3 * *.**.** Co
9340: 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e  mpute the remain
9350: 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67 65  der after intege
9360: 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74 68  r division of th
9370: 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65  e value in.** re
9380: 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65  gister P1 by the
9390: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
93a0: 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20  er P2 and store 
93b0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50 33  the result in P3
93c0: 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  . .** If the val
93d0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
93e0: 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65  2 is zero the re
93f0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  sult is NULL..**
9400: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
9410: 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  nd is NULL, the 
9420: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
9430: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20  */.case OP_Add: 
9440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9450: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
9460: 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  PLUS, in1, in2, 
9470: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
9480: 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20  Subtract:       
9490: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
94a0: 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c  s TK_MINUS, in1,
94b0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
94c0: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
94d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
94e0: 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c  same as TK_STAR,
94f0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
9500: 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64  */.case OP_Divid
9510: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
9520: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
9530: 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c  SLASH, in1, in2,
9540: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
9550: 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20  _Remainder: {   
9560: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
9570: 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20  as TK_REM, in1, 
9580: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
9590: 6e 74 20 66 6c 61 67 73 3b 0a 20 20 61 70 70 6c  nt flags;.  appl
95a0: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
95b0: 28 70 49 6e 31 29 3b 0a 20 20 61 70 70 6c 79 4e  (pIn1);.  applyN
95c0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
95d0: 49 6e 32 29 3b 0a 20 20 66 6c 61 67 73 20 3d 20  In2);.  flags = 
95e0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
95f0: 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n2->flags;.  if(
9600: 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75   (flags & MEM_Nu
9610: 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72  ll)!=0 ) goto ar
9620: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
9630: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28  is_null;.  if( (
9640: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49  pIn1->flags & pI
9650: 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
9660: 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b  Int)==MEM_Int ){
9670: 0a 20 20 20 20 69 36 34 20 61 2c 20 62 3b 0a 20  .    i64 a, b;. 
9680: 20 20 20 61 20 3d 20 70 49 6e 31 2d 3e 75 2e 69     a = pIn1->u.i
9690: 3b 0a 20 20 20 20 62 20 3d 20 70 49 6e 32 2d 3e  ;.    b = pIn2->
96a0: 75 2e 69 3b 0a 20 20 20 20 73 77 69 74 63 68 28  u.i;.    switch(
96b0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
96c0: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64        case OP_Ad
96d0: 64 3a 20 20 20 20 20 20 20 20 20 62 20 2b 3d 20  d:         b += 
96e0: 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  a;       break;.
96f0: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75        case OP_Su
9700: 62 74 72 61 63 74 3a 20 20 20 20 62 20 2d 3d 20  btract:    b -= 
9710: 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  a;       break;.
9720: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75        case OP_Mu
9730: 6c 74 69 70 6c 79 3a 20 20 20 20 62 20 2a 3d 20  ltiply:    b *= 
9740: 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  a;       break;.
9750: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69        case OP_Di
9760: 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20  vide: {.        
9770: 69 66 28 20 61 3d 3d 30 20 29 20 67 6f 74 6f 20  if( a==0 ) goto 
9780: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
9790: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
97a0: 20 20 20 2f 2a 20 44 69 76 69 64 69 6e 67 20 74     /* Dividing t
97b0: 68 65 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69  he largest possi
97c0: 62 6c 65 20 6e 65 67 61 74 69 76 65 20 36 34 2d  ble negative 64-
97d0: 62 69 74 20 69 6e 74 65 67 65 72 20 28 31 3c 3c  bit integer (1<<
97e0: 36 33 29 20 62 79 20 0a 20 20 20 20 20 20 20 20  63) by .        
97f0: 2a 2a 20 2d 31 20 72 65 74 75 72 6e 73 20 61 6e  ** -1 returns an
9800: 20 69 6e 74 65 67 65 72 20 74 6f 6f 20 6c 61 72   integer too lar
9810: 67 65 20 74 6f 20 73 74 6f 72 65 20 69 6e 20 61  ge to store in a
9820: 20 36 34 2d 62 69 74 20 64 61 74 61 2d 74 79 70   64-bit data-typ
9830: 65 2e 20 4f 6e 0a 20 20 20 20 20 20 20 20 2a 2a  e. On.        **
9840: 20 73 6f 6d 65 20 61 72 63 68 69 74 65 63 74 75   some architectu
9850: 72 65 73 2c 20 74 68 65 20 76 61 6c 75 65 20 6f  res, the value o
9860: 76 65 72 66 6c 6f 77 73 20 74 6f 20 28 31 3c 3c  verflows to (1<<
9870: 36 33 29 2e 20 4f 6e 20 6f 74 68 65 72 73 2c 0a  63). On others,.
9880: 20 20 20 20 20 20 20 20 2a 2a 20 61 20 53 49 47          ** a SIG
9890: 46 50 45 20 69 73 20 69 73 73 75 65 64 2e 20 54  FPE is issued. T
98a0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61  he following sta
98b0: 74 65 6d 65 6e 74 20 6e 6f 72 6d 61 6c 69 7a 65  tement normalize
98c0: 73 20 74 68 69 73 0a 20 20 20 20 20 20 20 20 2a  s this.        *
98d0: 2a 20 62 65 68 61 76 69 6f 72 20 73 6f 20 74 68  * behavior so th
98e0: 61 74 20 61 6c 6c 20 61 72 63 68 69 74 65 63 74  at all architect
98f0: 75 72 65 73 20 62 65 68 61 76 65 20 61 73 20 69  ures behave as i
9900: 66 20 69 6e 74 65 67 65 72 20 0a 20 20 20 20 20  f integer .     
9910: 20 20 20 2a 2a 20 6f 76 65 72 66 6c 6f 77 20 6f     ** overflow o
9920: 63 63 75 72 72 65 64 2e 0a 20 20 20 20 20 20 20  ccurred..       
9930: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
9940: 61 3d 3d 2d 31 20 26 26 20 62 3d 3d 53 4d 41 4c  a==-1 && b==SMAL
9950: 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 61 20 3d  LEST_INT64 ) a =
9960: 20 31 3b 0a 20 20 20 20 20 20 20 20 62 20 2f 3d   1;.        b /=
9970: 20 61 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   a;.        brea
9980: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
9990: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
99a0: 20 20 20 20 69 66 28 20 61 3d 3d 30 20 29 20 67      if( a==0 ) g
99b0: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
99c0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
99d0: 20 20 20 20 20 20 20 69 66 28 20 61 3d 3d 2d 31         if( a==-1
99e0: 20 29 20 61 20 3d 20 31 3b 0a 20 20 20 20 20 20   ) a = 1;.      
99f0: 20 20 62 20 25 3d 20 61 3b 0a 20 20 20 20 20 20    b %= a;.      
9a00: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
9a10: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d  .    }.    pOut-
9a20: 3e 75 2e 69 20 3d 20 62 3b 0a 20 20 20 20 4d 65  >u.i = b;.    Me
9a30: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
9a40: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  t, MEM_Int);.  }
9a50: 65 6c 73 65 7b 0a 20 20 20 20 64 6f 75 62 6c 65  else{.    double
9a60: 20 61 2c 20 62 3b 0a 20 20 20 20 61 20 3d 20 73   a, b;.    a = s
9a70: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
9a80: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 62  lue(pIn1);.    b
9a90: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
9aa0: 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20  alValue(pIn2);. 
9ab0: 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e     switch( pOp->
9ac0: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20  opcode ){.      
9ad0: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
9ae0: 20 20 20 20 20 62 20 2b 3d 20 61 3b 20 20 20 20       b += a;    
9af0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
9b00: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
9b10: 3a 20 20 20 20 62 20 2d 3d 20 61 3b 20 20 20 20  :    b -= a;    
9b20: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
9b30: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
9b40: 3a 20 20 20 20 62 20 2a 3d 20 61 3b 20 20 20 20  :    b *= a;    
9b50: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
9b60: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
9b70: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f  {.        /* (do
9b80: 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f  uble)0 In case o
9b90: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
9ba0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20  OATING_POINT... 
9bb0: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 61  */.        if( a
9bc0: 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f  ==(double)0 ) go
9bd0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
9be0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
9bf0: 20 20 20 20 20 20 62 20 2f 3d 20 61 3b 0a 20 20        b /= a;.  
9c00: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9c10: 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75     }.      defau
9c20: 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 36  lt: {.        i6
9c30: 34 20 69 61 20 3d 20 28 69 36 34 29 61 3b 0a 20  4 ia = (i64)a;. 
9c40: 20 20 20 20 20 20 20 69 36 34 20 69 62 20 3d 20         i64 ib = 
9c50: 28 69 36 34 29 62 3b 0a 20 20 20 20 20 20 20 20  (i64)b;.        
9c60: 69 66 28 20 69 61 3d 3d 30 20 29 20 67 6f 74 6f  if( ia==0 ) goto
9c70: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
9c80: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
9c90: 20 20 20 20 69 66 28 20 69 61 3d 3d 2d 31 20 29      if( ia==-1 )
9ca0: 20 69 61 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   ia = 1;.       
9cb0: 20 62 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 62   b = (double)(ib
9cc0: 20 25 20 69 61 29 3b 0a 20 20 20 20 20 20 20 20   % ia);.        
9cd0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
9ce0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c     }.    if( sql
9cf0: 69 74 65 33 49 73 4e 61 4e 28 62 29 20 29 7b 0a  ite3IsNaN(b) ){.
9d00: 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68        goto arith
9d10: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
9d20: 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20  null;.    }.    
9d30: 70 4f 75 74 2d 3e 72 20 3d 20 62 3b 0a 20 20 20  pOut->r = b;.   
9d40: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
9d50: 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b  pOut, MEM_Real);
9d60: 0a 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 20  .    if( (flags 
9d70: 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29  & MEM_Real)==0 )
9d80: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
9d90: 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69  dbeIntegerAffini
9da0: 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a  ty(pOut);.    }.
9db0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72    }.  break;..ar
9dc0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
9dd0: 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74  is_null:.  sqlit
9de0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
9df0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
9e00: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
9e10: 6f 6c 6c 53 65 71 20 2a 20 2a 20 50 34 0a 2a 2a  ollSeq * * P4.**
9e20: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
9e30: 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71  ter to a CollSeq
9e40: 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65 20   struct. If the 
9e50: 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75  next call to a u
9e60: 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20  ser function.** 
9e70: 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c  or aggregate cal
9e80: 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  ls sqlite3GetFun
9e90: 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73  cCollSeq(), this
9ea0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
9eb0: 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72  nce will.** be r
9ec0: 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73  eturned. This is
9ed0: 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69   used by the bui
9ee0: 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78  lt-in min(), max
9ef0: 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a  () and nullif().
9f00: 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  ** functions..**
9f10: 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
9f20: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69 6d  e used by the im
9f30: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
9f40: 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e  the aforemention
9f50: 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20  ed functions.** 
9f60: 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20  to retrieve the 
9f70: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
9f80: 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20 6f  ce set by this o
9f90: 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61  pcode is not ava
9fa0: 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63  ilable.** public
9fb0: 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65 72  ly, only to user
9fc0: 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e   functions defin
9fd0: 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f  ed in func.c..*/
9fe0: 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71  .case OP_CollSeq
9ff0: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
a000: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
a010: 4c 4c 53 45 51 20 29 3b 0a 20 20 62 72 65 61 6b  LLSEQ );.  break
a020: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
a030: 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20 50  Function P1 P2 P
a040: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e  3 P4 P5.**.** In
a050: 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63  voke a user func
a060: 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f  tion (P4 is a po
a070: 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63 74  inter to a Funct
a080: 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20 74 68  ion structure th
a090: 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74 68  at.** defines th
a0a0: 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74 68  e function) with
a0b0: 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61   P5 arguments ta
a0c0: 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
a0d0: 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63  r P2 and.** succ
a0e0: 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73  essors.  The res
a0f0: 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
a100: 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ion is stored in
a110: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
a120: 20 52 65 67 69 73 74 65 72 20 50 33 20 6d 75 73   Register P3 mus
a130: 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20  t not be one of 
a140: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70  the function inp
a150: 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  uts..**.** P1 is
a160: 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73   a 32-bit bitmas
a170: 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65  k indicating whe
a180: 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68  ther or not each
a190: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
a1a0: 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61   .** function wa
a1b0: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20  s determined to 
a1c0: 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63  be constant at c
a1d0: 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20  ompile time. If 
a1e0: 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67  the first.** arg
a1f0: 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61  ument was consta
a200: 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66  nt then bit 0 of
a210: 20 50 31 20 69 73 20 73 65 74 2e 20 54 68 69 73   P1 is set. This
a220: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
a230: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
a240: 20 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f 63   meta data assoc
a250: 69 61 74 65 64 20 77 69 74 68 20 61 20 75 73 65  iated with a use
a260: 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  r function argum
a270: 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ent using the.**
a280: 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78   sqlite3_set_aux
a290: 64 61 74 61 28 29 20 41 50 49 20 6d 61 79 20 62  data() API may b
a2a0: 65 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65  e safely retaine
a2b0: 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74  d until the next
a2c0: 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  .** invocation o
a2d0: 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  f this opcode..*
a2e0: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 41  *.** See also: A
a2f0: 67 67 53 74 65 70 20 61 6e 64 20 41 67 67 46 69  ggStep and AggFi
a300: 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  nal.*/.case OP_F
a310: 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74  unction: {.  int
a320: 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 3b   i;.  Mem *pArg;
a330: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
a340: 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65  xt ctx;.  sqlite
a350: 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b  3_value **apVal;
a360: 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e  .  int n = pOp->
a370: 70 35 3b 0a 0a 20 20 61 70 56 61 6c 20 3d 20 70  p5;..  apVal = p
a380: 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72  ->apArg;.  asser
a390: 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30  t( apVal || n==0
a3a0: 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e   );..  assert( n
a3b0: 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e  ==0 || (pOp->p2>
a3c0: 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d  0 && pOp->p2+n<=
a3d0: 70 2d 3e 6e 4d 65 6d 2b 31 29 20 29 3b 0a 20 20  p->nMem+1) );.  
a3e0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
a3f0: 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e  pOp->p2 || pOp->
a400: 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b  p3>=pOp->p2+n );
a410: 0a 20 20 70 41 72 67 20 3d 20 26 70 2d 3e 61 4d  .  pArg = &p->aM
a420: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66  em[pOp->p2];.  f
a430: 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
a440: 2c 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61  , pArg++){.    a
a450: 70 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a  pVal[i] = pArg;.
a460: 20 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66      storeTypeInf
a470: 6f 28 70 41 72 67 2c 20 65 6e 63 6f 64 69 6e 67  o(pArg, encoding
a480: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
a490: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
a4a0: 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73  Arg);.  }..  ass
a4b0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
a4c0: 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 7c 7c 20  ==P4_FUNCDEF || 
a4d0: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
a4e0: 56 44 42 45 46 55 4e 43 20 29 3b 0a 20 20 69 66  VDBEFUNC );.  if
a4f0: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
a500: 34 5f 46 55 4e 43 44 45 46 20 29 7b 0a 20 20 20  4_FUNCDEF ){.   
a510: 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70   ctx.pFunc = pOp
a520: 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 20 20  ->p4.pFunc;.    
a530: 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20  ctx.pVdbeFunc = 
a540: 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  0;.  }else{.    
a550: 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20  ctx.pVdbeFunc = 
a560: 28 56 64 62 65 46 75 6e 63 2a 29 70 4f 70 2d 3e  (VdbeFunc*)pOp->
a570: 70 34 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20  p4.pVdbeFunc;.  
a580: 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 63 74    ctx.pFunc = ct
a590: 78 2e 70 56 64 62 65 46 75 6e 63 2d 3e 70 46 75  x.pVdbeFunc->pFu
a5a0: 6e 63 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  nc;.  }..  asser
a5b0: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
a5c0: 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
a5d0: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d   );.  pOut = &p-
a5e0: 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
a5f0: 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20    ctx.s.flags = 
a600: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e  MEM_Null;.  ctx.
a610: 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78  s.db = db;.  ctx
a620: 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63  .s.xDel = 0;.  c
a630: 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  tx.s.zMalloc = 0
a640: 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70  ;..  /* The outp
a650: 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65  ut cell may alre
a660: 61 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65  ady have a buffe
a670: 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76  r allocated. Mov
a680: 65 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74  e.  ** the point
a690: 65 72 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69  er to ctx.s so i
a6a0: 6e 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d  n case the user-
a6b0: 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65  function can use
a6c0: 0a 20 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64  .  ** the alread
a6d0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  y allocated buff
a6e0: 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c  er instead of al
a6f0: 6c 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f  locating a new o
a700: 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74  ne..  */.  sqlit
a710: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63  e3VdbeMemMove(&c
a720: 74 78 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d  tx.s, pOut);.  M
a730: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 63  emSetTypeFlag(&c
a740: 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  tx.s, MEM_Null);
a750: 0a 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20  ..  ctx.isError 
a760: 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70  = 0;.  if( ctx.p
a770: 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51  Func->flags & SQ
a780: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
a790: 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  LL ){.    assert
a7a0: 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a  ( pOp>p->aOp );.
a7b0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
a7c0: 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43  -1].p4type==P4_C
a7d0: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73  OLLSEQ );.    as
a7e0: 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
a7f0: 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71  code==OP_CollSeq
a800: 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c   );.    ctx.pCol
a810: 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70  l = pOp[-1].p4.p
a820: 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 69 66 28 20  Coll;.  }.  if( 
a830: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
a840: 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
a850: 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
a860: 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e  .  (*ctx.pFunc->
a870: 78 46 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20  xFunc)(&ctx, n, 
a880: 61 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 73 71  apVal);.  if( sq
a890: 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62  lite3SafetyOn(db
a8a0: 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) ){.    sqlite3
a8b0: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
a8c0: 63 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f  ctx.s);.    goto
a8d0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
a8e0: 73 75 73 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20  suse;.  }.  if( 
a8f0: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
a900: 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20   ){.    /* Even 
a910: 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28  though a malloc(
a920: 29 20 68 61 73 20 66 61 69 6c 65 64 2c 20 74 68  ) has failed, th
a930: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
a940: 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 75   of the.    ** u
a950: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79  ser function may
a960: 20 68 61 76 65 20 63 61 6c 6c 65 64 20 61 6e 20   have called an 
a970: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 58  sqlite3_result_X
a980: 58 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  XX() function.  
a990: 20 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20 61    ** to return a
a9a0: 20 76 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c   value. The foll
a9b0: 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61  owing call relea
a9c0: 73 65 73 20 61 6e 79 20 72 65 73 6f 75 72 63 65  ses any resource
a9d0: 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63 69 61  s.    ** associa
a9e0: 74 65 64 20 77 69 74 68 20 73 75 63 68 20 61 20  ted with such a 
a9f0: 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2a 0a 20 20  value..    **.  
aa00: 20 20 2a 2a 20 4e 6f 74 65 3a 20 4d 61 79 62 65    ** Note: Maybe
aa10: 20 4d 65 6d 52 65 6c 65 61 73 65 28 29 20 73 68   MemRelease() sh
aa20: 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 69  ould be called i
aa30: 66 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  f sqlite3SafetyO
aa40: 6e 28 29 0a 20 20 20 20 2a 2a 20 66 61 69 6c 73  n().    ** fails
aa50: 20 61 6c 73 6f 20 28 74 68 65 20 69 66 28 2e 2e   also (the if(..
aa60: 2e 29 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f  .) statement abo
aa70: 76 65 29 2e 20 42 75 74 20 69 66 20 70 65 6f 70  ve). But if peop
aa80: 6c 65 20 61 72 65 0a 20 20 20 20 2a 2a 20 6d 69  le are.    ** mi
aa90: 73 75 73 69 6e 67 20 73 71 6c 69 74 65 2c 20 74  susing sqlite, t
aaa0: 68 65 79 20 68 61 76 65 20 62 69 67 67 65 72 20  hey have bigger 
aab0: 70 72 6f 62 6c 65 6d 73 20 74 68 61 6e 20 61 20  problems than a 
aac0: 6c 65 61 6b 65 64 20 76 61 6c 75 65 2e 0a 20 20  leaked value..  
aad0: 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
aae0: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
aaf0: 63 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f  ctx.s);.    goto
ab00: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20   no_mem;.  }..  
ab10: 2f 2a 20 49 66 20 61 6e 79 20 61 75 78 69 6c 69  /* If any auxili
ab20: 61 72 79 20 64 61 74 61 20 66 75 6e 63 74 69 6f  ary data functio
ab30: 6e 73 20 68 61 76 65 20 62 65 65 6e 20 63 61 6c  ns have been cal
ab40: 6c 65 64 20 62 79 20 74 68 69 73 20 75 73 65 72  led by this user
ab50: 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20   function,.  ** 
ab60: 69 6d 6d 65 64 69 61 74 65 6c 79 20 63 61 6c 6c  immediately call
ab70: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 20   the destructor 
ab80: 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73 74 61 74  for any non-stat
ab90: 69 63 20 76 61 6c 75 65 73 2e 0a 20 20 2a 2f 0a  ic values..  */.
aba0: 20 20 69 66 28 20 63 74 78 2e 70 56 64 62 65 46    if( ctx.pVdbeF
abb0: 75 6e 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  unc ){.    sqlit
abc0: 65 33 56 64 62 65 44 65 6c 65 74 65 41 75 78 44  e3VdbeDeleteAuxD
abd0: 61 74 61 28 63 74 78 2e 70 56 64 62 65 46 75 6e  ata(ctx.pVdbeFun
abe0: 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20  c, pOp->p1);.   
abf0: 20 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75   pOp->p4.pVdbeFu
ac00: 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75  nc = ctx.pVdbeFu
ac10: 6e 63 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74  nc;.    pOp->p4t
ac20: 79 70 65 20 3d 20 50 34 5f 56 44 42 45 46 55 4e  ype = P4_VDBEFUN
ac30: 43 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  C;.  }..  /* If 
ac40: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  the function ret
ac50: 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20  urned an error, 
ac60: 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69  throw an excepti
ac70: 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e  on */.  if( ctx.
ac80: 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73  isError ){.    s
ac90: 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
aca0: 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
acb0: 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
acc0: 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73  alue_text(&ctx.s
acd0: 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78  ));.    rc = ctx
ace0: 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20  .isError;.  }.. 
acf0: 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73   /* Copy the res
ad00: 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
ad10: 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ion into registe
ad20: 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65  r P3 */.  sqlite
ad30: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
ad40: 69 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f  ing(&ctx.s, enco
ad50: 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33  ding);.  sqlite3
ad60: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74  VdbeMemMove(pOut
ad70: 2c 20 26 63 74 78 2e 73 29 3b 0a 20 20 69 66 28  , &ctx.s);.  if(
ad80: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
ad90: 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b 0a 20  ooBig(pOut) ){. 
ada0: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
adb0: 0a 20 20 7d 0a 20 20 52 45 47 49 53 54 45 52 5f  .  }.  REGISTER_
adc0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
add0: 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
ade0: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
adf0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
ae00: 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64  * Opcode: BitAnd
ae10: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
ae20: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74  .** Take the bit
ae30: 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65  -wise AND of the
ae40: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
ae50: 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
ae60: 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72  d.** store the r
ae70: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
ae80: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
ae90: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
aea0: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
aeb0: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
aec0: 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20  de: BitOr P1 P2 
aed0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b  P3 * *.**.** Tak
aee0: 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f  e the bit-wise O
aef0: 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
af00: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
af10: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
af20: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
af30: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
af40: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
af50: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
af60: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
af70: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
af80: 74 4c 65 66 74 20 50 31 20 50 32 20 50 33 20 2a  tLeft P1 P2 P3 *
af90: 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74   *.**.** Shift t
afa0: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
afb0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
afc0: 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20 74  to the left by t
afd0: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
afe0: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
aff0: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
b000: 20 72 65 67 69 73 65 72 20 50 31 2e 0a 2a 2a 20   regiser P1..** 
b010: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
b020: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
b030: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
b040: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
b050: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b060: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
b070: 68 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20  hiftRight P1 P2 
b080: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69  P3 * *.**.** Shi
b090: 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  ft the integer v
b0a0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b0b0: 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74   P2 to the right
b0c0: 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65   by the.** numbe
b0d0: 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66  r of bits specif
b0e0: 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67  ied by the integ
b0f0: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
b100: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
b110: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b120: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
b130: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
b140: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
b150: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
b160: 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20  P_BitAnd:       
b170: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b180: 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20  e as TK_BITAND, 
b190: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b1a0: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a  /.case OP_BitOr:
b1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1c0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b1d0: 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  BITOR, in1, in2,
b1e0: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
b1f0: 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20  _ShiftLeft:     
b200: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b210: 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69   as TK_LSHIFT, i
b220: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b230: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69  .case OP_ShiftRi
b240: 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ght: {          
b250: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52   /* same as TK_R
b260: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
b270: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 61   out3 */.  i64 a
b280: 2c 20 62 3b 0a 0a 20 20 69 66 28 20 28 70 49 6e  , b;..  if( (pIn
b290: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
b2a0: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
b2b0: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
b2c0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
b2d0: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
b2e0: 3b 0a 20 20 7d 0a 20 20 61 20 3d 20 73 71 6c 69  ;.  }.  a = sqli
b2f0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
b300: 70 49 6e 32 29 3b 0a 20 20 62 20 3d 20 73 71 6c  pIn2);.  b = sql
b310: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
b320: 28 70 49 6e 31 29 3b 0a 20 20 73 77 69 74 63 68  (pIn1);.  switch
b330: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
b340: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 42 69 74  .    case OP_Bit
b350: 41 6e 64 3a 20 20 20 20 20 20 61 20 26 3d 20 62  And:      a &= b
b360: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
b370: 20 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20   case OP_BitOr: 
b380: 20 20 20 20 20 20 61 20 7c 3d 20 62 3b 20 20 20        a |= b;   
b390: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
b3a0: 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20  e OP_ShiftLeft: 
b3b0: 20 20 61 20 3c 3c 3d 20 62 3b 20 20 20 20 62 72    a <<= b;    br
b3c0: 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74  eak;.    default
b3d0: 3a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  :  assert( pOp->
b3e0: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 68 69 66 74  opcode==OP_Shift
b3f0: 52 69 67 68 74 20 29 3b 0a 20 20 20 20 20 20 20  Right );.       
b400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b410: 20 20 61 20 3e 3e 3d 20 62 3b 20 20 20 20 62 72    a >>= b;    br
b420: 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  eak;.  }.  pOut-
b430: 3e 75 2e 69 20 3d 20 61 3b 0a 20 20 4d 65 6d 53  >u.i = a;.  MemS
b440: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
b450: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65   MEM_Int);.  bre
b460: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
b470: 3a 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20  : AddImm  P1 P2 
b480: 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 41 64 64  * * *.** .** Add
b490: 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32   the constant P2
b4a0: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
b4b0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
b4c0: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
b4d0: 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72  lways an integer
b4e0: 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65  ..**.** To force
b4f0: 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f   any register to
b500: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   be an integer, 
b510: 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63  just add 0..*/.c
b520: 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b  ase OP_AddImm: {
b530: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
b540: 6e 31 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  n1 */.  sqlite3V
b550: 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
b560: 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e  (pIn1);.  pIn1->
b570: 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  u.i += pOp->p2;.
b580: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
b590: 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74  pcode: MustBeInt
b5a0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
b5b0: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
b5c0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b5d0: 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  P1 to be an inte
b5e0: 67 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ger.  If the val
b5f0: 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e  ue.** in P1 is n
b600: 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e  ot an integer an
b610: 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  d cannot be conv
b620: 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e  erted into an in
b630: 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74  teger.** without
b640: 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e   data loss, then
b650: 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
b660: 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50  y to P2, or if P
b670: 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e  2==0.** raise an
b680: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
b690: 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63   exception..*/.c
b6a0: 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74  ase OP_MustBeInt
b6b0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
b6c0: 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
b6d0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
b6e0: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
b6f0: 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e  NUMERIC, encodin
b700: 67 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  g);.  if( (pIn1-
b710: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
b720: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
b730: 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
b740: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
b750: 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20  MISMATCH;.      
b760: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
b770: 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
b780: 73 65 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70  se{.      pc = p
b790: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
b7a0: 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 4d  }.  }else{.    M
b7b0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49  emSetTypeFlag(pI
b7c0: 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  n1, MEM_Int);.  
b7d0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
b7e0: 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66 66   Opcode: RealAff
b7f0: 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a  inity P1 * * * *
b800: 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73 74  .**.** If regist
b810: 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20 69  er P1 holds an i
b820: 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20 69  nteger convert i
b830: 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c 75  t to a real valu
b840: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  e..**.** This op
b850: 63 6f 64 65 20 69 73 20 75 73 65 64 20 77 68 65  code is used whe
b860: 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e 66  n extracting inf
b870: 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20  ormation from a 
b880: 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68  column that.** h
b890: 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79  as REAL affinity
b8a0: 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76  .  Such column v
b8b0: 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c 20  alues may still 
b8c0: 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20  be stored as.** 
b8d0: 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73 70  integers, for sp
b8e0: 61 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c 20  ace efficiency, 
b8f0: 62 75 74 20 61 66 74 65 72 20 65 78 74 72 61 63  but after extrac
b900: 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68 65  tion we want the
b910: 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c  m.** to have onl
b920: 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a  y a real value..
b930: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 41  */.case OP_RealA
b940: 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20 20  ffinity: {      
b950: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
b960: 6e 31 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31  n1 */.  if( pIn1
b970: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
b980: 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  t ){.    sqlite3
b990: 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70  VdbeMemRealify(p
b9a0: 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
b9b0: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
b9c0: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f  LITE_OMIT_CAST./
b9d0: 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 54 65 78 74  * Opcode: ToText
b9e0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
b9f0: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
ba00: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
ba10: 20 74 6f 20 62 65 20 74 65 78 74 2e 0a 2a 2a 20   to be text..** 
ba20: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
ba30: 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74  numeric, convert
ba40: 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20   it to a string 
ba50: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
ba60: 69 76 61 6c 65 6e 74 20 6f 66 20 70 72 69 6e 74  ivalent of print
ba70: 66 28 29 2e 20 20 42 6c 6f 62 20 76 61 6c 75 65  f().  Blob value
ba80: 73 20 61 72 65 20 75 6e 63 68 61 6e 67 65 64 20  s are unchanged 
ba90: 61 6e 64 0a 2a 2a 20 61 72 65 20 61 66 74 65 72  and.** are after
baa0: 77 61 72 64 73 20 73 69 6d 70 6c 79 20 69 6e 74  wards simply int
bab0: 65 72 70 72 65 74 65 64 20 61 73 20 74 65 78 74  erpreted as text
bac0: 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  ..**.** A NULL v
bad0: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
bae0: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
baf0: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
bb00: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
bb10: 50 5f 54 6f 54 65 78 74 3a 20 7b 20 20 20 20 20  P_ToText: {     
bb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bb30: 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 54 45  same as TK_TO_TE
bb40: 58 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28  XT, in1 */.  if(
bb50: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
bb60: 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b  EM_Null ) break;
bb70: 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f 53  .  assert( MEM_S
bb80: 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33  tr==(MEM_Blob>>3
bb90: 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  ) );.  pIn1->fla
bba0: 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  gs |= (pIn1->fla
bbb0: 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b  gs&MEM_Blob)>>3;
bbc0: 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  .  applyAffinity
bbd0: 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn1, SQLITE_AF
bbe0: 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67  F_TEXT, encoding
bbf0: 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64  );.  rc = Expand
bc00: 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61 73  Blob(pIn1);.  as
bc10: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
bc20: 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64  s & MEM_Str || d
bc30: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
bc40: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
bc50: 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45   &= ~(MEM_Int|ME
bc60: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c  M_Real|MEM_Blob|
bc70: 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44  MEM_Zero);.  UPD
bc80: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
bc90: 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b  (pIn1);.  break;
bca0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  .}../* Opcode: T
bcb0: 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a  oBlob P1 * * * *
bcc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
bcd0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
bce0: 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c  er P1 to be a BL
bcf0: 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  OB..** If the va
bd00: 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20  lue is numeric, 
bd10: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
bd20: 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a  string first..**
bd30: 20 53 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d   Strings are sim
bd40: 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74 65  ply reinterprete
bd50: 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20  d as blobs with 
bd60: 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20  no change.** to 
bd70: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
bd80: 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ata..**.** A NUL
bd90: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
bda0: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
bdb0: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
bdc0: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
bdd0: 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20  e OP_ToBlob: {  
bde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdf0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
be00: 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20  _BLOB, in1 */.  
be10: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
be20: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65  & MEM_Null ) bre
be30: 61 6b 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  ak;.  if( (pIn1-
be40: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
be50: 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70  b)==0 ){.    app
be60: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
be70: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
be80: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
be90: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
bea0: 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c  lags & MEM_Str |
beb0: 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  | db->mallocFail
bec0: 65 64 20 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74  ed );.    MemSet
bed0: 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d  TypeFlag(pIn1, M
bee0: 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 65 6c 73  EM_Blob);.  }els
bef0: 65 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61  e{.    pIn1->fla
bf00: 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 54 79 70 65  gs &= ~(MEM_Type
bf10: 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c 6f 62 29 3b  Mask&~MEM_Blob);
bf20: 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41  .  }.  UPDATE_MA
bf30: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
bf40: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
bf50: 20 4f 70 63 6f 64 65 3a 20 54 6f 4e 75 6d 65 72   Opcode: ToNumer
bf60: 69 63 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ic P1 * * * *.**
bf70: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
bf80: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
bf90: 50 31 20 74 6f 20 62 65 20 6e 75 6d 65 72 69 63  P1 to be numeric
bfa0: 20 28 65 69 74 68 65 72 20 61 6e 0a 2a 2a 20 69   (either an.** i
bfb0: 6e 74 65 67 65 72 20 6f 72 20 61 20 66 6c 6f 61  nteger or a floa
bfc0: 74 69 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d 62 65  ting-point numbe
bfd0: 72 2e 29 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  r.).** If the va
bfe0: 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62  lue is text or b
bff0: 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76  lob, try to conv
c000: 65 72 74 20 69 74 20 74 6f 20 61 6e 20 75 73 69  ert it to an usi
c010: 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61  ng the.** equiva
c020: 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 6f  lent of atoi() o
c030: 72 20 61 74 6f 66 28 29 20 61 6e 64 20 73 74 6f  r atof() and sto
c040: 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63 68 20  re 0 if no such 
c050: 63 6f 6e 76 65 72 73 69 6f 6e 20 0a 2a 2a 20 69  conversion .** i
c060: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
c070: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
c080: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
c090: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
c0a0: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
c0b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 4e 75  .*/.case OP_ToNu
c0c0: 6d 65 72 69 63 3a 20 7b 20 20 20 20 20 20 20 20  meric: {        
c0d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
c0e0: 65 20 61 73 20 54 4b 5f 54 4f 5f 4e 55 4d 45 52  e as TK_TO_NUMER
c0f0: 49 43 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28  IC, in1 */.  if(
c100: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c110: 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 49 6e  (MEM_Null|MEM_In
c120: 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20  t|MEM_Real))==0 
c130: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
c140: 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70 49  beMemNumerify(pI
c150: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
c160: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
c170: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a  LITE_OMIT_CAST *
c180: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  /../* Opcode: To
c190: 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  Int P1 * * * *.*
c1a0: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
c1b0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
c1c0: 20 50 31 20 62 65 20 61 6e 20 69 6e 74 65 67 65   P1 be an intege
c1d0: 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65 20 76 61  r.  If.** The va
c1e0: 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79  lue is currently
c1f0: 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20   a real number, 
c200: 64 72 6f 70 20 69 74 73 20 66 72 61 63 74 69 6f  drop its fractio
c210: 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20  nal part..** If 
c220: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
c230: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
c240: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
c250: 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67  an integer using
c260: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
c270: 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64  nt of atoi() and
c280: 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73   store 0 if no s
c290: 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  uch conversion i
c2a0: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
c2b0: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
c2c0: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
c2d0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
c2e0: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
c2f0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e  .*/.case OP_ToIn
c300: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
c310: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
c320: 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31 20   TK_TO_INT, in1 
c330: 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  */.  if( (pIn1->
c340: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
c350: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
c360: 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
c370: 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  rify(pIn1);.  }.
c380: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
c390: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
c3a0: 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  CAST./* Opcode: 
c3b0: 54 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20  ToReal P1 * * * 
c3c0: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
c3d0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
c3e0: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 66  ter P1 to be a f
c3f0: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75  loating point nu
c400: 6d 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20  mber..** If The 
c410: 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74  value is current
c420: 6c 79 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 63  ly an integer, c
c430: 6f 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66  onvert it..** If
c440: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65   the value is te
c450: 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20  xt or blob, try 
c460: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
c470: 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e   an integer usin
c480: 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c  g the.** equival
c490: 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e  ent of atoi() an
c4a0: 64 20 73 74 6f 72 65 20 30 2e 30 20 69 66 20 6e  d store 0.0 if n
c4b0: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
c4c0: 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  n is possible..*
c4d0: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
c4e0: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
c4f0: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
c500: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
c510: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
c520: 6f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20  oReal: {        
c530: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
c540: 65 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c  e as TK_TO_REAL,
c550: 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70   in1 */.  if( (p
c560: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
c570: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
c580: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
c590: 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  ealify(pIn1);.  
c5a0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
c5b0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
c5c0: 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f  IT_CAST */../* O
c5d0: 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20  pcode: Lt P1 P2 
c5e0: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 43  P3 P4 P5.**.** C
c5f0: 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65  ompare the value
c600: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
c610: 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67   and P3.  If reg
c620: 28 50 33 29 3c 72 65 67 28 50 31 29 20 74 68 65  (P3)<reg(P1) the
c630: 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64  n.** jump to add
c640: 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a  ress P2.  .**.**
c650: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   If the SQLITE_J
c660: 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66  UMPIFNULL bit of
c670: 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 65   P5 is set and e
c680: 69 74 68 65 72 20 72 65 67 28 50 31 29 20 6f 72  ither reg(P1) or
c690: 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e  .** reg(P3) is N
c6a0: 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
c6b0: 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20  e jump.  If the 
c6c0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
c6d0: 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65  L .** bit is cle
c6e0: 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  ar then fall thr
c6f0: 75 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  u if either oper
c700: 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a  and is NULL..**.
c710: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
c720: 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f  F_MASK portion o
c730: 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20  f P5 must be an 
c740: 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74  affinity charact
c750: 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  er -.** SQLITE_A
c760: 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f  FF_TEXT, SQLITE_
c770: 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64  AFF_INTEGER, and
c780: 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74   so forth. An at
c790: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a  tempt is made .*
c7a0: 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68  * to coerce both
c7b0: 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e   inputs accordin
c7c0: 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69  g to this affini
c7d0: 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a  ty before the.**
c7e0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d   comparison is m
c7f0: 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49  ade. If the SQLI
c800: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30  TE_AFF_MASK is 0
c810: 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69  x00, then numeri
c820: 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73  c.** affinity is
c830: 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74   used. Note that
c840: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f   the affinity co
c850: 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74  nversions are st
c860: 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74  ored.** back int
c870: 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
c880: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
c890: 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65    So this opcode
c8a0: 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65   can cause.** pe
c8b0: 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73  rsistent changes
c8c0: 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31   to registers P1
c8d0: 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f   and P3..**.** O
c8e0: 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69  nce any conversi
c8f0: 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70  ons have taken p
c900: 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65  lace, and neithe
c910: 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c  r value is NULL,
c920: 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20   .** the values 
c930: 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66  are compared. If
c940: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
c950: 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63   blobs then memc
c960: 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20  mp() is.** used 
c970: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
c980: 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
c990: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
c9a0: 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61  both values.** a
c9b0: 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68  re text, then th
c9c0: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f  e appropriate co
c9d0: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
c9e0: 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a   specified in.**
c9f0: 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20   P4 is  used to 
ca00: 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  do the compariso
ca10: 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  n.  If P4 is not
ca20: 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a   specified then.
ca30: 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75  ** memcmp() is u
ca40: 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74  sed to compare t
ca50: 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20  ext string.  If 
ca60: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a  both values are.
ca70: 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e  ** numeric, then
ca80: 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61   a numeric compa
ca90: 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49  rison is used. I
caa0: 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73  f the two values
cab0: 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65  .** are of diffe
cac0: 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e  rent types, then
cad0: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e   numbers are con
cae0: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
caf0: 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64  n.** strings and
cb00: 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e   strings are con
cb10: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
cb20: 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49  n blobs..**.** I
cb30: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f  f the SQLITE_STO
cb40: 52 45 50 32 20 62 69 74 20 6f 66 20 50 35 20 69  REP2 bit of P5 i
cb50: 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e  s set, then do n
cb60: 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61  ot jump.  Instea
cb70: 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f  d,.** store a bo
cb80: 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69  olean result (ei
cb90: 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72  ther 0, or 1, or
cba0: 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74   NULL) in regist
cbb0: 65 72 20 50 32 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  er P2..*/./* Opc
cbc0: 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33  ode: Ne P1 P2 P3
cbd0: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
cbe0: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
cbf0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
cc00: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
cc10: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
cc20: 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73  .** the operands
cc30: 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
cc40: 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20   and P3 are not 
cc50: 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20  equal.  See the 
cc60: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a  Lt opcode for.**
cc70: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
cc80: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
cc90: 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20  pcode: Eq P1 P2 
cca0: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
ccb0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
ccc0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
ccd0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
cce0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
ccf0: 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e  if.** the operan
cd00: 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  ds in registers 
cd10: 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 65 71  P1 and P3 are eq
cd20: 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20  ual..** See the 
cd30: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
cd40: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
cd50: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
cd60: 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20  de: Le P1 P2 P3 
cd70: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
cd80: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
cd90: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
cda0: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
cdb0: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
cdc0: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
cdd0: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
cde0: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
cdf0: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
ce00: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
ce10: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
ce20: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
ce30: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
ce40: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
ce50: 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50  e: Gt P1 P2 P3 P
ce60: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
ce70: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
ce80: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
ce90: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
cea0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
ceb0: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
cec0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
ced0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
cee0: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
cef0: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
cf00: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
cf10: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
cf20: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
cf30: 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50   Opcode: Ge P1 P
cf40: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
cf50: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
cf60: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
cf70: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
cf80: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
cf90: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
cfa0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
cfb0: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
cfc0: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
cfd0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
cfe0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
cff0: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
d000: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
d010: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
d020: 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20  case OP_Eq:     
d030: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
d040: 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70  e as TK_EQ, jump
d050: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
d060: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20  se OP_Ne:       
d070: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
d080: 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20  as TK_NE, jump, 
d090: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
d0a0: 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20   OP_Lt:         
d0b0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
d0c0: 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_LT, jump, in
d0d0: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
d0e0: 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Le:           
d0f0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
d100: 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_LE, jump, in1,
d110: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
d120: 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Gt:             
d130: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
d140: 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  GT, jump, in1, i
d150: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65  n3 */.case OP_Ge
d160: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
d170: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45  /* same as TK_GE
d180: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
d190: 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b   */.  int flags;
d1a0: 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 63 68  .  int res;.  ch
d1b0: 61 72 20 61 66 66 69 6e 69 74 79 3b 0a 0a 20 20  ar affinity;..  
d1c0: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
d1d0: 61 67 73 7c 70 49 6e 33 2d 3e 66 6c 61 67 73 3b  ags|pIn3->flags;
d1e0: 0a 0a 20 20 69 66 28 20 66 6c 61 67 73 26 4d 45  ..  if( flags&ME
d1f0: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a  M_Null ){.    /*
d200: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
d210: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  nd is NULL then 
d220: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  the result is al
d230: 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a  ways NULL..    *
d240: 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61  * The jump is ta
d250: 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54  ken if the SQLIT
d260: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
d270: 20 69 73 20 73 65 74 2e 0a 20 20 20 20 2a 2f 0a   is set..    */.
d280: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
d290: 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  & SQLITE_STOREP2
d2a0: 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d   ){.      pOut =
d2b0: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
d2c0: 32 5d 3b 0a 20 20 20 20 20 20 4d 65 6d 53 65 74  2];.      MemSet
d2d0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
d2e0: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20  EM_Null);.      
d2f0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
d300: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
d310: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70     }else if( pOp
d320: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55  ->p5 & SQLITE_JU
d330: 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20  MPIFNULL ){.    
d340: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
d350: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  ;.    }.    brea
d360: 6b 3b 0a 20 20 7d 0a 0a 20 20 61 66 66 69 6e 69  k;.  }..  affini
d370: 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53  ty = pOp->p5 & S
d380: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a  QLITE_AFF_MASK;.
d390: 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 20 29    if( affinity )
d3a0: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
d3b0: 69 74 79 28 70 49 6e 31 2c 20 61 66 66 69 6e 69  ity(pIn1, affini
d3c0: 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ty, encoding);. 
d3d0: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
d3e0: 28 70 49 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c  (pIn3, affinity,
d3f0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
d400: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
d410: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
d420: 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  em;.  }..  asser
d430: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
d440: 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f  P4_COLLSEQ || pO
d450: 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29  p->p4.pColl==0 )
d460: 3b 0a 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  ;.  ExpandBlob(p
d470: 49 6e 31 29 3b 0a 20 20 45 78 70 61 6e 64 42 6c  In1);.  ExpandBl
d480: 6f 62 28 70 49 6e 33 29 3b 0a 20 20 72 65 73 20  ob(pIn3);.  res 
d490: 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70  = sqlite3MemComp
d4a0: 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20  are(pIn3, pIn1, 
d4b0: 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a  pOp->p4.pColl);.
d4c0: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
d4d0: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73  pcode ){.    cas
d4e0: 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 20  e OP_Eq:    res 
d4f0: 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72  = res==0;     br
d500: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
d510: 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Ne:    res = re
d520: 73 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s!=0;     break;
d530: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a  .    case OP_Lt:
d540: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30 3b      res = res<0;
d550: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
d560: 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20   case OP_Le:    
d570: 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20  res = res<=0;   
d580: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
d590: 65 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 20  e OP_Gt:    res 
d5a0: 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72  = res>0;      br
d5b0: 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74  eak;.    default
d5c0: 3a 20 20 20 20 20 20 20 72 65 73 20 3d 20 72 65  :       res = re
d5d0: 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s>=0;     break;
d5e0: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d  .  }..  if( pOp-
d5f0: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
d600: 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74  REP2 ){.    pOut
d610: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
d620: 3e 70 32 5d 3b 0a 20 20 20 20 4d 65 6d 53 65 74  >p2];.    MemSet
d630: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
d640: 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75  EM_Int);.    pOu
d650: 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20  t->u.i = res;.  
d660: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
d670: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
d680: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72 65 73  .  }else if( res
d690: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
d6a0: 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72  ->p2-1;.  }.  br
d6b0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
d6c0: 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a  e: Permutation *
d6d0: 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
d6e0: 53 65 74 20 74 68 65 20 70 65 72 6d 75 74 61 74  Set the permutat
d6f0: 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
d700: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
d710: 74 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61 72  tor to be the ar
d720: 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65  ray.** of intege
d730: 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20  rs in P4..**.** 
d740: 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
d750: 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e  is only valid un
d760: 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f  til the next OP_
d770: 50 65 72 6d 75 74 61 74 69 6f 6e 2c 20 4f 50 5f  Permutation, OP_
d780: 43 6f 6d 70 61 72 65 2c 0a 2a 2a 20 4f 50 5f 48  Compare,.** OP_H
d790: 61 6c 74 2c 20 6f 72 20 4f 50 5f 52 65 73 75 6c  alt, or OP_Resul
d7a0: 74 52 6f 77 2e 20 20 54 79 70 69 63 61 6c 6c 79  tRow.  Typically
d7b0: 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74   the OP_Permutat
d7c0: 69 6f 6e 20 73 68 6f 75 6c 64 20 6f 63 63 75 72  ion should occur
d7d0: 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  .** immediately 
d7e0: 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f  prior to the OP_
d7f0: 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73 65  Compare..*/.case
d800: 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a   OP_Permutation:
d810: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
d820: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
d830: 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72  ARRAY );.  asser
d840: 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b  t( pOp->p4.ai );
d850: 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f  .  aPermute = pO
d860: 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65 61  p->p4.ai;.  brea
d870: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
d880: 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50   Compare P1 P2 P
d890: 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d  3 P4 *.**.** Com
d8a0: 70 61 72 65 20 74 6f 20 76 65 63 74 6f 72 73 20  pare to vectors 
d8b0: 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  of registers in 
d8c0: 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b  reg(P1)..reg(P1+
d8d0: 50 33 2d 31 29 20 28 61 6c 6c 20 74 68 69 73 0a  P3-1) (all this.
d8e0: 2a 2a 20 6f 6e 65 20 22 41 22 29 20 61 6e 64 20  ** one "A") and 
d8f0: 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28  in reg(P2)..reg(
d900: 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20  P2+P3-1) ("B"). 
d910: 20 53 61 76 65 20 74 68 65 20 72 65 73 75 6c 74   Save the result
d920: 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61   of.** the compa
d930: 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79  rison for use by
d940: 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d   the next OP_Jum
d950: 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a  p instruct..**.*
d960: 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66  * P4 is a KeyInf
d970: 6f 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  o structure that
d980: 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69   defines collati
d990: 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64  ng sequences and
d9a0: 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20   sort.** orders 
d9b0: 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73  for the comparis
d9c0: 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61  on.  The permuta
d9d0: 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20  tion applies to 
d9e0: 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c  registers.** onl
d9f0: 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  y.  The KeyInfo 
da00: 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65  elements are use
da10: 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a  d sequentially..
da20: 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72  **.** The compar
da30: 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63  ison is a sort c
da40: 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55  omparison, so NU
da50: 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61  LLs compare equa
da60: 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20  l,.** NULLs are 
da70: 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72  less than number
da80: 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c  s, numbers are l
da90: 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73  ess than strings
daa0: 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73  ,.** and strings
dab0: 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62   are less than b
dac0: 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  lobs..*/.case OP
dad0: 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e  _Compare: {.  in
dae0: 74 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  t n = pOp->p3;. 
daf0: 20 69 6e 74 20 69 2c 20 70 31 2c 20 70 32 3b 0a   int i, p1, p2;.
db00: 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20    const KeyInfo 
db10: 2a 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d  *pKeyInfo = pOp-
db20: 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
db30: 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20  assert( n>0 );. 
db40: 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
db50: 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70  o!=0 );.  p1 = p
db60: 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74  Op->p1;.  assert
db70: 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d  ( p1>0 && p1+n<=
db80: 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 70  p->nMem+1 );.  p
db90: 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  2 = pOp->p2;.  a
dba0: 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70  ssert( p2>0 && p
dbb0: 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29  2+n<=p->nMem+1 )
dbc0: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e  ;.  for(i=0; i<n
dbd0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 6e 74 20  ; i++){.    int 
dbe0: 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f  idx = aPermute ?
dbf0: 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69   aPermute[i] : i
dc00: 3b 0a 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70  ;.    CollSeq *p
dc10: 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c  Coll;    /* Coll
dc20: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74  ating sequence t
dc30: 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65  o use on this te
dc40: 72 6d 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 52  rm */.    int bR
dc50: 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev;          /* 
dc60: 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44  True for DESCEND
dc70: 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a  ING sort order *
dc80: 2f 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  /.    REGISTER_T
dc90: 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26 70 2d  RACE(p1+idx, &p-
dca0: 3e 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a  >aMem[p1+idx]);.
dcb0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
dcc0: 43 45 28 70 32 2b 69 64 78 2c 20 26 70 2d 3e 61  CE(p2+idx, &p->a
dcd0: 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p2+idx]);.  
dce0: 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79    assert( i<pKey
dcf0: 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  Info->nField );.
dd00: 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79      pColl = pKey
dd10: 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a  Info->aColl[i];.
dd20: 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49      bRev = pKeyI
dd30: 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b  nfo->aSortOrder[
dd40: 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65  i];.    iCompare
dd50: 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
dd60: 70 61 72 65 28 26 70 2d 3e 61 4d 65 6d 5b 70 31  pare(&p->aMem[p1
dd70: 2b 69 64 78 5d 2c 20 26 70 2d 3e 61 4d 65 6d 5b  +idx], &p->aMem[
dd80: 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b  p2+idx], pColl);
dd90: 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72  .    if( iCompar
dda0: 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62  e ){.      if( b
ddb0: 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d  Rev ) iCompare =
ddc0: 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20   -iCompare;.    
ddd0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
dde0: 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20   }.  aPermute = 
ddf0: 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
de00: 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50  * Opcode: Jump P
de10: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
de20: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e  * Jump to the in
de30: 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64  struction at add
de40: 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20  ress P1, P2, or 
de50: 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  P3 depending on 
de60: 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68  whether.** in th
de70: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50  e most recent OP
de80: 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63  _Compare instruc
de90: 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74  tion the P1 vect
dea0: 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e  or was less than
deb0: 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72  .** equal to, or
dec0: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
ded0: 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73  e P2 vector, res
dee0: 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61  pectively..*/.ca
def0: 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20  se OP_Jump: {   
df00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
df10: 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70  p */.  if( iComp
df20: 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 70 63 20  are<0 ){.    pc 
df30: 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20  = pOp->p1 - 1;. 
df40: 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70   }else if( iComp
df50: 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63  are==0 ){.    pc
df60: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
df70: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63 20    }else{.    pc 
df80: 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20  = pOp->p3 - 1;. 
df90: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
dfa0: 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31  * Opcode: And P1
dfb0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
dfc0: 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61   Take the logica
dfd0: 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c  l AND of the val
dfe0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  ues in registers
dff0: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
e000: 2a 20 77 72 69 74 65 20 74 68 65 20 72 65 73 75  * write the resu
e010: 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  lt into register
e020: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69   P3..**.** If ei
e030: 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73  ther P1 or P2 is
e040: 20 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20   0 (false) then 
e050: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 30 20  the result is 0 
e060: 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  even if.** the o
e070: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
e080: 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20  LL.  A NULL and 
e090: 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  true or two NULL
e0a0: 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c  s give.** a NULL
e0b0: 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f   output..*/./* O
e0c0: 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20  pcode: Or P1 P2 
e0d0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b  P3 * *.**.** Tak
e0e0: 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52  e the logical OR
e0f0: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
e100: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
e110: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
e120: 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20  e the answer in 
e130: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
e140: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
e150: 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f  or P2 is nonzero
e160: 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65   (true) then the
e170: 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72   result is 1 (tr
e180: 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74  ue).** even if t
e190: 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69  he other input i
e1a0: 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20  s NULL.  A NULL 
e1b0: 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f  and false or two
e1c0: 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61   NULLs.** give a
e1d0: 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
e1e0: 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20  .case OP_And:   
e1f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
e200: 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e  me as TK_AND, in
e210: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
e220: 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20  case OP_Or: {   
e230: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
e240: 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c  e as TK_OR, in1,
e250: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
e260: 69 6e 74 20 76 31 2c 20 76 32 3b 20 20 20 20 2f  int v1, v2;    /
e270: 2a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54  * 0==FALSE, 1==T
e280: 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20  RUE, 2==UNKNOWN 
e290: 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 69 66  or NULL */..  if
e2a0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
e2b0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
e2c0: 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  v1 = 2;.  }else{
e2d0: 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65  .    v1 = sqlite
e2e0: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
e2f0: 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66  n1)!=0;.  }.  if
e300: 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
e310: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
e320: 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  v2 = 2;.  }else{
e330: 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65  .    v2 = sqlite
e340: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
e350: 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66  n2)!=0;.  }.  if
e360: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
e370: 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61  P_And ){.    sta
e380: 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
e390: 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69  ed char and_logi
e3a0: 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c  c[] = { 0, 0, 0,
e3b0: 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20   0, 1, 2, 0, 2, 
e3c0: 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e  2 };.    v1 = an
e3d0: 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  d_logic[v1*3+v2]
e3e0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
e3f0: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
e400: 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67  gned char or_log
e410: 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32  ic[] = { 0, 1, 2
e420: 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c  , 1, 1, 1, 2, 1,
e430: 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f   2 };.    v1 = o
e440: 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  r_logic[v1*3+v2]
e450: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 76 31 3d 3d  ;.  }.  if( v1==
e460: 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54  2 ){.    MemSetT
e470: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
e480: 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65  M_Null);.  }else
e490: 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  {.    pOut->u.i 
e4a0: 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74  = v1;.    MemSet
e4b0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
e4c0: 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62  EM_Int);.  }.  b
e4d0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
e4e0: 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20  de: Not P1 P2 * 
e4f0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  * *.**.** Interp
e500: 72 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ret the value in
e510: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20   register P1 as 
e520: 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e  a boolean value.
e530: 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62    Store the.** b
e540: 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e  oolean complemen
e550: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  t in register P2
e560: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  .  If the value 
e570: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
e580: 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e  s .** NULL, then
e590: 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65   a NULL is store
e5a0: 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  d in P2..*/.case
e5b0: 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20   OP_Not: {      
e5c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
e5d0: 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31  e as TK_NOT, in1
e5e0: 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d   */.  pOut = &p-
e5f0: 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  >aMem[pOp->p2];.
e600: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
e610: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
e620: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
e630: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
e640: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
e650: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
e660: 6e 74 36 34 28 70 4f 75 74 2c 20 21 73 71 6c 69  nt64(pOut, !sqli
e670: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
e680: 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72  pIn1));.  }.  br
e690: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
e6a0: 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20  e: BitNot P1 P2 
e6b0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  * * *.**.** Inte
e6c0: 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e  rpret the conten
e6d0: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  t of register P1
e6e0: 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   as an integer. 
e6f0: 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e   Store the.** on
e700: 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66  es-complement of
e710: 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e   the P1 value in
e720: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  to register P2. 
e730: 20 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20   If P1 holds.** 
e740: 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72  a NULL then stor
e750: 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a  e a NULL in P2..
e760: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f  */.case OP_BitNo
e770: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
e780: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
e790: 49 54 4e 4f 54 2c 20 69 6e 31 20 2a 2f 0a 20 20  ITNOT, in1 */.  
e7a0: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
e7b0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20  pOp->p2];.  if( 
e7c0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
e7d0: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
e7e0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
e7f0: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  ull(pOut);.  }el
e800: 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
e810: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
e820: 4f 75 74 2c 20 7e 73 71 6c 69 74 65 33 56 64 62  Out, ~sqlite3Vdb
e830: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29  eIntValue(pIn1))
e840: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
e850: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20  ../* Opcode: If 
e860: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
e870: 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
e880: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
e890: 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75  gister P1 is tru
e8a0: 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73  e.  The value is
e8b0: 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65  .** is considere
e8c0: 64 20 74 72 75 65 20 69 66 20 69 74 20 69 73 20  d true if it is 
e8d0: 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d  numeric and non-
e8e0: 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
e8f0: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
e900: 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
e910: 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73  he jump if P3 is
e920: 20 74 72 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   true..*/./* Opc
e930: 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32  ode: IfNot P1 P2
e940: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
e950: 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
e960: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
e970: 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20  r P1 is False.  
e980: 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20  The value is.** 
e990: 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72  is considered tr
e9a0: 75 65 20 69 66 20 69 74 20 68 61 73 20 61 20 6e  ue if it has a n
e9b0: 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20  umeric value of 
e9c0: 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
e9d0: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
e9e0: 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
e9f0: 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73  he jump if P3 is
ea00: 20 74 72 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f   true..*/.case O
ea10: 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20 20  P_If:           
ea20: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
ea30: 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  n1 */.case OP_If
ea40: 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
ea50: 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
ea60: 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 69 66 28  /.  int c;.  if(
ea70: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
ea80: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63  EM_Null ){.    c
ea90: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65   = pOp->p3;.  }e
eaa0: 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  lse{.#ifdef SQLI
eab0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
eac0: 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20 73  _POINT.    c = s
ead0: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
eae0: 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c  ue(pIn1)!=0;.#el
eaf0: 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74  se.    c = sqlit
eb00: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
eb10: 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64  pIn1)!=0.0;.#end
eb20: 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  if.    if( pOp->
eb30: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74  opcode==OP_IfNot
eb40: 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20   ) c = !c;.  }. 
eb50: 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20 70 63   if( c ){.    pc
eb60: 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
eb70: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
eb80: 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20   Opcode: IsNull 
eb90: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
eba0: 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
ebb0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
ebc0: 67 69 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c  gister P1 is NUL
ebd0: 4c 2e 20 20 49 66 20 50 33 20 69 73 20 67 72 65  L.  If P3 is gre
ebe0: 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 7a 65 72  ater.** than zer
ebf0: 6f 2c 20 74 68 65 6e 20 63 68 65 63 6b 20 61 6c  o, then check al
ec00: 6c 20 76 61 6c 75 65 73 20 72 65 67 28 50 31 29  l values reg(P1)
ec10: 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 0a 2a 2a  , reg(P1+1), .**
ec20: 20 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2c   reg(P1+2), ...,
ec30: 20 72 65 67 28 50 31 2b 50 33 2d 31 29 2e 0a 2a   reg(P1+P3-1)..*
ec40: 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c  /.case OP_IsNull
ec50: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
ec60: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e  * same as TK_ISN
ec70: 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
ec80: 2f 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d  /.  int n = pOp-
ec90: 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p3;.  assert( p
eca0: 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p3==0 || pOp
ecb0: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 64 6f 7b 0a  ->p1>0 );.  do{.
ecc0: 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
ecd0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
ece0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20  !=0 ){.      pc 
ecf0: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
ed00: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
ed10: 7d 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  }.    pIn1++;.  
ed20: 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 3e 20 30 20  }while( --n > 0 
ed30: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
ed40: 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c  * Opcode: NotNul
ed50: 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
ed60: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
ed70: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
ed80: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f  egister P1 is no
ed90: 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73  t NULL.  .*/.cas
eda0: 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20  e OP_NotNull: { 
edb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
edc0: 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c  me as TK_NOTNULL
edd0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  , jump, in1 */. 
ede0: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
edf0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
ee00: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
ee10: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
ee20: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
ee30: 6f 64 65 3a 20 53 65 74 4e 75 6d 43 6f 6c 75 6d  ode: SetNumColum
ee40: 6e 73 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  ns * P2 * * *.**
ee50: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
ee60: 73 65 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20  sets the number 
ee70: 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 74  of columns for t
ee80: 68 65 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64  he cursor opened
ee90: 20 62 79 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f   by the.** follo
eea0: 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
eeb0: 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 6e   to P2..**.** An
eec0: 20 4f 50 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e   OP_SetNumColumn
eed0: 73 20 69 73 20 6f 6e 6c 79 20 75 73 65 66 75 6c  s is only useful
eee0: 20 69 66 20 69 74 20 6f 63 63 75 72 73 20 69 6d   if it occurs im
eef0: 6d 65 64 69 61 74 65 6c 79 20 62 65 66 6f 72 65  mediately before
ef00: 20 0a 2a 2a 20 6f 6e 65 20 6f 66 20 74 68 65 20   .** one of the 
ef10: 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65  following opcode
ef20: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 4f 70 65  s:.**.**     Ope
ef30: 6e 52 65 61 64 0a 2a 2a 20 20 20 20 20 4f 70 65  nRead.**     Ope
ef40: 6e 57 72 69 74 65 0a 2a 2a 20 20 20 20 20 4f 70  nWrite.**     Op
ef50: 65 6e 50 73 65 75 64 6f 0a 2a 2a 0a 2a 2a 20 49  enPseudo.**.** I
ef60: 66 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20  f the OP_Column 
ef70: 6f 70 63 6f 64 65 20 69 73 20 74 6f 20 62 65 20  opcode is to be 
ef80: 65 78 65 63 75 74 65 64 20 6f 6e 20 61 20 63 75  executed on a cu
ef90: 72 73 6f 72 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  rsor, then.** th
efa0: 69 73 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62  is opcode must b
efb0: 65 20 70 72 65 73 65 6e 74 20 69 6d 6d 65 64 69  e present immedi
efc0: 61 74 65 6c 79 20 62 65 66 6f 72 65 20 74 68 65  ately before the
efd0: 20 6f 70 63 6f 64 65 20 74 68 61 74 0a 2a 2a 20   opcode that.** 
efe0: 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72  opens the cursor
eff0: 2e 0a 2a 2f 0a 23 69 66 20 30 0a 63 61 73 65 20  ..*/.#if 0.case 
f000: 4f 50 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73  OP_SetNumColumns
f010: 3a 20 7b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  : {.  break;.}.#
f020: 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
f030: 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50  : Column P1 P2 P
f040: 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74  3 P4 *.**.** Int
f050: 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20  erpret the data 
f060: 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70  that cursor P1 p
f070: 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74  oints to as a st
f080: 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73  ructure built us
f090: 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52  ing.** the MakeR
f0a0: 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
f0b0: 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b  n.  (See the Mak
f0c0: 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66  eRecord opcode f
f0d0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  or additional.**
f0e0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
f0f0: 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  ut the format of
f100: 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74   the data.)  Ext
f110: 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63  ract the P2-th c
f120: 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68  olumn.** from th
f130: 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74  is record.  If t
f140: 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68  here are less th
f150: 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61  at (P2+1) .** va
f160: 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  lues in the reco
f170: 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55  rd, extract a NU
f180: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61  LL..**.** The va
f190: 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73  lue extracted is
f1a0: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
f1b0: 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
f1c0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74   the column cont
f1d0: 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20  ains fewer than 
f1e0: 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20  P2 fields, then 
f1f0: 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20  extract a NULL. 
f200: 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50   Or,.** if the P
f210: 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  4 argument is a 
f220: 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76  P4_MEM use the v
f230: 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61  alue of the P4 a
f240: 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68  rgument as.** th
f250: 65 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 63 61 73  e result..*/.cas
f260: 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20  e OP_Column: {. 
f270: 20 69 6e 74 20 70 61 79 6c 6f 61 64 53 69 7a 65   int payloadSize
f280: 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66  ;   /* Number of
f290: 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
f2a0: 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31  cord */.  int p1
f2b0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 20 2f 2a 20   = pOp->p1;  /* 
f2c0: 50 31 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  P1 value of the 
f2d0: 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  opcode */.  int 
f2e0: 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 20 20 2f  p2 = pOp->p2;  /
f2f0: 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * column number 
f300: 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20  to retrieve */. 
f310: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 20   VdbeCursor *pC 
f320: 3d 20 30 3b 2f 2a 20 54 68 65 20 56 44 42 45 20  = 0;/* The VDBE 
f330: 63 75 72 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72  cursor */.  char
f340: 20 2a 7a 52 65 63 3b 20 20 20 20 20 20 20 20 2f   *zRec;        /
f350: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d  * Pointer to com
f360: 70 6c 65 74 65 20 72 65 63 6f 72 64 2d 64 61 74  plete record-dat
f370: 61 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20  a */.  BtCursor 
f380: 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65  *pCrsr;   /* The
f390: 20 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f   BTree cursor */
f3a0: 0a 20 20 75 33 32 20 2a 61 54 79 70 65 3b 20 20  .  u32 *aType;  
f3b0: 20 20 20 20 20 20 2f 2a 20 61 54 79 70 65 5b 69        /* aType[i
f3c0: 5d 20 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65  ] holds the nume
f3d0: 72 69 63 20 74 79 70 65 20 6f 66 20 74 68 65 20  ric type of the 
f3e0: 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  i-th column */. 
f3f0: 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20   u32 *aOffset;  
f400: 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69      /* aOffset[i
f410: 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73  ] is offset to s
f420: 74 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72  tart of data for
f430: 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   i-th column */.
f440: 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20    int nField;   
f450: 20 20 20 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f       /* number o
f460: 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
f470: 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
f480: 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  len;           /
f490: 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  * The length of 
f4a0: 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64  the serialized d
f4b0: 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ata for the colu
f4c0: 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20  mn */.  int i;  
f4d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
f4e0: 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
f4f0: 63 68 61 72 20 2a 7a 44 61 74 61 3b 20 20 20 20  char *zData;    
f500: 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68     /* Part of th
f510: 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
f520: 65 63 6f 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20  ecoded */.  Mem 
f530: 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f  *pDest;        /
f540: 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65  * Where to write
f550: 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76   the extracted v
f560: 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d  alue */.  Mem sM
f570: 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
f580: 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20  For storing the 
f590: 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
f5a0: 6f 64 65 64 20 2a 2f 0a 0a 20 20 6d 65 6d 73 65  oded */..  memse
f5b0: 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65  t(&sMem, 0, size
f5c0: 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 61 73 73  of(sMem));.  ass
f5d0: 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43 75 72 73  ert( p1<p->nCurs
f5e0: 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
f5f0: 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
f600: 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
f610: 0a 20 20 70 44 65 73 74 20 3d 20 26 70 2d 3e 61  .  pDest = &p->a
f620: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
f630: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
f640: 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  Dest, MEM_Null);
f650: 0a 0a 20 20 2f 2a 20 54 68 69 73 20 62 6c 6f 63  ..  /* This bloc
f660: 6b 20 73 65 74 73 20 74 68 65 20 76 61 72 69 61  k sets the varia
f670: 62 6c 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 20  ble payloadSize 
f680: 74 6f 20 62 65 20 74 68 65 20 74 6f 74 61 6c 20  to be the total 
f690: 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 62  number of.  ** b
f6a0: 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ytes in the reco
f6b0: 72 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52  rd..  **.  ** zR
f6c0: 65 63 20 69 73 20 73 65 74 20 74 6f 20 62 65 20  ec is set to be 
f6d0: 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74 65 78  the complete tex
f6e0: 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  t of the record 
f6f0: 69 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62  if it is availab
f700: 6c 65 2e 0a 20 20 2a 2a 20 54 68 65 20 63 6f 6d  le..  ** The com
f710: 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74 65 78  plete record tex
f720: 74 20 69 73 20 61 6c 77 61 79 73 20 61 76 61 69  t is always avai
f730: 6c 61 62 6c 65 20 66 6f 72 20 70 73 65 75 64 6f  lable for pseudo
f740: 2d 74 61 62 6c 65 73 0a 20 20 2a 2a 20 49 66 20  -tables.  ** If 
f750: 74 68 65 20 72 65 63 6f 72 64 20 69 73 20 73 74  the record is st
f760: 6f 72 65 64 20 69 6e 20 61 20 63 75 72 73 6f 72  ored in a cursor
f770: 2c 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  , the complete r
f780: 65 63 6f 72 64 20 74 65 78 74 0a 20 20 2a 2a 20  ecord text.  ** 
f790: 6d 69 67 68 74 20 62 65 20 61 76 61 69 6c 61 62  might be availab
f7a0: 6c 65 20 69 6e 20 74 68 65 20 20 70 43 2d 3e 61  le in the  pC->a
f7b0: 52 6f 77 20 63 61 63 68 65 2e 20 20 4f 72 20 69  Row cache.  Or i
f7c0: 74 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 2e 0a  t might not be..
f7d0: 20 20 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61    ** If the data
f7e0: 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c   is unavailable,
f7f0: 20 20 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f    zRec is set to
f800: 20 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a   NULL..  **.  **
f810: 20 57 65 20 61 6c 73 6f 20 63 6f 6d 70 75 74 65   We also compute
f820: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
f830: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65  olumns in the re
f840: 63 6f 72 64 2e 20 20 46 6f 72 20 63 75 72 73 6f  cord.  For curso
f850: 72 73 2c 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d  rs,.  ** the num
f860: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
f870: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
f880: 56 64 62 65 43 75 72 73 6f 72 2e 6e 46 69 65 6c  VdbeCursor.nFiel
f890: 64 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a  d element..  */.
f8a0: 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
f8b0: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
f8c0: 43 21 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20  C!=0 );.#ifndef 
f8d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
f8e0: 55 41 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72  UALTABLE.  asser
f8f0: 74 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73  t( pC->pVtabCurs
f900: 6f 72 3d 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a  or==0 );.#endif.
f910: 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f    if( pC->pCurso
f920: 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54  r!=0 ){.    /* T
f930: 68 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f  he record is sto
f940: 72 65 64 20 69 6e 20 61 20 42 2d 54 72 65 65 20  red in a B-Tree 
f950: 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
f960: 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
f970: 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28  eto(pC);.    if(
f980: 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
f990: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
f9a0: 20 20 20 7a 52 65 63 20 3d 20 30 3b 0a 20 20 20     zRec = 0;.   
f9b0: 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
f9c0: 72 73 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43  rsor;.    if( pC
f9d0: 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
f9e0: 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d     payloadSize =
f9f0: 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   0;.    }else if
fa00: 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75  ( pC->cacheStatu
fa10: 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29  s==p->cacheCtr )
fa20: 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53  {.      payloadS
fa30: 69 7a 65 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61  ize = pC->payloa
fa40: 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7a 52 65  dSize;.      zRe
fa50: 63 20 3d 20 28 63 68 61 72 2a 29 70 43 2d 3e 61  c = (char*)pC->a
fa60: 52 6f 77 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  Row;.    }else i
fa70: 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29  f( pC->isIndex )
fa80: 7b 0a 20 20 20 20 20 20 69 36 34 20 70 61 79 6c  {.      i64 payl
fa90: 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20 20  oadSize64;.     
faa0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
fab0: 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79  Size(pCrsr, &pay
fac0: 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20  loadSize64);.   
fad0: 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d     payloadSize =
fae0: 20 28 69 6e 74 29 70 61 79 6c 6f 61 64 53 69 7a   (int)payloadSiz
faf0: 65 36 34 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  e64;.    }else{.
fb00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
fb10: 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72  eeDataSize(pCrsr
fb20: 2c 20 28 75 33 32 20 2a 29 26 70 61 79 6c 6f 61  , (u32 *)&payloa
fb30: 64 53 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20  dSize);.    }.  
fb40: 20 20 6e 46 69 65 6c 64 20 3d 20 70 43 2d 3e 6e    nField = pC->n
fb50: 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Field;.  }else{.
fb60: 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
fb70: 70 73 65 75 64 6f 54 61 62 6c 65 20 29 3b 0a 20  pseudoTable );. 
fb80: 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64     /* The record
fb90: 20 69 73 20 74 68 65 20 73 6f 6c 65 20 65 6e 74   is the sole ent
fba0: 72 79 20 6f 66 20 61 20 70 73 65 75 64 6f 2d 74  ry of a pseudo-t
fbb0: 61 62 6c 65 20 2a 2f 0a 20 20 20 20 70 61 79 6c  able */.    payl
fbc0: 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 6e 44  oadSize = pC->nD
fbd0: 61 74 61 3b 0a 20 20 20 20 7a 52 65 63 20 3d 20  ata;.    zRec = 
fbe0: 70 43 2d 3e 70 44 61 74 61 3b 0a 20 20 20 20 70  pC->pData;.    p
fbf0: 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
fc00: 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
fc10: 20 20 61 73 73 65 72 74 28 20 70 61 79 6c 6f 61    assert( payloa
fc20: 64 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a 52 65 63  dSize==0 || zRec
fc30: 21 3d 30 20 29 3b 0a 20 20 20 20 6e 46 69 65 6c  !=0 );.    nFiel
fc40: 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a  d = pC->nField;.
fc50: 20 20 20 20 70 43 72 73 72 20 3d 20 30 3b 0a 20      pCrsr = 0;. 
fc60: 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70 61 79 6c   }..  /* If payl
fc70: 6f 61 64 53 69 7a 65 20 69 73 20 30 2c 20 74 68  oadSize is 0, th
fc80: 65 6e 20 6a 75 73 74 20 73 74 6f 72 65 20 61 20  en just store a 
fc90: 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66 28 20 70 61  NULL */.  if( pa
fca0: 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 29 7b 0a  yloadSize==0 ){.
fcb0: 20 20 20 20 61 73 73 65 72 74 28 20 70 44 65 73      assert( pDes
fcc0: 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c  t->flags&MEM_Nul
fcd0: 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70  l );.    goto op
fce0: 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 7d  _column_out;.  }
fcf0: 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69  .  if( payloadSi
fd00: 7a 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  ze>db->aLimit[SQ
fd10: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
fd20: 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
fd30: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 61  oo_big;.  }..  a
fd40: 73 73 65 72 74 28 20 70 32 3c 6e 46 69 65 6c 64  ssert( p2<nField
fd50: 20 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64 20 61   );..  /* Read a
fd60: 6e 64 20 70 61 72 73 65 20 74 68 65 20 74 61 62  nd parse the tab
fd70: 6c 65 20 68 65 61 64 65 72 2e 20 20 53 74 6f 72  le header.  Stor
fd80: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
fd90: 20 74 68 65 20 70 61 72 73 65 0a 20 20 2a 2a 20   the parse.  ** 
fda0: 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  into the record 
fdb0: 68 65 61 64 65 72 20 63 61 63 68 65 20 66 69 65  header cache fie
fdc0: 6c 64 73 20 6f 66 20 74 68 65 20 63 75 72 73 6f  lds of the curso
fdd0: 72 2e 0a 20 20 2a 2f 0a 20 20 61 54 79 70 65 20  r..  */.  aType 
fde0: 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20 69  = pC->aType;.  i
fdf0: 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  f( pC->cacheStat
fe00: 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20  us==p->cacheCtr 
fe10: 29 7b 0a 20 20 20 20 61 4f 66 66 73 65 74 20 3d  ){.    aOffset =
fe20: 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20   pC->aOffset;.  
fe30: 7d 65 6c 73 65 7b 0a 20 20 20 20 75 38 20 2a 7a  }else{.    u8 *z
fe40: 49 64 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 49  Idx;        /* I
fe50: 6e 64 65 78 20 69 6e 74 6f 20 68 65 61 64 65 72  ndex into header
fe60: 20 2a 2f 0a 20 20 20 20 75 38 20 2a 7a 45 6e 64   */.    u8 *zEnd
fe70: 48 64 72 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e  Hdr;     /* Poin
fe80: 74 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74  ter to first byt
fe90: 65 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64  e after the head
fea0: 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6f 66  er */.    int of
feb0: 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 4f 66  fset;      /* Of
fec0: 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61  fset into the da
fed0: 74 61 20 2a 2f 0a 20 20 20 20 69 6e 74 20 73 7a  ta */.    int sz
fee0: 48 64 72 53 7a 3b 20 20 20 20 20 2f 2a 20 53 69  HdrSz;     /* Si
fef0: 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  ze of the header
ff00: 20 73 69 7a 65 20 66 69 65 6c 64 20 61 74 20 73   size field at s
ff10: 74 61 72 74 20 6f 66 20 72 65 63 6f 72 64 20 2a  tart of record *
ff20: 2f 0a 20 20 20 20 69 6e 74 20 61 76 61 69 6c 20  /.    int avail 
ff30: 3d 20 30 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72  = 0;   /* Number
ff40: 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61 76 61   of bytes of ava
ff50: 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 0a  ilable data */..
ff60: 20 20 20 20 61 73 73 65 72 74 28 61 54 79 70 65      assert(aType
ff70: 29 3b 0a 20 20 20 20 70 43 2d 3e 61 4f 66 66 73  );.    pC->aOffs
ff80: 65 74 20 3d 20 61 4f 66 66 73 65 74 20 3d 20 26  et = aOffset = &
ff90: 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20  aType[nField];. 
ffa0: 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69     pC->payloadSi
ffb0: 7a 65 20 3d 20 70 61 79 6c 6f 61 64 53 69 7a 65  ze = payloadSize
ffc0: 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
ffd0: 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65  tatus = p->cache
ffe0: 43 74 72 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 67  Ctr;..    /* Fig
fff0: 75 72 65 20 6f 75 74 20 68 6f 77 20 6d 61 6e 79  ure out how many
10000 20 62 79 74 65 73 20 61 72 65 20 69 6e 20 74 68   bytes are in th
10010 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20  e header */.    
10020 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20 20  if( zRec ){.    
10030 20 20 7a 44 61 74 61 20 3d 20 7a 52 65 63 3b 0a    zData = zRec;.
10040 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
10050 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78   if( pC->isIndex
10060 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74   ){.        zDat
10070 61 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74  a = (char*)sqlit
10080 65 33 42 74 72 65 65 4b 65 79 46 65 74 63 68 28  e3BtreeKeyFetch(
10090 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a  pCrsr, &avail);.
100a0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
100b0 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63 68       zData = (ch
100c0 61 72 2a 29 73 71 6c 69 74 65 33 42 74 72 65 65  ar*)sqlite3Btree
100d0 44 61 74 61 46 65 74 63 68 28 70 43 72 73 72 2c  DataFetch(pCrsr,
100e0 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20   &avail);.      
100f0 7d 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 4b 65  }.      /* If Ke
10100 79 46 65 74 63 68 28 29 2f 44 61 74 61 46 65 74  yFetch()/DataFet
10110 63 68 28 29 20 6d 61 6e 61 67 65 64 20 74 6f 20  ch() managed to 
10120 67 65 74 20 74 68 65 20 65 6e 74 69 72 65 20 70  get the entire p
10130 61 79 6c 6f 61 64 2c 0a 20 20 20 20 20 20 2a 2a  ayload,.      **
10140 20 73 61 76 65 20 74 68 65 20 70 61 79 6c 6f 61   save the payloa
10150 64 20 69 6e 20 74 68 65 20 70 43 2d 3e 61 52 6f  d in the pC->aRo
10160 77 20 63 61 63 68 65 2e 20 20 54 68 61 74 20 77  w cache.  That w
10170 69 6c 6c 20 73 61 76 65 20 75 73 20 66 72 6f 6d  ill save us from
10180 0a 20 20 20 20 20 20 2a 2a 20 68 61 76 69 6e 67  .      ** having
10190 20 74 6f 20 6d 61 6b 65 20 61 64 64 69 74 69 6f   to make additio
101a0 6e 61 6c 20 63 61 6c 6c 73 20 74 6f 20 66 65 74  nal calls to fet
101b0 63 68 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 70  ch the content p
101c0 6f 72 74 69 6f 6e 20 6f 66 0a 20 20 20 20 20 20  ortion of.      
101d0 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20  ** the record.. 
101e0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
101f0 28 20 61 76 61 69 6c 3e 3d 70 61 79 6c 6f 61 64  ( avail>=payload
10200 53 69 7a 65 20 29 7b 0a 20 20 20 20 20 20 20 20  Size ){.        
10210 7a 52 65 63 20 3d 20 7a 44 61 74 61 3b 0a 20 20  zRec = zData;.  
10220 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
10230 20 28 75 38 2a 29 7a 44 61 74 61 3b 0a 20 20 20   (u8*)zData;.   
10240 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
10250 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a    pC->aRow = 0;.
10260 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
10270 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
10280 6e 67 20 61 73 73 65 72 74 20 69 73 20 74 72 75  ng assert is tru
10290 65 20 69 6e 20 61 6c 6c 20 63 61 73 65 73 20 61  e in all cases a
102a0 63 63 65 70 74 20 77 68 65 6e 0a 20 20 20 20 2a  ccept when.    *
102b0 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  * the database f
102c0 69 6c 65 20 68 61 73 20 62 65 65 6e 20 63 6f 72  ile has been cor
102d0 72 75 70 74 65 64 20 65 78 74 65 72 6e 61 6c 6c  rupted externall
102e0 79 2e 0a 20 20 20 20 2a 2a 20 20 20 20 61 73 73  y..    **    ass
102f0 65 72 74 28 20 7a 52 65 63 21 3d 30 20 7c 7c 20  ert( zRec!=0 || 
10300 61 76 61 69 6c 3e 3d 70 61 79 6c 6f 61 64 53 69  avail>=payloadSi
10310 7a 65 20 7c 7c 20 61 76 61 69 6c 3e 3d 39 20 29  ze || avail>=9 )
10320 3b 20 2a 2f 0a 20 20 20 20 73 7a 48 64 72 53 7a  ; */.    szHdrSz
10330 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 28   = getVarint32((
10340 75 38 2a 29 7a 44 61 74 61 2c 20 6f 66 66 73 65  u8*)zData, offse
10350 74 29 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20  t);..    /* The 
10360 4b 65 79 46 65 74 63 68 28 29 20 6f 72 20 44 61  KeyFetch() or Da
10370 74 61 46 65 74 63 68 28 29 20 61 62 6f 76 65 20  taFetch() above 
10380 61 72 65 20 66 61 73 74 20 61 6e 64 20 77 69 6c  are fast and wil
10390 6c 20 67 65 74 20 74 68 65 20 65 6e 74 69 72 65  l get the entire
103a0 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68  .    ** record h
103b0 65 61 64 65 72 20 69 6e 20 6d 6f 73 74 20 63 61  eader in most ca
103c0 73 65 73 2e 20 20 42 75 74 20 74 68 65 79 20 77  ses.  But they w
103d0 69 6c 6c 20 66 61 69 6c 20 74 6f 20 67 65 74 20  ill fail to get 
103e0 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a 20 20 20  the complete.   
103f0 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61 64 65   ** record heade
10400 72 20 69 66 20 74 68 65 20 72 65 63 6f 72 64 20  r if the record 
10410 68 65 61 64 65 72 20 64 6f 65 73 20 6e 6f 74 20  header does not 
10420 66 69 74 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20  fit on a single 
10430 70 61 67 65 0a 20 20 20 20 2a 2a 20 69 6e 20 74  page.    ** in t
10440 68 65 20 42 2d 54 72 65 65 2e 20 20 57 68 65 6e  he B-Tree.  When
10450 20 74 68 61 74 20 68 61 70 70 65 6e 73 2c 20 75   that happens, u
10460 73 65 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  se sqlite3VdbeMe
10470 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 74 6f 0a  mFromBtree() to.
10480 20 20 20 20 2a 2a 20 61 63 71 75 69 72 65 20 74      ** acquire t
10490 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64  he complete head
104a0 65 72 20 74 65 78 74 2e 0a 20 20 20 20 2a 2f 0a  er text..    */.
104b0 20 20 20 20 69 66 28 20 21 7a 52 65 63 20 26 26      if( !zRec &&
104c0 20 61 76 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b   avail<offset ){
104d0 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67  .      sMem.flag
104e0 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 4d 65  s = 0;.      sMe
104f0 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20 20 20 20  m.db = 0;.      
10500 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
10510 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72  MemFromBtree(pCr
10520 73 72 2c 20 30 2c 20 6f 66 66 73 65 74 2c 20 70  sr, 0, offset, p
10530 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65  C->isIndex, &sMe
10540 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  m);.      if( rc
10550 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
10560 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63         goto op_c
10570 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20  olumn_out;.     
10580 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d   }.      zData =
10590 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20   sMem.z;.    }. 
105a0 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 28 75 38     zEndHdr = (u8
105b0 20 2a 29 26 7a 44 61 74 61 5b 6f 66 66 73 65 74   *)&zData[offset
105c0 5d 3b 0a 20 20 20 20 7a 49 64 78 20 3d 20 28 75  ];.    zIdx = (u
105d0 38 20 2a 29 26 7a 44 61 74 61 5b 73 7a 48 64 72  8 *)&zData[szHdr
105e0 53 7a 5d 3b 0a 0a 20 20 20 20 2f 2a 20 53 63 61  Sz];..    /* Sca
105f0 6e 20 74 68 65 20 68 65 61 64 65 72 20 61 6e 64  n the header and
10600 20 75 73 65 20 69 74 20 74 6f 20 66 69 6c 6c 20   use it to fill 
10610 69 6e 20 74 68 65 20 61 54 79 70 65 5b 5d 20 61  in the aType[] a
10620 6e 64 20 61 4f 66 66 73 65 74 5b 5d 0a 20 20 20  nd aOffset[].   
10630 20 2a 2a 20 61 72 72 61 79 73 2e 20 20 61 54 79   ** arrays.  aTy
10640 70 65 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61  pe[i] will conta
10650 69 6e 20 74 68 65 20 74 79 70 65 20 69 6e 74 65  in the type inte
10660 67 65 72 20 66 6f 72 20 74 68 65 20 69 2d 74 68  ger for the i-th
10670 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 20 61  .    ** column a
10680 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 77 69  nd aOffset[i] wi
10690 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 6f  ll contain the o
106a0 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62  ffset from the b
106b0 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20 2a 2a 20  eginning.    ** 
106c0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  of the record to
106d0 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68   the start of th
106e0 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 69  e data for the i
106f0 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2a  -th column.    *
10700 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  /.    for(i=0; i
10710 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20  <nField; i++){. 
10720 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c 7a 45       if( zIdx<zE
10730 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20 20 20  ndHdr ){.       
10740 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66   aOffset[i] = of
10750 66 73 65 74 3b 0a 20 20 20 20 20 20 20 20 7a 49  fset;.        zI
10760 64 78 20 2b 3d 20 67 65 74 56 61 72 69 6e 74 33  dx += getVarint3
10770 32 28 7a 49 64 78 2c 20 61 54 79 70 65 5b 69 5d  2(zIdx, aType[i]
10780 29 3b 0a 20 20 20 20 20 20 20 20 6f 66 66 73 65  );.        offse
10790 74 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65  t += sqlite3Vdbe
107a0 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 61 54  SerialTypeLen(aT
107b0 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d  ype[i]);.      }
107c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a  else{.        /*
107d0 20 49 66 20 69 20 69 73 20 6c 65 73 73 20 74 68   If i is less th
107e0 61 74 20 6e 46 69 65 6c 64 2c 20 74 68 65 6e 20  at nField, then 
107f0 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 66  there are less f
10800 69 65 6c 64 73 20 69 6e 20 74 68 69 73 0a 20 20  ields in this.  
10810 20 20 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20        ** record 
10820 74 68 61 6e 20 53 65 74 4e 75 6d 43 6f 6c 75 6d  than SetNumColum
10830 6e 73 20 69 6e 64 69 63 61 74 65 64 20 74 68 65  ns indicated the
10840 72 65 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69  re are columns i
10850 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a  n the.        **
10860 20 74 61 62 6c 65 2e 20 53 65 74 20 74 68 65 20   table. Set the 
10870 6f 66 66 73 65 74 20 66 6f 72 20 61 6e 79 20 65  offset for any e
10880 78 74 72 61 20 63 6f 6c 75 6d 6e 73 20 6e 6f 74  xtra columns not
10890 20 70 72 65 73 65 6e 74 20 69 6e 0a 20 20 20 20   present in.    
108a0 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72      ** the recor
108b0 64 20 74 6f 20 30 2e 20 54 68 69 73 20 74 65 6c  d to 0. This tel
108c0 6c 73 20 63 6f 64 65 20 62 65 6c 6f 77 20 74 6f  ls code below to
108d0 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 0a 20 20   store a NULL.  
108e0 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 65 61 64        ** instead
108f0 20 6f 66 20 64 65 73 65 72 69 61 6c 69 7a 69 6e   of deserializin
10900 67 20 61 20 76 61 6c 75 65 20 66 72 6f 6d 20 74  g a value from t
10910 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20  he record..     
10920 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 4f     */.        aO
10930 66 66 73 65 74 5b 69 5d 20 3d 20 30 3b 0a 20 20  ffset[i] = 0;.  
10940 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
10950 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
10960 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20  lease(&sMem);.  
10970 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 4d    sMem.flags = M
10980 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20 20 20 2f 2a  EM_Null;..    /*
10990 20 49 66 20 77 65 20 68 61 76 65 20 72 65 61 64   If we have read
109a0 20 6d 6f 72 65 20 68 65 61 64 65 72 20 64 61 74   more header dat
109b0 61 20 74 68 61 6e 20 77 61 73 20 63 6f 6e 74 61  a than was conta
109c0 69 6e 65 64 20 69 6e 20 74 68 65 20 68 65 61 64  ined in the head
109d0 65 72 2c 0a 20 20 20 20 2a 2a 20 6f 72 20 69 66  er,.    ** or if
109e0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
109f0 6c 61 73 74 20 66 69 65 6c 64 20 61 70 70 65 61  last field appea
10a00 72 73 20 74 6f 20 62 65 20 70 61 73 74 20 74 68  rs to be past th
10a10 65 20 65 6e 64 20 6f 66 20 74 68 65 0a 20 20 20  e end of the.   
10a20 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f 72 20 69   ** record, or i
10a30 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  f the end of the
10a40 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70 70 65   last field appe
10a50 61 72 73 20 74 6f 20 62 65 20 62 65 66 6f 72 65  ars to be before
10a60 20 74 68 65 20 65 6e 64 0a 20 20 20 20 2a 2a 20   the end.    ** 
10a70 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 28 77  of the record (w
10a80 68 65 6e 20 61 6c 6c 20 66 69 65 6c 64 73 20 70  hen all fields p
10a90 72 65 73 65 6e 74 29 2c 20 74 68 65 6e 20 77 65  resent), then we
10aa0 20 6d 75 73 74 20 62 65 20 64 65 61 6c 69 6e 67   must be dealing
10ab0 20 0a 20 20 20 20 2a 2a 20 77 69 74 68 20 61 20   .    ** with a 
10ac0 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
10ad0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
10ae0 20 7a 49 64 78 3e 7a 45 6e 64 48 64 72 20 7c 7c   zIdx>zEndHdr ||
10af0 20 6f 66 66 73 65 74 3e 70 61 79 6c 6f 61 64 53   offset>payloadS
10b00 69 7a 65 20 0a 20 20 20 20 20 7c 7c 20 28 7a 49  ize .     || (zI
10b10 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f  dx==zEndHdr && o
10b20 66 66 73 65 74 21 3d 70 61 79 6c 6f 61 64 53 69  ffset!=payloadSi
10b30 7a 65 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ze) ){.      rc 
10b40 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
10b50 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  _BKPT;.      got
10b60 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
10b70 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
10b80 20 47 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20   Get the column 
10b90 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 49 66 20  information. If 
10ba0 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73 20 6e  aOffset[p2] is n
10bb0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 0a 20  on-zero, then . 
10bc0 20 2a 2a 20 64 65 73 65 72 69 61 6c 69 7a 65 20   ** deserialize 
10bd0 74 68 65 20 76 61 6c 75 65 20 66 72 6f 6d 20 74  the value from t
10be0 68 65 20 72 65 63 6f 72 64 2e 20 49 66 20 61 4f  he record. If aO
10bf0 66 66 73 65 74 5b 70 32 5d 20 69 73 20 7a 65 72  ffset[p2] is zer
10c00 6f 2c 0a 20 20 2a 2a 20 74 68 65 6e 20 74 68 65  o,.  ** then the
10c10 72 65 20 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67  re are not enoug
10c20 68 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  h fields in the 
10c30 72 65 63 6f 72 64 20 74 6f 20 73 61 74 69 73 66  record to satisf
10c40 79 20 74 68 65 0a 20 20 2a 2a 20 72 65 71 75 65  y the.  ** reque
10c50 73 74 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  st.  In this cas
10c60 65 2c 20 73 65 74 20 74 68 65 20 76 61 6c 75 65  e, set the value
10c70 20 4e 55 4c 4c 20 6f 72 20 74 6f 20 50 34 20 69   NULL or to P4 i
10c80 66 20 50 34 20 69 73 0a 20 20 2a 2a 20 61 20 70  f P4 is.  ** a p
10c90 6f 69 6e 74 65 72 20 74 6f 20 61 20 4d 65 6d 20  ointer to a Mem 
10ca0 6f 62 6a 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 69  object..  */.  i
10cb0 66 28 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 29  f( aOffset[p2] )
10cc0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  {.    assert( rc
10cd0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  ==SQLITE_OK );. 
10ce0 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20     if( zRec ){. 
10cf0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10d00 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e  MemReleaseExtern
10d10 61 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20  al(pDest);.     
10d20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
10d30 61 6c 47 65 74 28 28 75 38 20 2a 29 26 7a 52 65  alGet((u8 *)&zRe
10d40 63 5b 61 4f 66 66 73 65 74 5b 70 32 5d 5d 2c 20  c[aOffset[p2]], 
10d50 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65 73 74  aType[p2], pDest
10d60 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
10d70 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65      len = sqlite
10d80 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
10d90 65 6e 28 61 54 79 70 65 5b 70 32 5d 29 3b 0a 20  en(aType[p2]);. 
10da0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10db0 4d 65 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70  MemMove(&sMem, p
10dc0 44 65 73 74 29 3b 0a 20 20 20 20 20 20 72 63 20  Dest);.      rc 
10dd0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
10de0 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c  FromBtree(pCrsr,
10df0 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65   aOffset[p2], le
10e00 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20  n, pC->isIndex, 
10e10 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66  &sMem);.      if
10e20 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
10e30 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
10e40 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
10e50 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61       }.      zDa
10e60 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20  ta = sMem.z;.   
10e70 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
10e80 72 69 61 6c 47 65 74 28 28 75 38 2a 29 7a 44 61  rialGet((u8*)zDa
10e90 74 61 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70  ta, aType[p2], p
10ea0 44 65 73 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20  Dest);.    }.   
10eb0 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e   pDest->enc = en
10ec0 63 6f 64 69 6e 67 3b 0a 20 20 7d 65 6c 73 65 7b  coding;.  }else{
10ed0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  .    if( pOp->p4
10ee0 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a  type==P4_MEM ){.
10ef0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10f00 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
10f10 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70  pDest, pOp->p4.p
10f20 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29  Mem, MEM_Static)
10f30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
10f40 20 20 20 61 73 73 65 72 74 28 20 70 44 65 73 74     assert( pDest
10f50 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c  ->flags&MEM_Null
10f60 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20   );.    }.  }.. 
10f70 20 2f 2a 20 49 66 20 77 65 20 64 79 6e 61 6d 69   /* If we dynami
10f80 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
10f90 73 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68  space to hold th
10fa0 65 20 64 61 74 61 20 28 69 6e 20 74 68 65 0a 20  e data (in the. 
10fb0 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d   ** sqlite3VdbeM
10fc0 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 63 61  emFromBtree() ca
10fd0 6c 6c 20 61 62 6f 76 65 29 20 74 68 65 6e 20 74  ll above) then t
10fe0 72 61 6e 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20  ransfer control 
10ff0 6f 66 20 74 68 61 74 0a 20 20 2a 2a 20 64 79 6e  of that.  ** dyn
11000 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
11010 65 64 20 73 70 61 63 65 20 6f 76 65 72 20 74 6f  ed space over to
11020 20 74 68 65 20 70 44 65 73 74 20 73 74 72 75 63   the pDest struc
11030 74 75 72 65 2e 0a 20 20 2a 2a 20 54 68 69 73 20  ture..  ** This 
11040 70 72 65 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72  prevents a memor
11050 79 20 63 6f 70 79 2e 0a 20 20 2a 2f 0a 20 20 69  y copy..  */.  i
11060 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20  f( sMem.zMalloc 
11070 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  ){.    assert( s
11080 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c  Mem.z==sMem.zMal
11090 6c 6f 63 20 29 3b 0a 20 20 20 20 61 73 73 65 72  loc );.    asser
110a0 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67  t( !(pDest->flag
110b0 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a  s & MEM_Dyn) );.
110c0 20 20 20 20 61 73 73 65 72 74 28 20 21 28 70 44      assert( !(pD
110d0 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  est->flags & (ME
110e0 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 29  M_Blob|MEM_Str))
110f0 20 7c 7c 20 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d   || pDest->z==sM
11100 65 6d 2e 7a 20 29 3b 0a 20 20 20 20 70 44 65 73  em.z );.    pDes
11110 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45  t->flags &= ~(ME
11120 4d 5f 45 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74  M_Ephem|MEM_Stat
11130 69 63 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  ic);.    pDest->
11140 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72  flags |= MEM_Ter
11150 6d 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 20  m;.    pDest->z 
11160 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 70 44  = sMem.z;.    pD
11170 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73  est->zMalloc = s
11180 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 7d  Mem.zMalloc;.  }
11190 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
111a0 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
111b0 61 62 6c 65 28 70 44 65 73 74 29 3b 0a 0a 6f 70  able(pDest);..op
111c0 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55  _column_out:.  U
111d0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
111e0 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47  ZE(pDest);.  REG
111f0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
11200 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62  >p3, pDest);.  b
11210 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
11220 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20  de: Affinity P1 
11230 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
11240 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73  Apply affinities
11250 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50   to a range of P
11260 32 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  2 registers star
11270 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a  ting with P1..**
11280 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72 69  .** P4 is a stri
11290 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
112a0 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54  aracters long. T
112b0 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72  he nth character
112c0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
112d0 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
112e0 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
112f0 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
11300 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a  sed for the nth.
11310 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  ** memory cell i
11320 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a  n the range..*/.
11330 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79  case OP_Affinity
11340 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 41 66 66  : {.  char *zAff
11350 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
11360 7a 3b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30  z;.  Mem *pData0
11370 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
11380 3e 70 31 5d 3b 0a 20 20 4d 65 6d 20 2a 70 4c 61  >p1];.  Mem *pLa
11390 73 74 20 3d 20 26 70 44 61 74 61 30 5b 70 4f 70  st = &pData0[pOp
113a0 2d 3e 70 32 2d 31 5d 3b 0a 20 20 4d 65 6d 20 2a  ->p2-1];.  Mem *
113b0 70 52 65 63 3b 0a 0a 20 20 66 6f 72 28 70 52 65  pRec;..  for(pRe
113c0 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d  c=pData0; pRec<=
113d0 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a  pLast; pRec++){.
113e0 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70      ExpandBlob(p
113f0 52 65 63 29 3b 0a 20 20 20 20 61 70 70 6c 79 41  Rec);.    applyA
11400 66 66 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41  ffinity(pRec, zA
11410 66 66 69 6e 69 74 79 5b 70 52 65 63 2d 70 44 61  ffinity[pRec-pDa
11420 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  ta0], encoding);
11430 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
11440 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65  ./* Opcode: Make
11450 52 65 63 6f 72 64 20 50 31 20 50 32 20 50 33 20  Record P1 P2 P3 
11460 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65  P4 *.**.** Conve
11470 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73 20  rt P2 registers 
11480 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
11490 31 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20  1 into a single 
114a0 65 6e 74 72 79 0a 2a 2a 20 73 75 69 74 61 62 6c  entry.** suitabl
114b0 65 20 66 6f 72 20 75 73 65 20 61 73 20 61 20 64  e for use as a d
114c0 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20  ata record in a 
114d0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
114e0 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e  r as a key.** in
114f0 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20   an index.  The 
11500 64 65 74 61 69 6c 73 20 6f 66 20 74 68 65 20 66  details of the f
11510 6f 72 6d 61 74 20 61 72 65 20 69 72 72 65 6c 65  ormat are irrele
11520 76 61 6e 74 20 61 73 20 6c 6f 6e 67 20 61 73 0a  vant as long as.
11530 2a 2a 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  ** the OP_Column
11540 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f   opcode can deco
11550 64 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61  de the record la
11560 74 65 72 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f  ter..** Refer to
11570 20 73 6f 75 72 63 65 20 63 6f 64 65 20 63 6f 6d   source code com
11580 6d 65 6e 74 73 20 66 6f 72 20 74 68 65 20 64 65  ments for the de
11590 74 61 69 6c 73 20 6f 66 20 74 68 65 20 72 65 63  tails of the rec
115a0 6f 72 64 0a 2a 2a 20 66 6f 72 6d 61 74 2e 0a 2a  ord.** format..*
115b0 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
115c0 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
115d0 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
115e0 6e 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61  ng.  The nth cha
115f0 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a  racter of the.**
11600 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65   string indicate
11610 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66  s the column aff
11620 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c  inity that shoul
11630 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  d be used for th
11640 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f  e nth.** field o
11650 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e  f the index key.
11660 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69  .**.** The mappi
11670 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65  ng from characte
11680 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73  r to affinity is
11690 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51   given by the SQ
116a0 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63  LITE_AFF_.** mac
116b0 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73  ros defined in s
116c0 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a  qliteInt.h..**.*
116d0 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20  * If P4 is NULL 
116e0 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66  then all index f
116f0 69 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61  ields have the a
11700 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f  ffinity NONE..*/
11710 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63  .case OP_MakeRec
11720 6f 72 64 3a 20 7b 0a 20 20 2f 2a 20 41 73 73 75  ord: {.  /* Assu
11730 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
11740 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
11750 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
11760 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
11770 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
11780 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
11790 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
117a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
117b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
117c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
117d0 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
117e0 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
117f0 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
11800 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
11810 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
11820 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
11830 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11840 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11850 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11860 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
11870 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
11880 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
11890 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
118a0 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
118b0 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
118c0 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a  nd so froth..  *
118d0 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
118e0 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
118f0 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
11900 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
11910 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
11920 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
11930 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
11940 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
11950 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
11960 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
11970 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
11980 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
11990 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
119a0 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
119b0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
119c0 61 30 2e 0a 20 20 2a 2f 0a 20 20 75 38 20 2a 7a  a0..  */.  u8 *z
119d0 4e 65 77 52 65 63 6f 72 64 3b 20 20 20 20 20 20  NewRecord;      
119e0 20 20 2f 2a 20 41 20 62 75 66 66 65 72 20 74 6f    /* A buffer to
119f0 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 66   hold the data f
11a00 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  or the new recor
11a10 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63  d */.  Mem *pRec
11a20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11a30 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   The new record 
11a40 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61 20 3d  */.  u64 nData =
11a50 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e   0;         /* N
11a60 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
11a70 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a  f data space */.
11a80 20 20 69 6e 74 20 6e 48 64 72 20 3d 20 30 3b 20    int nHdr = 0; 
11a90 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11aa0 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68  er of bytes of h
11ab0 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20  eader space */. 
11ac0 20 69 36 34 20 6e 42 79 74 65 20 3d 20 30 3b 20   i64 nByte = 0; 
11ad0 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20          /* Data 
11ae0 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66  space required f
11af0 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a  or this record *
11b00 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 20 3d 20  /.  int nZero = 
11b10 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  0;         /* Nu
11b20 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74  mber of zero byt
11b30 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  es at the end of
11b40 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
11b50 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20   int nVarint;   
11b60 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
11b70 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20  r of bytes in a 
11b80 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20  varint */.  u32 
11b90 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20  serial_type;    
11ba0 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64     /* Type field
11bb0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61   */.  Mem *pData
11bc0 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  0;           /* 
11bd0 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62  First field to b
11be0 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20  e combined into 
11bf0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
11c00 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20  Mem *pLast;     
11c10 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66         /* Last f
11c20 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f  ield of the reco
11c30 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65  rd */.  int nFie
11c40 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ld;            /
11c50 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
11c60 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ds in the record
11c70 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66   */.  char *zAff
11c80 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20  inity;       /* 
11c90 54 68 65 20 61 66 66 69 6e 69 74 79 20 73 74 72  The affinity str
11ca0 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f  ing for the reco
11cb0 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65  rd */.  int file
11cc0 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f  _format;       /
11cd0 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f  * File format to
11ce0 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e   use for encodin
11cf0 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20  g */.  int i;   
11d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11d10 20 53 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a   Space used in z
11d20 4e 65 77 52 65 63 6f 72 64 5b 5d 20 2a 2f 0a 0a  NewRecord[] */..
11d30 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
11d40 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20  p1;.  zAffinity 
11d50 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61  = pOp->p4.z;.  a
11d60 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20  ssert( nField>0 
11d70 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  && pOp->p2>0 && 
11d80 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d  pOp->p2+nField<=
11d90 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 70  p->nMem+1 );.  p
11da0 44 61 74 61 30 20 3d 20 26 70 2d 3e 61 4d 65 6d  Data0 = &p->aMem
11db0 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
11dc0 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
11dd0 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
11de0 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
11df0 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
11e00 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
11e10 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72  ;..  /* Loop thr
11e20 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74  ough the element
11e30 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65  s that will make
11e40 20 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74   up the record t
11e50 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75  o figure.  ** ou
11e60 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65  t how much space
11e70 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
11e80 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e   the new record.
11e90 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 70 52 65 63  .  */.  for(pRec
11ea0 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70  =pData0; pRec<=p
11eb0 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20  Last; pRec++){. 
11ec0 20 20 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 20 20     int len;.    
11ed0 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b  if( zAffinity ){
11ee0 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69  .      applyAffi
11ef0 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66 66 69  nity(pRec, zAffi
11f00 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74 61 30  nity[pRec-pData0
11f10 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ], encoding);.  
11f20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 52 65 63    }.    if( pRec
11f30 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f  ->flags&MEM_Zero
11f40 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30 20 29 7b   && pRec->n>0 ){
11f50 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
11f60 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
11f70 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20  pRec);.    }.   
11f80 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73   serial_type = s
11f90 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
11fa0 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f  Type(pRec, file_
11fb0 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65 6e  format);.    len
11fc0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
11fd0 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72 69  rialTypeLen(seri
11fe0 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 6e 44  al_type);.    nD
11ff0 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20  ata += len;.    
12000 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 56  nHdr += sqlite3V
12010 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f  arintLen(serial_
12020 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70  type);.    if( p
12030 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
12040 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 2f  _Zero ){.      /
12050 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a 65 72 6f  * Only pure zero
12060 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73 20 63 61  -filled BLOBs ca
12070 6e 20 62 65 20 69 6e 70 75 74 20 74 6f 20 74 68  n be input to th
12080 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20 20 20 20  is Opcode..     
12090 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74 20 61 6c   ** We do not al
120a0 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74 68 20 61  low blobs with a
120b0 20 70 72 65 66 69 78 20 61 6e 64 20 61 20 7a 65   prefix and a ze
120c0 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69 6c 2e 20  ro-filled tail. 
120d0 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b  */.      nZero +
120e0 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b  = pRec->u.nZero;
120f0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6c  .    }else if( l
12100 65 6e 20 29 7b 0a 20 20 20 20 20 20 6e 5a 65 72  en ){.      nZer
12110 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  o = 0;.    }.  }
12120 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20 69  ..  /* Add the i
12130 6e 69 74 69 61 6c 20 68 65 61 64 65 72 20 76 61  nitial header va
12140 72 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20 74  rint and total t
12150 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20 6e 48 64  he size */.  nHd
12160 72 20 2b 3d 20 6e 56 61 72 69 6e 74 20 3d 20 73  r += nVarint = s
12170 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
12180 6e 48 64 72 29 3b 0a 20 20 69 66 28 20 6e 56 61  nHdr);.  if( nVa
12190 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69  rint<sqlite3Vari
121a0 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 7b 0a 20  ntLen(nHdr) ){. 
121b0 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20     nHdr++;.  }. 
121c0 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44   nByte = nHdr+nD
121d0 61 74 61 2d 6e 5a 65 72 6f 3b 0a 20 20 69 66 28  ata-nZero;.  if(
121e0 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69   nByte>db->aLimi
121f0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
12200 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
12210 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
12220 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
12230 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  the output regis
12240 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72  ter has a buffer
12250 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f   large enough to
12260 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65   store .  ** the
12270 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65   new record. The
12280 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
12290 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f   (pOp->p3) is no
122a0 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a  t allowed to.  *
122b0 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  * be one of the 
122c0 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
122d0 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c  (because the fol
122e0 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20  lowing call to. 
122f0 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d   ** sqlite3VdbeM
12300 65 6d 47 72 6f 77 28 29 20 63 6f 75 6c 64 20 63  emGrow() could c
12310 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65  lobber the value
12320 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73   before it is us
12330 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ed)..  */.  asse
12340 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d  rt( pOp->p3<pOp-
12350 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d  >p1 || pOp->p3>=
12360 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20  pOp->p1+pOp->p2 
12370 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  );.  pOut = &p->
12380 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
12390 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
123a0 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69  MemGrow(pOut, (i
123b0 6e 74 29 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a  nt)nByte, 0) ){.
123c0 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
123d0 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72  .  }.  zNewRecor
123e0 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e  d = (u8 *)pOut->
123f0 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74  z;..  /* Write t
12400 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
12410 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a   = putVarint32(z
12420 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29  NewRecord, nHdr)
12430 3b 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61  ;.  for(pRec=pDa
12440 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74  ta0; pRec<=pLast
12450 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 73  ; pRec++){.    s
12460 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c  erial_type = sql
12470 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
12480 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f  pe(pRec, file_fo
12490 72 6d 61 74 29 3b 0a 20 20 20 20 69 20 2b 3d 20  rmat);.    i += 
124a0 70 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65  putVarint32(&zNe
124b0 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69  wRecord[i], seri
124c0 61 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20 2f  al_type);      /
124d0 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f  * serial type */
124e0 0a 20 20 7d 0a 20 20 66 6f 72 28 70 52 65 63 3d  .  }.  for(pRec=
124f0 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c  pData0; pRec<=pL
12500 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 20 20 2f  ast; pRec++){  /
12510 2a 20 73 65 72 69 61 6c 20 64 61 74 61 20 2a 2f  * serial data */
12520 0a 20 20 20 20 69 20 2b 3d 20 73 71 6c 69 74 65  .    i += sqlite
12530 33 56 64 62 65 53 65 72 69 61 6c 50 75 74 28 26  3VdbeSerialPut(&
12540 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 28  zNewRecord[i], (
12550 69 6e 74 29 28 6e 42 79 74 65 2d 69 29 2c 20 70  int)(nByte-i), p
12560 52 65 63 2c 66 69 6c 65 5f 66 6f 72 6d 61 74 29  Rec,file_format)
12570 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
12580 69 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61  i==nByte );..  a
12590 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
125a0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
125b0 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  nMem );.  pOut->
125c0 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
125d0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
125e0 4d 45 4d 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44  MEM_Blob | MEM_D
125f0 79 6e 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c  yn;.  pOut->xDel
12600 20 3d 20 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72   = 0;.  if( nZer
12610 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  o ){.    pOut->u
12620 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a  .nZero = nZero;.
12630 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
12640 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d  |= MEM_Zero;.  }
12650 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53  .  pOut->enc = S
12660 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20  QLITE_UTF8;  /* 
12670 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62  In case the blob
12680 20 69 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74   is ever convert
12690 65 64 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20  ed to text */.  
126a0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
126b0 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20  Op->p3, pOut);. 
126c0 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
126d0 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
126e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
126f0 65 3a 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a  e: Count P1 P2 *
12700 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65   * *.**.** Store
12710 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
12720 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67  ntries (an integ
12730 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65  er value) in the
12740 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
12750 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75  .** opened by cu
12760 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73  rsor P1 in regis
12770 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65  ter P2.*/.#ifnde
12780 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54  f SQLITE_OMIT_BT
12790 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50  REECOUNT.case OP
127a0 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  _Count: {       
127b0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
127c0 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45  ease */.  i64 nE
127d0 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72  ntry;.  BtCursor
127e0 20 2a 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43   *pCrsr = p->apC
127f0 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75  sr[pOp->p1]->pCu
12800 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73  rsor;.  if( pCrs
12810 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  r ){.    rc = sq
12820 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28  lite3BtreeCount(
12830 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b  pCrsr, &nEntry);
12840 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 45  .  }else{.    nE
12850 6e 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ntry = 0;.  }.  
12860 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
12870 4d 5f 49 6e 74 3b 0a 20 20 70 4f 75 74 2d 3e 75  M_Int;.  pOut->u
12880 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62  .i = nEntry;.  b
12890 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
128a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 61 74 65  /* Opcode: State
128b0 6d 65 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  ment P1 * * * *.
128c0 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 6e 20 69  **.** Begin an i
128d0 6e 64 69 76 69 64 75 61 6c 20 73 74 61 74 65 6d  ndividual statem
128e0 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
128f0 77 68 69 63 68 20 69 73 20 70 61 72 74 20 6f 66  which is part of
12900 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 74 72 61   a larger.** tra
12910 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 69 73 20  nsaction.  This 
12920 69 73 20 6e 65 65 64 65 64 20 73 6f 20 74 68 61  is needed so tha
12930 74 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  t the statement.
12940 2a 2a 20 63 61 6e 20 62 65 20 72 6f 6c 6c 65 64  ** can be rolled
12950 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65   back after an e
12960 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76  rror without hav
12970 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b  ing to roll back
12980 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74   the.** entire t
12990 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 65  ransaction.  The
129a0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
129b0 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 75 74 6f  action will auto
129c0 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 63 6f 6d  matically.** com
129d0 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44 42  mit when the VDB
129e0 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49  E halts..**.** I
129f0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
12a00 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72  onnection is cur
12a10 72 65 6e 74 6c 79 20 69 6e 20 61 75 74 6f 63 6f  rently in autoco
12a20 6d 6d 69 74 20 6d 6f 64 65 20 28 74 68 61 74 20  mmit mode (that 
12a30 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 2c 20 69  .** is to say, i
12a40 66 20 69 74 20 69 73 20 69 6e 20 62 65 74 77 65  f it is in betwe
12a50 65 6e 20 42 45 47 49 4e 20 61 6e 64 20 43 4f 4d  en BEGIN and COM
12a60 4d 49 54 29 0a 2a 2a 20 61 6e 64 20 69 66 20 74  MIT).** and if t
12a70 68 65 72 65 20 61 72 65 20 6e 6f 20 6f 74 68 65  here are no othe
12a80 72 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  r active stateme
12a90 6e 74 73 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  nts on the same 
12aa0 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
12ab0 65 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 69  ection, then thi
12ac0 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 61  s operation is a
12ad0 20 6e 6f 2d 6f 70 2e 20 20 4e 6f 20 73 74 61 74   no-op.  No stat
12ae0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
12af0 6e 0a 2a 2a 20 69 73 20 6e 65 65 64 65 64 20 73  n.** is needed s
12b00 69 6e 63 65 20 61 6e 79 20 65 72 72 6f 72 20 63  ince any error c
12b10 61 6e 20 75 73 65 20 74 68 65 20 6e 6f 72 6d 61  an use the norma
12b20 6c 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65  l ROLLBACK proce
12b30 73 73 20 74 6f 0a 2a 2a 20 75 6e 64 6f 20 63 68  ss to.** undo ch
12b40 61 6e 67 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  anges..**.** If 
12b50 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
12b60 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
12b70 65 64 2c 20 74 68 65 6e 20 61 20 73 74 61 74 65  ed, then a state
12b80 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 20 66 69 6c  ment journal fil
12b90 65 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 61 6c 6c  e.** will be all
12ba0 6f 63 61 74 65 64 20 61 6e 64 20 69 6e 69 74 69  ocated and initi
12bb0 61 6c 69 7a 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  alized..**.** Th
12bc0 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 62  e statement is b
12bd0 65 67 75 6e 20 6f 6e 20 74 68 65 20 64 61 74 61  egun on the data
12be0 62 61 73 65 20 66 69 6c 65 20 77 69 74 68 20 69  base file with i
12bf0 6e 64 65 78 20 50 31 2e 20 20 54 68 65 20 6d 61  ndex P1.  The ma
12c00 69 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66  in.** database f
12c10 69 6c 65 20 68 61 73 20 61 6e 20 69 6e 64 65 78  ile has an index
12c20 20 6f 66 20 30 20 61 6e 64 20 74 68 65 20 66 69   of 0 and the fi
12c30 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70  le used for temp
12c40 6f 72 61 72 79 20 74 61 62 6c 65 73 0a 2a 2a 20  orary tables.** 
12c50 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20  has an index of 
12c60 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  1..*/.case OP_St
12c70 61 74 65 6d 65 6e 74 3a 20 7b 0a 20 20 69 66 28  atement: {.  if(
12c80 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
12c90 3d 30 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65  =0 || db->active
12ca0 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20  VdbeCnt>1 ){.   
12cb0 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31   int i = pOp->p1
12cc0 3b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74  ;.    Btree *pBt
12cd0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3e  ;.    assert( i>
12ce0 3d 30 20 26 26 20 69 3c 64 62 2d 3e 6e 44 62 20  =0 && i<db->nDb 
12cf0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  );.    assert( d
12d00 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 21 3d 30  b->aDb[i].pBt!=0
12d10 20 29 3b 0a 20 20 20 20 70 42 74 20 3d 20 64 62   );.    pBt = db
12d20 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20  ->aDb[i].pBt;.  
12d30 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
12d40 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
12d50 70 42 74 29 20 29 3b 0a 20 20 20 20 61 73 73 65  pBt) );.    asse
12d60 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
12d70 6b 20 26 20 28 31 3c 3c 69 29 29 21 3d 30 20 29  k & (1<<i))!=0 )
12d80 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74  ;.    if( p->iSt
12d90 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20  atement==0 ){.  
12da0 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
12db0 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26  nStatement>=0 &&
12dc0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e   db->nSavepoint>
12dd0 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  =0 );.      db->
12de0 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20  nStatement++; . 
12df0 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d 65       p->iStateme
12e00 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f  nt = db->nSavepo
12e10 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65  int + db->nState
12e20 6d 65 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ment;.    }.    
12e30 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
12e40 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20  eBeginStmt(pBt, 
12e50 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a  p->iStatement);.
12e60 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12e70 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70  /* Opcode: Savep
12e80 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a  oint P1 * * P4 *
12e90 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c  .**.** Open, rel
12ea0 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b  ease or rollback
12eb0 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e   the savepoint n
12ec0 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65  amed by paramete
12ed0 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a  r P4, depending.
12ee0 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20  ** on the value 
12ef0 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61  of P1. To open a
12f00 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20   new savepoint, 
12f10 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73  P1==0. To releas
12f20 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a  e (commit) an.**
12f30 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
12f40 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74  int, P1==1, or t
12f50 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78  o rollback an ex
12f60 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  isting savepoint
12f70 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20   P1==2..*/.case 
12f80 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a  OP_Savepoint: {.
12f90 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e    int p1 = pOp->
12fa0 70 31 3b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  p1;.  char *zNam
12fb0 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 20 20  e = pOp->p4.z;  
12fc0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
12fd0 66 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 0a  f savepoint */..
12fe0 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
12ff0 20 74 68 65 20 70 31 20 70 61 72 61 6d 65 74 65   the p1 paramete
13000 72 20 69 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f  r is valid. Also
13010 20 74 68 61 74 20 69 66 20 74 68 65 72 65 20 69   that if there i
13020 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74  s no open.  ** t
13030 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e  ransaction, then
13040 20 74 68 65 72 65 20 63 61 6e 6e 6f 74 20 62 65   there cannot be
13050 20 61 6e 79 20 73 61 76 65 70 6f 69 6e 74 73 2e   any savepoints.
13060 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28   .  */.  assert(
13070 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d   db->pSavepoint=
13080 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f  =0 || db->autoCo
13090 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  mmit==0 );.  ass
130a0 65 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49  ert( p1==SAVEPOI
130b0 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41  NT_BEGIN||p1==SA
130c0 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c  VEPOINT_RELEASE|
130d0 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52  |p1==SAVEPOINT_R
130e0 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73 73  OLLBACK );.  ass
130f0 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ert( db->pSavepo
13100 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61  int || db->isTra
13110 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
13120 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
13130 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74  ( checkSavepoint
13140 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 0a 20 20  Count(db) );..  
13150 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
13160 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69  T_BEGIN ){.    i
13170 66 28 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65  f( db->writeVdbe
13180 43 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f  Cnt>0 ){.      /
13190 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  * A new savepoin
131a0 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61  t cannot be crea
131b0 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65  ted if there are
131c0 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a 20   active write . 
131d0 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e       ** statemen
131e0 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65  ts (i.e. open re
131f0 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65  ad/write increme
13200 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65  ntal blob handle
13210 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  s)..      */.   
13220 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
13230 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
13240 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65   db, "cannot ope
13250 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a  n savepoint - ".
13260 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
13270 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
13280 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20  ess");.      rc 
13290 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
132a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
132b0 69 6e 74 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69  int nName = sqli
132c0 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d  te3Strlen30(zNam
132d0 65 29 3b 0a 20 20 20 20 20 20 53 61 76 65 70 6f  e);.      Savepo
132e0 69 6e 74 20 2a 70 4e 65 77 3b 0a 0a 20 20 20 20  int *pNew;..    
132f0 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65    /* Create a ne
13300 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75  w savepoint stru
13310 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20  cture. */.      
13320 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62  pNew = sqlite3Db
13330 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69  MallocRaw(db, si
13340 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b  zeof(Savepoint)+
13350 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20  nName+1);.      
13360 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20  if( pNew ){.    
13370 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20      pNew->zName 
13380 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b  = (char *)&pNew[
13390 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63  1];.        memc
133a0 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20  py(pNew->zName, 
133b0 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b  zName, nName+1);
133c0 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a  .    .        /*
133d0 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
133e0 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
133f0 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73  , then mark this
13400 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20   as a special.  
13410 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61        ** "transa
13420 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22  ction savepoint"
13430 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
13440 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
13450 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  ){.          db-
13460 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b  >autoCommit = 0;
13470 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69  .          db->i
13480 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
13490 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20  point = 1;.     
134a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
134b0 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
134c0 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt++;.        }.
134d0 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20      .        /* 
134e0 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76  Link the new sav
134f0 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20  epoint into the 
13500 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27  database handle'
13510 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20  s list. */.     
13520 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d     pNew->pNext =
13530 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
13540 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
13550 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a  vepoint = pNew;.
13560 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
13570 7d 65 6c 73 65 7b 0a 20 20 20 20 53 61 76 65 70  }else{.    Savep
13580 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
13590 3b 0a 20 20 20 20 69 6e 74 20 69 53 61 76 65 70  ;.    int iSavep
135a0 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f  oint = 0;..    /
135b0 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64  * Find the named
135c0 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74   savepoint. If t
135d0 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20  here is no such 
135e0 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20  savepoint, then 
135f0 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72  an.    ** an err
13600 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74  or is returned t
13610 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a  o the user.  */.
13620 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70      for(.      p
13630 53 61 76 65 70 6f 69 6e 74 3d 64 62 2d 3e 70 53  Savepoint=db->pS
13640 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20  avepoint; .     
13650 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73   pSavepoint && s
13660 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53  qlite3StrICmp(pS
13670 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c  avepoint->zName,
13680 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70   zName);.      p
13690 53 61 76 65 70 6f 69 6e 74 3d 70 53 61 76 65 70  Savepoint=pSavep
136a0 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20  oint->pNext.    
136b0 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f  ){.      iSavepo
136c0 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  int++;.    }.   
136d0 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74   if( !pSavepoint
136e0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
136f0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
13700 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20  ErrMsg, db, "no 
13710 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20  such savepoint: 
13720 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  %s", zName);.   
13730 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
13740 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20  RROR;.    }else 
13750 69 66 28 20 0a 20 20 20 20 20 20 20 20 64 62 2d  if( .        db-
13760 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20  >writeVdbeCnt>0 
13770 7c 7c 20 28 70 31 3d 3d 53 41 56 45 50 4f 49 4e  || (p1==SAVEPOIN
13780 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 64 62  T_ROLLBACK && db
13790 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e  ->activeVdbeCnt>
137a0 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  1) .    ){.     
137b0 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f   /* It is not po
137c0 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73  ssible to releas
137d0 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76  e (commit) a sav
137e0 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20  epoint if there 
137f0 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63  are .      ** ac
13800 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65  tive write state
13810 6d 65 6e 74 73 2e 20 49 74 20 69 73 20 6e 6f 74  ments. It is not
13820 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 6f 6c   possible to rol
13830 6c 62 61 63 6b 20 61 20 73 61 76 65 70 6f 69 6e  lback a savepoin
13840 74 0a 20 20 20 20 20 20 2a 2a 20 69 66 20 74 68  t.      ** if th
13850 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69  ere are any acti
13860 76 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 74  ve statements at
13870 20 61 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20   all..      */. 
13880 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
13890 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
138a0 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20  g, db, .        
138b0 22 63 61 6e 6e 6f 74 20 25 73 20 73 61 76 65 70  "cannot %s savep
138c0 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65  oint - SQL state
138d0 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
138e0 73 22 2c 0a 20 20 20 20 20 20 20 20 28 70 31 3d  s",.        (p1=
138f0 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
13900 41 43 4b 20 3f 20 22 72 6f 6c 6c 62 61 63 6b 22  ACK ? "rollback"
13910 3a 20 22 72 65 6c 65 61 73 65 22 29 0a 20 20 20  : "release").   
13920 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d     );.      rc =
13930 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
13940 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20    }else{..      
13950 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65  /* Determine whe
13960 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73  ther or not this
13970 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
13980 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  n savepoint. If 
13990 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64  so,.      ** and
139a0 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41   this is a RELEA
139b0 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e  SE command, then
139c0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
139d0 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20  nsaction .      
139e0 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e  ** is committed.
139f0 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20   .      */.     
13a00 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69   int isTransacti
13a10 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  on = pSavepoint-
13a20 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d  >pNext==0 && db-
13a30 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
13a40 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69  vepoint;.      i
13a50 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  f( isTransaction
13a60 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   && p1==SAVEPOIN
13a70 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
13a80 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
13a90 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  mit = 1;.       
13aa0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
13ab0 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
13ac0 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
13ad0 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20    p->pc = pc;.  
13ae0 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
13af0 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
13b00 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
13b10 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
13b20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76            goto v
13b30 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
13b40 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62      }.        db
13b50 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
13b60 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20  avepoint = 0;.  
13b70 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63        rc = p->rc
13b80 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
13b90 20 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20         int ii;. 
13ba0 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e         iSavepoin
13bb0 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
13bc0 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20  nt - iSavepoint 
13bd0 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  - 1;.        for
13be0 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44  (ii=0; ii<db->nD
13bf0 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  b; ii++){.      
13c00 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
13c10 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64  BtreeSavepoint(d
13c20 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20  b->aDb[ii].pBt, 
13c30 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b  p1, iSavepoint);
13c40 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72  .          if( r
13c50 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
13c60 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f              goto
13c70 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
13c80 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ror;.          }
13c90 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
13ca0 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50     if( p1==SAVEP
13cb0 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26  OINT_ROLLBACK &&
13cc0 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49   (db->flags&SQLI
13cd0 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
13ce0 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
13cf0 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
13d00 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
13d10 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20  s(db);.         
13d20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74   sqlite3ResetInt
13d30 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20  ernalSchema(db, 
13d40 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  0);.        }.  
13d50 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
13d60 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  * Regardless of 
13d70 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
13d80 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c  a RELEASE or ROL
13d90 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61  LBACK, destroy a
13da0 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ll .      ** sav
13db0 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69  epoints nested i
13dc0 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73 61 76  nside of the sav
13dd0 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
13de0 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20  rated on. */.   
13df0 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53     while( db->pS
13e00 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70  avepoint!=pSavep
13e10 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20  oint ){.        
13e20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 20  Savepoint *pTmp 
13e30 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
13e40 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
13e50 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d  avepoint = pTmp-
13e60 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20  >pNext;.        
13e70 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
13e80 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20  , pTmp);.       
13e90 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
13ea0 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  -;.      }..    
13eb0 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20    /* If it is a 
13ec0 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65  RELEASE, then de
13ed0 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f  stroy the savepo
13ee0 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
13ef0 65 64 20 6f 6e 20 74 6f 6f 20 2a 2f 0a 20 20 20  ed on too */.   
13f00 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50     if( p1==SAVEP
13f10 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
13f20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
13f30 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e  pSavepoint==db->
13f40 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20  pSavepoint );.  
13f50 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
13f60 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e  oint = pSavepoin
13f70 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  t->pNext;.      
13f80 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
13f90 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b  db, pSavepoint);
13fa0 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73  .        if( !is
13fb0 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20  Transaction ){. 
13fc0 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61           db->nSa
13fd0 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20  vepoint--;.     
13fe0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
13ff0 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b   }.  }..  break;
14000 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
14010 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20  utoCommit P1 P2 
14020 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  * * *.**.** Set 
14030 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74  the database aut
14040 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f  o-commit flag to
14050 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66   P1 (1 or 0). If
14060 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c   P2 is true, rol
14070 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75  l.** back any cu
14080 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62  rrently active b
14090 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tree transaction
140a0 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  s. If there are 
140b0 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d  any active.** VM
140c0 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68  s (apart from th
140d0 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20  is one), then a 
140e0 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20  ROLLBACK fails. 
140f0 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20   A COMMIT fails 
14100 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20  if.** there are 
14110 61 63 74 69 76 65 20 77 72 69 74 69 6e 67 20 56  active writing V
14120 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73  Ms or active VMs
14130 20 74 68 61 74 20 75 73 65 20 73 68 61 72 65 64   that use shared
14140 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   cache..**.** Th
14150 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
14160 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20  auses the VM to 
14170 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  halt..*/.case OP
14180 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20  _AutoCommit: {. 
14190 20 69 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f   int desiredAuto
141a0 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31  Commit = pOp->p1
141b0 3b 0a 20 20 69 6e 74 20 72 6f 6c 6c 62 61 63 6b  ;.  int rollback
141c0 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 6e   = pOp->p2;.  in
141d0 74 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73  t turnOnAC = des
141e0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26  iredAutoCommit &
141f0 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  & !db->autoCommi
14200 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 64 65  t;..  assert( de
14210 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
14220 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74  =1 || desiredAut
14230 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20  oCommit==0 );.  
14240 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
14250 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20  utoCommit==1 || 
14260 72 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 0a  rollback==0 );..
14270 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 63    assert( db->ac
14280 74 69 76 65 56 64 62 65 43 6e 74 3e 30 20 29 3b  tiveVdbeCnt>0 );
14290 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68    /* At least th
142a0 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74  is one VM is act
142b0 69 76 65 20 2a 2f 0a 0a 20 20 69 66 28 20 74 75  ive */..  if( tu
142c0 72 6e 4f 6e 41 43 20 26 26 20 72 6f 6c 6c 62 61  rnOnAC && rollba
142d0 63 6b 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65  ck && db->active
142e0 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20  VdbeCnt>1 ){.   
142f0 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74   /* If this inst
14300 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  ruction implemen
14310 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e  ts a ROLLBACK an
14320 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 0a  d other VMs are.
14330 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e      ** still run
14340 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74 72 61 6e  ning, and a tran
14350 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
14360 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  e, return an err
14370 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20  or indicating.  
14380 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 74    ** that the ot
14390 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d  her VMs must com
143a0 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20  plete first. .  
143b0 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
143c0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
143d0 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e  rrMsg, db, "cann
143e0 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e  ot rollback tran
143f0 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20  saction - ".    
14400 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
14410 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
14420 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
14430 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
14440 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26   if( turnOnAC &&
14450 20 21 72 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62   !rollback && db
14460 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 31  ->writeVdbeCnt>1
14470 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
14480 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
14490 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d  mplements a COMM
144a0 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73  IT and other VMs
144b0 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20   are writing.   
144c0 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72   ** return an er
144d0 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74  ror indicating t
144e0 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d  hat the other VM
144f0 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20  s must complete 
14500 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20  first. .    */. 
14510 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
14520 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
14530 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d   db, "cannot com
14540 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  mit transaction 
14550 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c  - ".        "SQL
14560 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
14570 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72  rogress");.    r
14580 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
14590 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73  .  }else if( des
145a0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d  iredAutoCommit!=
145b0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
145c0 7b 0a 20 20 20 20 69 66 28 20 72 6f 6c 6c 62 61  {.    if( rollba
145d0 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  ck ){.      asse
145e0 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
145f0 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20  ommit==1 );.    
14600 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63    sqlite3Rollbac
14610 6b 41 6c 6c 28 64 62 29 3b 0a 20 20 20 20 20 20  kAll(db);.      
14620 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
14630 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   1;.    }else{. 
14640 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
14650 6d 69 74 20 3d 20 28 75 38 29 64 65 73 69 72 65  mit = (u8)desire
14660 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20  dAutoCommit;.   
14670 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
14680 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54  beHalt(p)==SQLIT
14690 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
146a0 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20    p->pc = pc;.  
146b0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
146c0 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65  mmit = (u8)(1-de
146d0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29  siredAutoCommit)
146e0 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20  ;.        p->rc 
146f0 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
14700 53 59 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  SY;.        goto
14710 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
14720 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
14730 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61  assert( db->nSta
14740 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20  tement==0 );.   
14750 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76   sqlite3CloseSav
14760 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20  epoints(db);.   
14770 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49   if( p->rc==SQLI
14780 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
14790 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b  c = SQLITE_DONE;
147a0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
147b0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
147c0 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67  ROR;.    }.    g
147d0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
147e0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
147f0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
14800 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a  p->zErrMsg, db,.
14810 20 20 20 20 20 20 20 20 28 21 64 65 73 69 72 65          (!desire
14820 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61  dAutoCommit)?"ca
14830 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61  nnot start a tra
14840 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20  nsaction within 
14850 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28  a transaction":(
14860 0a 20 20 20 20 20 20 20 20 28 72 6f 6c 6c 62 61  .        (rollba
14870 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  ck)?"cannot roll
14880 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61  back - no transa
14890 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
148a0 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
148b0 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d       "cannot com
148c0 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  mit - no transac
148d0 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29  tion is active")
148e0 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20  );.         .   
148f0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
14900 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  OR;.  }.  break;
14910 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  .}../* Opcode: T
14920 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32  ransaction P1 P2
14930 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67   * * *.**.** Beg
14940 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
14950 2e 20 20 54 68 65 20 74 72 61 6e 73 61 63 74 69  .  The transacti
14960 6f 6e 20 65 6e 64 73 20 77 68 65 6e 20 61 20 43  on ends when a C
14970 6f 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63  ommit or Rollbac
14980 6b 0a 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 65  k.** opcode is e
14990 6e 63 6f 75 6e 74 65 72 65 64 2e 20 20 44 65 70  ncountered.  Dep
149a0 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e  ending on the ON
149b0 20 43 4f 4e 46 4c 49 43 54 20 73 65 74 74 69 6e   CONFLICT settin
149c0 67 2c 20 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61  g, the.** transa
149d0 63 74 69 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f  ction might also
149e0 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
149f0 69 66 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65  if an error is e
14a00 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a  ncountered..**.*
14a10 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
14a20 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
14a30 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20  e file on which 
14a40 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
14a50 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20  is.** started.  
14a60 49 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d  Index 0 is the m
14a70 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
14a80 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73  e and index 1 is
14a90 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65   the.** file use
14aa0 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  d for temporary 
14ab0 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73  tables.  Indices
14ac0 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72   of 2 or more ar
14ad0 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74  e used for.** at
14ae0 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
14af0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73  ..**.** If P2 is
14b00 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
14b10 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
14b20 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20  ion is started. 
14b30 20 41 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b   A RESERVED lock
14b40 20 69 73 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20   is.** obtained 
14b50 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
14b60 66 69 6c 65 20 77 68 65 6e 20 61 20 77 72 69 74  file when a writ
14b70 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
14b80 20 73 74 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a   started.  No.**
14b90 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 63   other process c
14ba0 61 6e 20 73 74 61 72 74 20 61 6e 6f 74 68 65 72  an start another
14bb0 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
14bc0 6f 6e 20 77 68 69 6c 65 20 74 68 69 73 20 74 72  on while this tr
14bd0 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20  ansaction is.** 
14be0 75 6e 64 65 72 77 61 79 2e 20 20 53 74 61 72 74  underway.  Start
14bf0 69 6e 67 20 61 20 77 72 69 74 65 20 74 72 61 6e  ing a write tran
14c00 73 61 63 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65  saction also cre
14c10 61 74 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20  ates a rollback 
14c20 6a 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72  journal. A.** wr
14c30 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
14c40 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20  must be started 
14c50 62 65 66 6f 72 65 20 61 6e 79 20 63 68 61 6e 67  before any chang
14c60 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74  es can be made t
14c70 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  o the.** databas
14c80 65 2e 20 20 49 66 20 50 32 20 69 73 20 32 20 6f  e.  If P2 is 2 o
14c90 72 20 67 72 65 61 74 65 72 20 74 68 65 6e 20 61  r greater then a
14ca0 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b  n EXCLUSIVE lock
14cb0 20 69 73 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65   is also obtaine
14cc0 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65  d.** on the file
14cd0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73  ..**.** If P2 is
14ce0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65   zero, then a re
14cf0 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69  ad-lock is obtai
14d00 6e 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ned on the datab
14d10 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73  ase file..*/.cas
14d20 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  e OP_Transaction
14d30 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f  : {.  int i = pO
14d40 70 2d 3e 70 31 3b 0a 20 20 42 74 72 65 65 20 2a  p->p1;.  Btree *
14d50 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pBt;..  assert( 
14d60 69 3e 3d 30 20 26 26 20 69 3c 64 62 2d 3e 6e 44  i>=0 && i<db->nD
14d70 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
14d80 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
14d90 31 3c 3c 69 29 29 21 3d 30 20 29 3b 0a 20 20 70  1<<i))!=0 );.  p
14da0 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  Bt = db->aDb[i].
14db0 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20  pBt;..  if( pBt 
14dc0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
14dd0 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
14de0 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29  ns(pBt, pOp->p2)
14df0 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
14e00 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
14e10 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20     p->pc = pc;. 
14e20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
14e30 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
14e40 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
14e50 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20  eturn;.    }.   
14e60 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
14e70 4f 4b 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45  OK && rc!=SQLITE
14e80 5f 52 45 41 44 4f 4e 4c 59 20 2f 2a 20 26 26 20  _READONLY /* && 
14e90 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc!=SQLITE_BUSY 
14ea0 2a 2f 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  */ ){.      goto
14eb0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
14ec0 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ror;.    }.  }. 
14ed0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
14ee0 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65  code: ReadCookie
14ef0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
14f00 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20  .** Read cookie 
14f10 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64  number P3 from d
14f20 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 77  atabase P1 and w
14f30 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67  rite it into reg
14f40 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d  ister P2..** P3=
14f50 3d 30 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =0 is the schema
14f60 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 31   version.  P3==1
14f70 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
14f80 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d   format..** P3==
14f90 32 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65  2 is the recomme
14fa0 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65  nded pager cache
14fb0 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f   size, and so fo
14fc0 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a  rth.  P1==0 is.*
14fd0 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
14fe0 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d  ase file and P1=
14ff0 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =1 is the databa
15000 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
15010 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61  store.** tempora
15020 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
15030 20 49 66 20 50 31 20 69 73 20 6e 65 67 61 74 69   If P1 is negati
15040 76 65 2c 20 74 68 65 6e 20 74 68 69 73 20 69 73  ve, then this is
15050 20 61 20 72 65 71 75 65 73 74 20 74 6f 20 72 65   a request to re
15060 61 64 20 74 68 65 20 73 69 7a 65 20 6f 66 20 61  ad the size of a
15070 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 66 72  .** databases fr
15080 65 65 2d 6c 69 73 74 2e 20 50 33 20 6d 75 73 74  ee-list. P3 must
15090 20 62 65 20 73 65 74 20 74 6f 20 31 20 69 6e 20   be set to 1 in 
150a0 74 68 69 73 20 63 61 73 65 2e 20 54 68 65 20 61  this case. The a
150b0 63 74 75 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73  ctual.** databas
150c0 65 20 61 63 63 65 73 73 65 64 20 69 73 20 28 28  e accessed is ((
150d0 50 31 2b 31 29 2a 2d 31 29 2e 20 46 6f 72 20 65  P1+1)*-1). For e
150e0 78 61 6d 70 6c 65 2c 20 61 20 50 31 20 70 61 72  xample, a P1 par
150f0 61 6d 65 74 65 72 20 6f 66 20 2d 31 0a 2a 2a 20  ameter of -1.** 
15100 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 64  corresponds to d
15110 61 74 61 62 61 73 65 20 30 20 28 22 6d 61 69 6e  atabase 0 ("main
15120 22 29 2c 20 61 20 50 31 20 6f 66 20 2d 32 20 69  "), a P1 of -2 i
15130 73 20 64 61 74 61 62 61 73 65 20 31 20 28 22 74  s database 1 ("t
15140 65 6d 70 22 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  emp")..**.** The
15150 72 65 20 6d 75 73 74 20 62 65 20 61 20 72 65 61  re must be a rea
15160 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61  d-lock on the da
15170 74 61 62 61 73 65 20 28 65 69 74 68 65 72 20 61  tabase (either a
15180 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
15190 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20  must be started 
151a0 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20 62 65  or there must be
151b0 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29   an open cursor)
151c0 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75   before.** execu
151d0 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75  ting this instru
151e0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
151f0 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20  P_ReadCookie: { 
15200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
15210 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
15220 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b   */.  int iMeta;
15230 0a 20 20 69 6e 74 20 69 44 62 20 3d 20 70 4f 70  .  int iDb = pOp
15240 2d 3e 70 31 3b 0a 20 20 69 6e 74 20 69 43 6f 6f  ->p1;.  int iCoo
15250 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 0a  kie = pOp->p3;..
15260 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
15270 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  3<SQLITE_N_BTREE
15280 5f 4d 45 54 41 20 29 3b 0a 20 20 69 66 28 20 69  _META );.  if( i
15290 44 62 3c 30 20 29 7b 0a 20 20 20 20 69 44 62 20  Db<0 ){.    iDb 
152a0 3d 20 28 2d 31 2a 28 69 44 62 2b 31 29 29 3b 0a  = (-1*(iDb+1));.
152b0 20 20 20 20 69 43 6f 6f 6b 69 65 20 2a 3d 20 2d      iCookie *= -
152c0 31 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  1;.  }.  assert(
152d0 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
152e0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
152f0 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  rt( db->aDb[iDb]
15300 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  .pBt!=0 );.  ass
15310 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
15320 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d  sk & (1<<iDb))!=
15330 30 20 29 3b 0a 20 20 2f 2a 20 54 68 65 20 69 6e  0 );.  /* The in
15340 64 65 78 69 6e 67 20 6f 66 20 6d 65 74 61 20 76  dexing of meta v
15350 61 6c 75 65 73 20 61 74 20 74 68 65 20 73 63 68  alues at the sch
15360 65 6d 61 20 6c 61 79 65 72 20 69 73 20 6f 66 66  ema layer is off
15370 20 62 79 20 6f 6e 65 20 66 72 6f 6d 0a 20 20 2a   by one from.  *
15380 2a 20 74 68 65 20 69 6e 64 65 78 69 6e 67 20 69  * the indexing i
15390 6e 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65  n the btree laye
153a0 72 2e 20 20 54 68 65 20 62 74 72 65 65 20 63 6f  r.  The btree co
153b0 6e 73 69 64 65 72 73 20 6d 65 74 61 5b 30 5d 20  nsiders meta[0] 
153c0 74 6f 0a 20 20 2a 2a 20 62 65 20 74 68 65 20 6e  to.  ** be the n
153d0 75 6d 62 65 72 20 6f 66 20 66 72 65 65 20 70 61  umber of free pa
153e0 67 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  ges in the datab
153f0 61 73 65 20 28 61 20 72 65 61 64 2d 6f 6e 6c 79  ase (a read-only
15400 20 76 61 6c 75 65 29 0a 20 20 2a 2a 20 61 6e 64   value).  ** and
15410 20 6d 65 74 61 5b 31 5d 20 74 6f 20 62 65 20 74   meta[1] to be t
15420 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
15430 2e 20 20 54 68 65 20 73 63 68 65 6d 61 20 6c 61  .  The schema la
15440 79 65 72 20 63 6f 6e 73 69 64 65 72 73 0a 20 20  yer considers.  
15450 2a 2a 20 6d 65 74 61 5b 31 5d 20 74 6f 20 62 65  ** meta[1] to be
15460 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
15470 69 65 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20  ie.  So we have 
15480 74 6f 20 73 68 69 66 74 20 74 68 65 20 69 6e 64  to shift the ind
15490 65 78 0a 20 20 2a 2a 20 62 79 20 6f 6e 65 20 69  ex.  ** by one i
154a0 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
154b0 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a  statement..  */.
154c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
154d0 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61  reeGetMeta(db->a
154e0 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 31 20 2b  Db[iDb].pBt, 1 +
154f0 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a   iCookie, (u32 *
15500 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74  )&iMeta);.  pOut
15510 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20  ->u.i = iMeta;. 
15520 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
15530 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
15540 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
15550 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65  pcode: SetCookie
15560 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
15570 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f  .** Write the co
15580 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
15590 72 20 50 33 20 28 69 6e 74 65 72 70 72 65 74 65  r P3 (interprete
155a0 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29  d as an integer)
155b0 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20  .** into cookie 
155c0 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74  number P2 of dat
155d0 61 62 61 73 65 20 50 31 2e 0a 2a 2a 20 50 32 3d  abase P1..** P2=
155e0 3d 30 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =0 is the schema
155f0 20 76 65 72 73 69 6f 6e 2e 20 20 50 32 3d 3d 31   version.  P2==1
15600 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
15610 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d 3d   format..** P2==
15620 32 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65  2 is the recomme
15630 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65  nded pager cache
15640 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f   size, and so fo
15650 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a  rth.  P1==0 is.*
15660 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
15670 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d  ase file and P1=
15680 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =1 is the databa
15690 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
156a0 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61  store.** tempora
156b0 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
156c0 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d   A transaction m
156d0 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62  ust be started b
156e0 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20  efore executing 
156f0 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  this opcode..*/.
15700 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69  case OP_SetCooki
15710 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  e: {       /* in
15720 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a  3 */.  Db *pDb;.
15730 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
15740 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  2<SQLITE_N_BTREE
15750 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
15760 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
15770 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
15780 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
15790 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31  ->btreeMask & (1
157a0 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29  <<pOp->p1))!=0 )
157b0 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
157c0 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  Db[pOp->p1];.  a
157d0 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21  ssert( pDb->pBt!
157e0 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  =0 );.  sqlite3V
157f0 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
15800 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65  (pIn3);.  /* See
15810 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65   note about inde
15820 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50  x shifting on OP
15830 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20  _ReadCookie */. 
15840 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
15850 65 65 55 70 64 61 74 65 4d 65 74 61 28 70 44 62  eeUpdateMeta(pDb
15860 2d 3e 70 42 74 2c 20 31 2b 70 4f 70 2d 3e 70 32  ->pBt, 1+pOp->p2
15870 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69  , (int)pIn3->u.i
15880 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  );.  if( pOp->p2
15890 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68  ==0 ){.    /* Wh
158a0 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  en the schema co
158b0 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65  okie changes, re
158c0 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f  cord the new coo
158d0 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a  kie internally *
158e0 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
158f0 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
15900 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75  e = (int)pIn3->u
15910 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67  .i;.    db->flag
15920 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65  s |= SQLITE_Inte
15930 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c  rnChanges;.  }el
15940 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  se if( pOp->p2==
15950 31 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f  1 ){.    /* Reco
15960 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68  rd changes in th
15970 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f  e file format */
15980 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
15990 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  a->file_format =
159a0 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a   (u8)pIn3->u.i;.
159b0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
159c0 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49  1==1 ){.    /* I
159d0 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72  nvalidate all pr
159e0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
159f0 73 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 54  s whenever the T
15a00 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20 20  EMP database.   
15a10 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68   ** schema is ch
15a20 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23  anged.  Ticket #
15a30 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69  1644 */.    sqli
15a40 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
15a50 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
15a60 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
15a70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 65 72 69  ./* Opcode: Veri
15a80 66 79 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 2a  fyCookie P1 P2 *
15a90 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65  .**.** Check the
15aa0 20 76 61 6c 75 65 20 6f 66 20 67 6c 6f 62 61 6c   value of global
15ab0 20 64 61 74 61 62 61 73 65 20 70 61 72 61 6d 65   database parame
15ac0 74 65 72 20 6e 75 6d 62 65 72 20 30 20 28 74 68  ter number 0 (th
15ad0 65 0a 2a 2a 20 73 63 68 65 6d 61 20 76 65 72 73  e.** schema vers
15ae0 69 6f 6e 29 20 61 6e 64 20 6d 61 6b 65 20 73 75  ion) and make su
15af0 72 65 20 69 74 20 69 73 20 65 71 75 61 6c 20 74  re it is equal t
15b00 6f 20 50 32 2e 20 20 0a 2a 2a 20 50 31 20 69 73  o P2.  .** P1 is
15b10 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 75   the database nu
15b20 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 30 20  mber which is 0 
15b30 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  for the main dat
15b40 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 61 6e  abase file.** an
15b50 64 20 31 20 66 6f 72 20 74 68 65 20 66 69 6c 65  d 1 for the file
15b60 20 68 6f 6c 64 69 6e 67 20 74 65 6d 70 6f 72 61   holding tempora
15b70 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 73 6f  ry tables and so
15b80 6d 65 20 68 69 67 68 65 72 20 6e 75 6d 62 65 72  me higher number
15b90 0a 2a 2a 20 66 6f 72 20 61 75 78 69 6c 69 61 72  .** for auxiliar
15ba0 79 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a  y databases..**.
15bb0 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68  ** The cookie ch
15bc0 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65 20  anges its value 
15bd0 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
15be0 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
15bf0 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  nges..** This op
15c00 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20  eration is used 
15c10 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20 74  to detect when t
15c20 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68  hat the cookie h
15c30 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e  as changed.** an
15c40 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72 65  d that the curre
15c50 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73  nt process needs
15c60 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73   to reread the s
15c70 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74  chema..**.** Eit
15c80 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f  her a transactio
15c90 6e 20 6e 65 65 64 73 20 74 6f 20 68 61 76 65 20  n needs to have 
15ca0 62 65 65 6e 20 73 74 61 72 74 65 64 20 6f 72 20  been started or 
15cb0 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e 65 65 64 73  an OP_Open needs
15cc0 0a 2a 2a 20 74 6f 20 62 65 20 65 78 65 63 75 74  .** to be execut
15cd0 65 64 20 28 74 6f 20 65 73 74 61 62 6c 69 73 68  ed (to establish
15ce0 20 61 20 72 65 61 64 20 6c 6f 63 6b 29 20 62 65   a read lock) be
15cf0 66 6f 72 65 20 74 68 69 73 20 6f 70 63 6f 64 65  fore this opcode
15d00 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a   is.** invoked..
15d10 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 65 72 69 66  */.case OP_Verif
15d20 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e 74  yCookie: {.  int
15d30 20 69 4d 65 74 61 3b 0a 20 20 42 74 72 65 65 20   iMeta;.  Btree 
15d40 2a 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20  *pBt;.  assert( 
15d50 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
15d60 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
15d70 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
15d80 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
15d90 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20  Op->p1))!=0 );. 
15da0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
15db0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 69  Op->p1].pBt;.  i
15dc0 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63  f( pBt ){.    rc
15dd0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 47   = sqlite3BtreeG
15de0 65 74 4d 65 74 61 28 70 42 74 2c 20 31 2c 20 28  etMeta(pBt, 1, (
15df0 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20  u32 *)&iMeta);. 
15e00 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
15e10 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
15e20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20  iMeta = 0;.  }. 
15e30 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
15e40 4f 4b 20 26 26 20 69 4d 65 74 61 21 3d 70 4f 70  OK && iMeta!=pOp
15e50 2d 3e 70 32 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p2 ){.    sqli
15e60 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
15e70 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70  >zErrMsg);.    p
15e80 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  ->zErrMsg = sqli
15e90 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20  te3DbStrDup(db, 
15ea0 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  "database schema
15eb0 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a   has changed");.
15ec0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63      /* If the sc
15ed0 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d  hema-cookie from
15ee0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
15ef0 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 63  le matches the c
15f00 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74  ookie .    ** st
15f10 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69 6e  ored with the in
15f20 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e  -memory represen
15f30 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  tation of the sc
15f40 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20  hema, do.    ** 
15f50 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73  not reload the s
15f60 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64  chema from the d
15f70 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
15f80 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76    **.    ** If v
15f90 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72  irtual-tables ar
15fa0 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69  e in use, this i
15fb0 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70  s not just an op
15fc0 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20  timization..    
15fd0 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c  ** Often, v-tabl
15fe0 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20 64  es store their d
15ff0 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c  ata in other SQL
16000 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63  ite tables, whic
16010 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65  h.    ** are que
16020 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  ried from within
16030 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68   xNext() and oth
16040 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f  er v-table metho
16050 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20  ds using.    ** 
16060 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65 73  prepared queries
16070 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65 72  . If such a quer
16080 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65  y is out-of-date
16090 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74  , we do not want
160a0 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61   to.    ** disca
160b0 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  rd the database 
160c0 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75  schema, as the u
160d0 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65  ser code impleme
160e0 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a  nting the.    **
160f0 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68   v-table would h
16100 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79 20  ave to be ready 
16110 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f  for the sqlite3_
16120 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20 69  vtab structure i
16130 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20  tself.    ** to 
16140 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77  be invalidated w
16150 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f  henever sqlite3_
16160 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64  step() is called
16170 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20   from within .  
16180 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d    ** a v-table m
16190 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  ethod..    */.  
161a0 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f    if( db->aDb[pO
161b0 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
161c0 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69  schema_cookie!=i
161d0 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71  Meta ){.      sq
161e0 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e  lite3ResetIntern
161f0 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70  alSchema(db, pOp
16200 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ->p1);.    }..  
16210 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
16220 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
16230 73 28 64 62 29 3b 0a 20 20 20 20 72 63 20 3d 20  s(db);.    rc = 
16240 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20  SQLITE_SCHEMA;. 
16250 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
16260 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65  * Opcode: OpenRe
16270 61 64 20 50 31 20 50 32 20 50 33 20 50 34 20 50  ad P1 P2 P3 P4 P
16280 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  5.**.** Open a r
16290 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20  ead-only cursor 
162a0 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
162b0 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f   table whose roo
162c0 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20  t page is.** P2 
162d0 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69  in a database fi
162e0 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73  le.  The databas
162f0 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d  e file is determ
16300 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20  ined by P3. .** 
16310 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20  P3==0 means the 
16320 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50  main database, P
16330 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64  3==1 means the d
16340 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72  atabase used for
16350 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74   .** temporary t
16360 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20  ables, and P3>1 
16370 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63  means used the c
16380 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74  orresponding att
16390 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  ached.** databas
163a0 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77  e.  Give the new
163b0 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74   cursor an ident
163c0 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68  ifier of P1.  Th
163d0 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e  e P1.** values n
163e0 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69  eed not be conti
163f0 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31  guous but all P1
16400 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62   values should b
16410 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73  e small integers
16420 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72  ..** It is an er
16430 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65  ror for P1 to be
16440 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a   negative..**.**
16450 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75   If P5!=0 then u
16460 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
16470 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73  f register P2 as
16480 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20   the root page, 
16490 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  not.** the value
164a0 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a   of P2 itself..*
164b0 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20  *.** There will 
164c0 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f  be a read lock o
164d0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  n the database w
164e0 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73  henever there is
164f0 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73   an.** open curs
16500 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61  or.  If the data
16510 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65  base was unlocke
16520 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
16530 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74  instruction.** t
16540 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  hen a read lock 
16550 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70  is acquired as p
16560 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74  art of this inst
16570 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64  ruction.  A read
16580 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20  .** lock allows 
16590 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  other processes 
165a0 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61  to read the data
165b0 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69  base but prohibi
165c0 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20  ts.** any other 
165d0 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64  process from mod
165e0 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62  ifying the datab
165f0 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c  ase.  The read l
16600 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73  ock is.** releas
16610 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73  ed when all curs
16620 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20  ors are closed. 
16630 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
16640 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a  tion attempts.**
16650 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c   to get a read l
16660 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74  ock but fails, t
16670 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e  he script termin
16680 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20  ates with an.** 
16690 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f  SQLITE_BUSY erro
166a0 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  r code..**.** Th
166b0 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
166c0 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
166d0 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
166e0 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
166f0 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
16700 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
16710 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
16720 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
16730 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
16740 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
16750 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
16760 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
16770 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
16780 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
16790 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
167a0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
167b0 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
167c0 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
167d0 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
167e0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
167f0 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a   the table..**.*
16800 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57  * See also OpenW
16810 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  rite..*/./* Opco
16820 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31  de: OpenWrite P1
16830 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
16840 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77  ** Open a read/w
16850 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65  rite cursor name
16860 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c  d P1 on the tabl
16870 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
16880 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73   root.** page is
16890 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d   P2.  Or if P5!=
168a0 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e  0 use the conten
168b0 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  t of register P2
168c0 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20   to find the.** 
168d0 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a  root page..**.**
168e0 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61   The P4 value ma
168f0 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69  y be either an i
16900 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32  nteger (P4_INT32
16910 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ) or a pointer t
16920 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73  o.** a KeyInfo s
16930 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59  tructure (P4_KEY
16940 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20  INFO). If it is 
16950 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b  a pointer to a K
16960 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63  eyInfo .** struc
16970 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20  ture, then said 
16980 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65  structure define
16990 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
169a0 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
169b0 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20  sequence of the 
169c0 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e  index being open
169d0 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
169e0 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67  f P4 is an integ
169f0 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74  er .** value, it
16a00 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
16a10 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
16a20 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a   in the table..*
16a30 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
16a40 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74  ction works just
16a50 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65   like OpenRead e
16a60 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70  xcept that it op
16a70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a  ens the cursor.*
16a80 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20  * in read/write 
16a90 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76  mode.  For a giv
16aa0 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20  en table, there 
16ab0 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f  can be one or mo
16ac0 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20  re read-only.** 
16ad0 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e  cursors or a sin
16ae0 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20 63  gle read/write c
16af0 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f  ursor but not bo
16b00 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  th..**.** See al
16b10 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a  so OpenRead..*/.
16b20 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64  case OP_OpenRead
16b30 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72  :.case OP_OpenWr
16b40 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69  ite: {.  int nFi
16b50 65 6c 64 20 3d 20 30 3b 0a 20 20 4b 65 79 49 6e  eld = 0;.  KeyIn
16b60 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 20 3d 20 30  fo *pKeyInfo = 0
16b70 3b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  ;.  int i = pOp-
16b80 3e 70 31 3b 0a 20 20 69 6e 74 20 70 32 20 3d 20  >p1;.  int p2 = 
16b90 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 6e 74 20 69  pOp->p2;.  int i
16ba0 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  Db = pOp->p3;.  
16bb0 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74  int wrFlag;.  Bt
16bc0 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43  ree *pX;.  VdbeC
16bd0 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44  ursor *pCur;.  D
16be0 62 20 2a 70 44 62 3b 0a 20 20 0a 20 20 61 73 73  b *pDb;.  .  ass
16bf0 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
16c00 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
16c10 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
16c20 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29  eMask & (1<<iDb)
16c30 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  )!=0 );.  pDb = 
16c40 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20  &db->aDb[iDb];. 
16c50 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a   pX = pDb->pBt;.
16c60 20 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20    assert( pX!=0 
16c70 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  );.  if( pOp->op
16c80 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69  code==OP_OpenWri
16c90 74 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67  te ){.    wrFlag
16ca0 20 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 70 44   = 1;.    if( pD
16cb0 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
16cc0 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e  _format < p->min
16cd0 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
16ce0 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57  ){.      p->minW
16cf0 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d  riteFileFormat =
16d00 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
16d10 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20  ile_format;.    
16d20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77  }.  }else{.    w
16d30 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20  rFlag = 0;.  }. 
16d40 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
16d50 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
16d60 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
16d70 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p2<=p->nMem );. 
16d80 20 20 20 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d     pIn2 = &p->aM
16d90 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 73 71 6c 69  em[p2];.    sqli
16da0 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
16db0 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20  rify(pIn2);.    
16dc0 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e  p2 = (int)pIn2->
16dd0 75 2e 69 3b 0a 20 20 20 20 69 66 28 20 70 32 3c  u.i;.    if( p2<
16de0 32 20 29 20 7b 0a 20 20 20 20 20 20 72 63 20 3d  2 ) {.      rc =
16df0 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
16e00 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BKPT;.      goto
16e10 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
16e20 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ror;.    }.  }. 
16e30 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29 3b   assert( i>=0 );
16e40 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
16e50 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
16e60 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d  {.    pKeyInfo =
16e70 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
16e80 6f 3b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 2d  o;.    pKeyInfo-
16e90 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62  >enc = ENC(p->db
16ea0 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  );.    nField = 
16eb0 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
16ec0 2b 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  +1;.  }else if( 
16ed0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
16ee0 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69  INT32 ){.    nFi
16ef0 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
16f00 0a 20 20 7d 0a 20 20 70 43 75 72 20 3d 20 61 6c  .  }.  pCur = al
16f10 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
16f20 69 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20  i, nField, iDb, 
16f30 31 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d  1);.  if( pCur==
16f40 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
16f50 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
16f60 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 1;.  rc = sql
16f70 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
16f80 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20  pX, p2, wrFlag, 
16f90 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e  pKeyInfo, pCur->
16fa0 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72  pCursor);.  pCur
16fb0 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65  ->pKeyInfo = pKe
16fc0 79 49 6e 66 6f 3b 0a 0a 20 20 73 77 69 74 63 68  yInfo;..  switch
16fd0 28 20 72 63 20 29 7b 0a 20 20 20 20 63 61 73 65  ( rc ){.    case
16fe0 20 53 51 4c 49 54 45 5f 42 55 53 59 3a 20 7b 0a   SQLITE_BUSY: {.
16ff0 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
17000 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20  ;.      p->rc = 
17010 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
17020 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  ;.      goto vdb
17030 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a  e_return;.    }.
17040 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
17050 4f 4b 3a 20 7b 0a 20 20 20 20 20 20 69 6e 74 20  OK: {.      int 
17060 66 6c 61 67 73 20 3d 20 73 71 6c 69 74 65 33 42  flags = sqlite3B
17070 74 72 65 65 46 6c 61 67 73 28 70 43 75 72 2d 3e  treeFlags(pCur->
17080 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
17090 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69  /* Sanity checki
170a0 6e 67 2e 20 20 4f 6e 6c 79 20 74 68 65 20 6c 6f  ng.  Only the lo
170b0 77 65 72 20 66 6f 75 72 20 62 69 74 73 20 6f 66  wer four bits of
170c0 20 74 68 65 20 66 6c 61 67 73 20 62 79 74 65 20   the flags byte 
170d0 73 68 6f 75 6c 64 0a 20 20 20 20 20 20 2a 2a 20  should.      ** 
170e0 62 65 20 75 73 65 64 2e 20 20 42 69 74 20 33 20  be used.  Bit 3 
170f0 28 6d 61 73 6b 20 30 78 30 38 29 20 69 73 20 75  (mask 0x08) is u
17100 6e 70 72 65 64 69 63 74 61 62 6c 65 2e 20 20 54  npredictable.  T
17110 68 65 20 6c 6f 77 65 72 20 33 20 62 69 74 73 0a  he lower 3 bits.
17120 20 20 20 20 20 20 2a 2a 20 28 6d 61 73 6b 20 30        ** (mask 0
17130 78 30 37 29 20 73 68 6f 75 6c 64 20 62 65 20 65  x07) should be e
17140 69 74 68 65 72 20 35 20 28 69 6e 74 6b 65 79 2b  ither 5 (intkey+
17150 6c 65 61 66 64 61 74 61 20 66 6f 72 20 74 61 62  leafdata for tab
17160 6c 65 73 29 20 6f 72 0a 20 20 20 20 20 20 2a 2a  les) or.      **
17170 20 32 20 28 7a 65 72 6f 64 61 74 61 20 66 6f 72   2 (zerodata for
17180 20 69 6e 64 69 63 65 73 29 2e 20 20 49 66 20 74   indices).  If t
17190 68 65 73 65 20 63 6f 6e 64 69 74 69 6f 6e 73 20  hese conditions 
171a0 61 72 65 20 6e 6f 74 20 6d 65 74 20 69 74 20 63  are not met it c
171b0 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f 6e 6c 79  an.      ** only
171c0 20 6d 65 61 6e 20 74 68 61 74 20 77 65 20 61 72   mean that we ar
171d0 65 20 64 65 61 6c 69 6e 67 20 77 69 74 68 20 61  e dealing with a
171e0 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
171f0 65 20 66 69 6c 65 0a 20 20 20 20 20 20 2a 2f 0a  e file.      */.
17200 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
17210 20 26 20 30 78 66 30 29 21 3d 30 20 7c 7c 20 28   & 0xf0)!=0 || (
17220 28 66 6c 61 67 73 20 26 20 30 78 30 37 29 21 3d  (flags & 0x07)!=
17230 35 20 26 26 20 28 66 6c 61 67 73 20 26 20 30 78  5 && (flags & 0x
17240 30 37 29 21 3d 32 29 20 29 7b 0a 20 20 20 20 20  07)!=2) ){.     
17250 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
17260 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
17270 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
17280 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
17290 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 75 72      }.      pCur
172a0 2d 3e 69 73 54 61 62 6c 65 20 3d 20 28 66 6c 61  ->isTable = (fla
172b0 67 73 20 26 20 42 54 52 45 45 5f 49 4e 54 4b 45  gs & BTREE_INTKE
172c0 59 29 21 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20  Y)!=0 ?1:0;.    
172d0 20 20 70 43 75 72 2d 3e 69 73 49 6e 64 65 78 20    pCur->isIndex 
172e0 3d 20 28 66 6c 61 67 73 20 26 20 42 54 52 45 45  = (flags & BTREE
172f0 5f 5a 45 52 4f 44 41 54 41 29 21 3d 30 20 3f 31  _ZERODATA)!=0 ?1
17300 3a 30 3b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20  :0;.      /* If 
17310 50 34 3d 3d 30 20 69 74 20 6d 65 61 6e 73 20 77  P4==0 it means w
17320 65 20 61 72 65 20 65 78 70 65 63 74 65 64 20 74  e are expected t
17330 6f 20 6f 70 65 6e 20 61 20 74 61 62 6c 65 2e 20  o open a table. 
17340 20 49 66 20 50 34 21 3d 30 20 74 68 65 6e 0a 20   If P4!=0 then. 
17350 20 20 20 20 20 2a 2a 20 77 65 20 65 78 70 65 63       ** we expec
17360 74 20 74 6f 20 62 65 20 6f 70 65 6e 69 6e 67 20  t to be opening 
17370 61 6e 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  an index.  If th
17380 69 73 20 69 73 20 6e 6f 74 20 77 68 61 74 20 68  is is not what h
17390 61 70 70 65 6e 65 64 2c 0a 20 20 20 20 20 20 2a  appened,.      *
173a0 2a 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62  * then the datab
173b0 61 73 65 20 69 73 20 63 6f 72 72 75 70 74 0a 20  ase is corrupt. 
173c0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
173d0 28 20 28 70 43 75 72 2d 3e 69 73 54 61 62 6c 65  ( (pCur->isTable
173e0 20 26 26 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d   && pOp->p4type=
173f0 3d 50 34 5f 4b 45 59 49 4e 46 4f 29 0a 20 20 20  =P4_KEYINFO).   
17400 20 20 20 20 7c 7c 20 28 70 43 75 72 2d 3e 69 73      || (pCur->is
17410 49 6e 64 65 78 20 26 26 20 70 4f 70 2d 3e 70 34  Index && pOp->p4
17420 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f  type!=P4_KEYINFO
17430 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  ) ){.        rc 
17440 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
17450 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67  _BKPT;.        g
17460 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
17470 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
17480 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
17490 20 7d 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49   }.    case SQLI
174a0 54 45 5f 45 4d 50 54 59 3a 20 7b 0a 20 20 20 20  TE_EMPTY: {.    
174b0 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20    pCur->isTable 
174c0 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50  = pOp->p4type!=P
174d0 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20 20 20 20  4_KEYINFO;.     
174e0 20 70 43 75 72 2d 3e 69 73 49 6e 64 65 78 20 3d   pCur->isIndex =
174f0 20 21 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 3b   !pCur->isTable;
17500 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 43 75  .      pCur->pCu
17510 72 73 6f 72 20 3d 20 30 3b 0a 20 20 20 20 20 20  rsor = 0;.      
17520 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
17530 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
17540 20 7d 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20   }.    default: 
17550 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
17560 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
17570 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
17580 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
17590 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  : OpenEphemeral 
175a0 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
175b0 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75  ** Open a new cu
175c0 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61  rsor P1 to a tra
175d0 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a  nsient table..**
175e0 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61   The cursor is a
175f0 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61  lways opened rea
17600 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20  d/write even if 
17610 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74  .** the main dat
17620 61 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e  abase is read-on
17630 6c 79 2e 20 20 54 68 65 20 74 72 61 6e 73 69 65  ly.  The transie
17640 6e 74 20 6f 72 20 76 69 72 74 75 61 6c 0a 2a 2a  nt or virtual.**
17650 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65   table is delete
17660 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  d automatically 
17670 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  when the cursor 
17680 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a  is closed..**.**
17690 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P2 is the numbe
176a0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
176b0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
176c0 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  e..** The cursor
176d0 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72   points to a BTr
176e0 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d  ee table if P4==
176f0 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65  0 and to a BTree
17700 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20   index.** if P4 
17710 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34  is not 0.  If P4
17720 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74   is not NULL, it
17730 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79   points to a Key
17740 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a  Info structure.*
17750 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  * that defines t
17760 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79  he format of key
17770 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a  s in the index..
17780 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
17790 65 20 77 61 73 20 6f 6e 63 65 20 63 61 6c 6c 65  e was once calle
177a0 64 20 4f 70 65 6e 54 65 6d 70 2e 20 20 42 75 74  d OpenTemp.  But
177b0 20 74 68 61 74 20 63 72 65 61 74 65 64 0a 2a 2a   that created.**
177c0 20 63 6f 6e 66 75 73 69 6f 6e 20 62 65 63 61 75   confusion becau
177d0 73 65 20 74 68 65 20 74 65 72 6d 20 22 74 65 6d  se the term "tem
177e0 70 20 74 61 62 6c 65 22 2c 20 6d 69 67 68 74 20  p table", might 
177f0 72 65 66 65 72 20 65 69 74 68 65 72 0a 2a 2a 20  refer either.** 
17800 74 6f 20 61 20 54 45 4d 50 20 74 61 62 6c 65 20  to a TEMP table 
17810 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c  at the SQL level
17820 2c 20 6f 72 20 74 6f 20 61 20 74 61 62 6c 65 20  , or to a table 
17830 6f 70 65 6e 65 64 20 62 79 0a 2a 2a 20 74 68 69  opened by.** thi
17840 73 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 6e 20  s opcode.  Then 
17850 74 68 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20  this opcode was 
17860 63 61 6c 6c 20 4f 70 65 6e 56 69 72 74 75 61 6c  call OpenVirtual
17870 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 63  .  But.** that c
17880 72 65 61 74 65 64 20 63 6f 6e 66 75 73 69 6f 6e  reated confusion
17890 20 77 69 74 68 20 74 68 65 20 77 68 6f 6c 65 20   with the whole 
178a0 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 69 64  virtual-table id
178b0 65 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ea..*/.case OP_O
178c0 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a  penEphemeral: {.
178d0 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70    int i = pOp->p
178e0 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  1;.  VdbeCursor 
178f0 2a 70 43 78 3b 0a 20 20 73 74 61 74 69 63 20 63  *pCx;.  static c
17900 6f 6e 73 74 20 69 6e 74 20 6f 70 65 6e 46 6c 61  onst int openFla
17910 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49  gs = .      SQLI
17920 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54  TE_OPEN_READWRIT
17930 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
17940 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20  _OPEN_CREATE |. 
17950 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
17960 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20  _EXCLUSIVE |.   
17970 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44     SQLITE_OPEN_D
17980 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20  ELETEONCLOSE |. 
17990 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
179a0 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 0a  _TRANSIENT_DB;..
179b0 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29    assert( i>=0 )
179c0 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
179d0 74 65 43 75 72 73 6f 72 28 70 2c 20 69 2c 20 70  teCursor(p, i, p
179e0 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a  Op->p2, -1, 1);.
179f0 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
17a00 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
17a10 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
17a20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
17a30 72 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20 30  reeFactory(db, 0
17a40 2c 20 31 2c 20 53 51 4c 49 54 45 5f 44 45 46 41  , 1, SQLITE_DEFA
17a50 55 4c 54 5f 54 45 4d 50 5f 43 41 43 48 45 5f 53  ULT_TEMP_CACHE_S
17a60 49 5a 45 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 0a  IZE, openFlags,.
17a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a80 20 20 20 20 20 20 20 20 20 20 20 26 70 43 78 2d             &pCx-
17a90 3e 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63 3d  >pBt);.  if( rc=
17aa0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
17ab0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
17ac0 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43  reeBeginTrans(pC
17ad0 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a  x->pBt, 1);.  }.
17ae0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
17af0 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  _OK ){.    /* If
17b00 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
17b10 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  ex is required, 
17b20 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c  create it by cal
17b30 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ling.    ** sqli
17b40 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
17b50 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42  ble() with the B
17b60 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 20 66 6c  TREE_ZERODATA fl
17b70 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a  ag before.    **
17b80 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20   opening it. If 
17b90 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c  a transient tabl
17ba0 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a  e is required, j
17bb0 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20  ust use the.    
17bc0 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
17bd0 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77   created table w
17be0 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20  ith root-page 1 
17bf0 28 61 6e 20 49 4e 54 4b 45 59 20 74 61 62 6c 65  (an INTKEY table
17c00 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  )..    */.    if
17c10 28 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  ( pOp->p4.pKeyIn
17c20 66 6f 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  fo ){.      int 
17c30 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65  pgno;.      asse
17c40 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
17c50 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
17c60 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
17c70 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
17c80 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e  e(pCx->pBt, &pgn
17c90 6f 2c 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54  o, BTREE_ZERODAT
17ca0 41 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72  A); .      if( r
17cb0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
17cc0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
17cd0 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f  pgno==MASTER_ROO
17ce0 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 72  T+1 );.        r
17cf0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
17d00 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c  Cursor(pCx->pBt,
17d10 20 70 67 6e 6f 2c 20 31 2c 20 0a 20 20 20 20 20   pgno, 1, .     
17d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d30 20 20 20 20 20 20 20 20 20 20 20 28 4b 65 79 49             (KeyI
17d40 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c 20  nfo*)pOp->p4.z, 
17d50 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  pCx->pCursor);. 
17d60 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79         pCx->pKey
17d70 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
17d80 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20  KeyInfo;.       
17d90 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
17da0 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29  enc = ENC(p->db)
17db0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
17dc0 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30  pCx->isTable = 0
17dd0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
17de0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
17df0 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e  treeCursor(pCx->
17e00 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54  pBt, MASTER_ROOT
17e10 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75  , 1, 0, pCx->pCu
17e20 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78  rsor);.      pCx
17e30 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20  ->isTable = 1;. 
17e40 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e     }.  }.  pCx->
17e50 69 73 49 6e 64 65 78 20 3d 20 21 70 43 78 2d 3e  isIndex = !pCx->
17e60 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b  isTable;.  break
17e70 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
17e80 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32  OpenPseudo P1 P2
17e90 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70   P3 * *.**.** Op
17ea0 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
17eb0 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  that points to a
17ec0 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74   fake table that
17ed0 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67   contains a sing
17ee0 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74  le.** row of dat
17ef0 61 2e 20 20 41 6e 79 20 61 74 74 65 6d 70 74 20  a.  Any attempt 
17f00 74 6f 20 77 72 69 74 65 20 61 20 73 65 63 6f 6e  to write a secon
17f10 64 20 72 6f 77 20 6f 66 20 64 61 74 61 20 63 61  d row of data ca
17f20 75 73 65 73 20 74 68 65 0a 2a 2a 20 66 69 72 73  uses the.** firs
17f30 74 20 72 6f 77 20 74 6f 20 62 65 20 64 65 6c 65  t row to be dele
17f40 74 65 64 2e 20 20 41 6c 6c 20 64 61 74 61 20 69  ted.  All data i
17f50 73 20 64 65 6c 65 74 65 64 20 77 68 65 6e 20 74  s deleted when t
17f60 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
17f70 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20  closed..**.** A 
17f80 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65  pseudo-table cre
17f90 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  ated by this opc
17fa0 6f 64 65 20 69 73 20 75 73 65 66 75 6c 20 66 6f  ode is useful fo
17fb0 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 0a 2a 2a  r holding the.**
17fc0 20 4e 45 57 20 6f 72 20 4f 4c 44 20 74 61 62 6c   NEW or OLD tabl
17fd0 65 73 20 69 6e 20 61 20 74 72 69 67 67 65 72 2e  es in a trigger.
17fe0 20 20 41 6c 73 6f 20 75 73 65 64 20 74 6f 20 68    Also used to h
17ff0 6f 6c 64 20 74 68 65 20 61 20 73 69 6e 67 6c 65  old the a single
18000 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66  .** row output f
18010 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73  rom the sorter s
18020 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63  o that the row c
18030 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64  an be decomposed
18040 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64   into.** individ
18050 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e  ual columns usin
18060 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20  g the OP_Column 
18070 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68  opcode..**.** Wh
18080 65 6e 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20  en OP_Insert is 
18090 65 78 65 63 75 74 65 64 20 74 6f 20 69 6e 73 65  executed to inse
180a0 72 74 20 61 20 72 6f 77 20 69 6e 20 74 6f 20 74  rt a row in to t
180b0 68 65 20 70 73 65 75 64 6f 20 74 61 62 6c 65 2c  he pseudo table,
180c0 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74  .** the pseudo-t
180d0 61 62 6c 65 20 63 75 72 73 6f 72 20 6d 61 79 20  able cursor may 
180e0 6f 72 20 6d 61 79 20 6e 6f 74 20 6d 61 6b 65 20  or may not make 
180f0 69 74 27 73 20 6f 77 6e 20 63 6f 70 79 20 6f 66  it's own copy of
18100 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
18110 20 72 6f 77 20 64 61 74 61 2e 20 49 66 20 50 32   row data. If P2
18120 20 69 73 20 30 2c 20 74 68 65 6e 20 74 68 65 20   is 0, then the 
18130 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 77 69 6c  pseudo-table wil
18140 6c 20 63 6f 70 79 20 74 68 65 0a 2a 2a 20 6f 72  l copy the.** or
18150 69 67 69 6e 61 6c 20 72 6f 77 20 64 61 74 61 2e  iginal row data.
18160 20 4f 74 68 65 72 77 69 73 65 2c 20 61 20 70 6f   Otherwise, a po
18170 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6f 72 69  inter to the ori
18180 67 69 6e 61 6c 20 6d 65 6d 6f 72 79 20 63 65 6c  ginal memory cel
18190 6c 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 2e 20  l.** is stored. 
181a0 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68  In this case, th
181b0 65 20 76 64 62 65 20 70 72 6f 67 72 61 6d 20 6d  e vdbe program m
181c0 75 73 74 20 65 6e 73 75 72 65 20 74 68 61 74 20  ust ensure that 
181d0 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63  the .** memory c
181e0 65 6c 6c 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ell containing t
181f0 68 65 20 72 6f 77 20 64 61 74 61 20 69 73 20 6e  he row data is n
18200 6f 74 20 6f 76 65 72 77 72 69 74 74 65 6e 20 75  ot overwritten u
18210 6e 74 69 6c 20 74 68 65 0a 2a 2a 20 70 73 65 75  ntil the.** pseu
18220 64 6f 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73  do table is clos
18230 65 64 20 28 6f 72 20 61 20 6e 65 77 20 72 6f 77  ed (or a new row
18240 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74   is inserted int
18250 6f 20 69 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 33 20  o it)..**.** P3 
18260 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
18270 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
18280 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c  ecords that will
18290 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a   be stored by.**
182a0 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c   the pseudo-tabl
182b0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  e..*/.case OP_Op
182c0 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 69 6e  enPseudo: {.  in
182d0 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  t i = pOp->p1;. 
182e0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
182f0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ;.  assert( i>=0
18300 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
18310 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 69 2c  cateCursor(p, i,
18320 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29   pOp->p3, -1, 0)
18330 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
18340 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
18350 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  pCx->nullRow = 1
18360 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75 64 6f 54  ;.  pCx->pseudoT
18370 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d  able = 1;.  pCx-
18380 3e 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c  >ephemPseudoTabl
18390 65 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b  e = (u8)pOp->p2;
183a0 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20  .  pCx->isTable 
183b0 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e  = 1;.  pCx->isIn
183c0 64 65 78 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  dex = 0;.  break
183d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
183e0 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a  Close P1 * * * *
183f0 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63  .**.** Close a c
18400 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79  ursor previously
18410 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20   opened as P1.  
18420 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20  If P1 is not.** 
18430 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20  currently open, 
18440 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
18450 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a   is a no-op..*/.
18460 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b  case OP_Close: {
18470 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
18480 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e  p1;.  assert( i>
18490 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73  =0 && i<p->nCurs
184a0 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  or );.  sqlite3V
184b0 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
184c0 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29 3b 0a 20   p->apCsr[i]);. 
184d0 20 70 2d 3e 61 70 43 73 72 5b 69 5d 20 3d 20 30   p->apCsr[i] = 0
184e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
184f0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 65 20   Opcode: SeekGe 
18500 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
18510 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
18520 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
18530 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
18540 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
18550 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
18560 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
18570 67 69 73 74 65 72 20 50 33 20 61 73 20 74 68 65  gister P3 as the
18580 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72   key.  If cursor
18590 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
185a0 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
185b0 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
185c0 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
185d0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
185e0 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
185f0 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
18600 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
18610 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
18620 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
18630 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
18640 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
18650 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
18660 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
18670 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
18680 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
18690 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
186a0 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  * greater than o
186b0 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
186c0 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
186d0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
186e0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65   to P2..**.** Se
186f0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
18700 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63  otFound, Distinc
18710 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47  t, SeekLt, SeekG
18720 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20  t, SeekLe.*/./* 
18730 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 74 20 50  Opcode: SeekGt P
18740 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
18750 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
18760 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
18770 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
18780 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
18790 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
187a0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
187b0 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
187c0 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
187d0 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
187e0 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
187f0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
18800 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
18810 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
18820 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
18830 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
18840 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
18850 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
18860 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
18870 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73   points to the s
18880 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68  mallest entry th
18890 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  at .** is greate
188a0 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  r than the key v
188b0 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
188c0 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72  re no records gr
188d0 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74  eater than .** t
188e0 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
188f0 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
18900 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
18910 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
18920 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73  d, NotFound, Dis
18930 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53  tinct, SeekLt, S
18940 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGe, SeekLe.*/
18950 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
18960 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  Lt P1 P2 P3 P4 *
18970 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f   .**.** If curso
18980 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
18990 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
189a0 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
189b0 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
189c0 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
189d0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
189e0 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
189f0 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
18a00 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
18a10 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
18a20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
18a30 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
18a40 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
18a50 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
18a60 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
18a70 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
18a80 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
18a90 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
18aa0 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
18ab0 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
18ac0 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
18ad0 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
18ae0 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c  are no records l
18af0 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ess than .** the
18b00 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
18b10 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
18b20 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
18b30 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
18b40 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69   NotFound, Disti
18b50 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  nct, SeekGt, See
18b60 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGe, SeekLe.*/./
18b70 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 65  * Opcode: SeekLe
18b80 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
18b90 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
18ba0 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
18bb0 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
18bc0 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
18bd0 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
18be0 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
18bf0 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
18c00 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
18c10 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
18c20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
18c30 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
18c40 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
18c50 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
18c60 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
18c70 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
18c80 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
18c90 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
18ca0 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
18cb0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
18cc0 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68  largest entry th
18cd0 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74  at .** is less t
18ce0 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
18cf0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
18d00 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
18d10 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20  ecords .** less 
18d20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
18d30 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
18d40 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
18d50 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
18d60 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
18d70 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
18d80 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c  istinct, SeekGt,
18d90 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a   SeekGe, SeekLt.
18da0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c  */.case OP_SeekL
18db0 74 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  t:         /* ju
18dc0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
18dd0 4f 50 5f 53 65 65 6b 4c 65 3a 20 20 20 20 20 20  OP_SeekLe:      
18de0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
18df0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47  */.case OP_SeekG
18e00 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  e:         /* ju
18e10 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
18e20 4f 50 5f 53 65 65 6b 47 74 3a 20 7b 20 20 20 20  OP_SeekGt: {    
18e30 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
18e40 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70  */.  int i = pOp
18e50 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73  ->p1;.  VdbeCurs
18e60 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72  or *pC;..  asser
18e70 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e  t( i>=0 && i<p->
18e80 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
18e90 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20  ert( pOp->p2!=0 
18ea0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
18eb0 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28  sr[i];.  assert(
18ec0 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pC!=0 );.  if( 
18ed0 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
18ee0 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 2c 20 6f  {.    int res, o
18ef0 63 3b 0a 20 20 20 20 6f 63 20 3d 20 70 4f 70 2d  c;.    oc = pOp-
18f00 3e 6f 70 63 6f 64 65 3b 0a 20 20 20 20 70 43 2d  >opcode;.    pC-
18f10 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
18f20 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
18f30 65 20 29 7b 0a 20 20 20 20 20 20 69 36 34 20 69  e ){.      i64 i
18f40 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Key;      /* The
18f50 20 72 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f   rowid we are to
18f60 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 20   seek to */..   
18f70 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20     /* The input 
18f80 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68  value in P3 migh
18f90 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65  t be of any type
18fa0 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c  : integer, real,
18fb0 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 20 20 2a   string,.      *
18fc0 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e  * blob, or NULL.
18fd0 20 20 42 75 74 20 69 74 20 6e 65 65 64 73 20 74    But it needs t
18fe0 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20  o be an integer 
18ff0 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f  before we can do
19000 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 73 65  .      ** the se
19010 65 6b 2c 20 73 6f 20 63 6f 76 65 72 74 20 69 74  ek, so covert it
19020 2e 20 2a 2f 0a 20 20 20 20 20 20 61 70 70 6c 79  . */.      apply
19030 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
19040 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 69 4b 65  pIn3);.      iKe
19050 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  y = sqlite3VdbeI
19060 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 20  ntValue(pIn3);. 
19070 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
19080 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20 20 20 20  Valid = 0;..    
19090 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76    /* If the P3 v
190a0 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62  alue could not b
190b0 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
190c0 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68   an integer with
190d0 6f 75 74 0a 20 20 20 20 20 20 2a 2a 20 6c 6f 73  out.      ** los
190e0 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  s of information
190f0 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70  , then special p
19100 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71  rocessing is req
19110 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20  uired... */.    
19120 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
19130 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
19140 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
19150 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
19160 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Real)==0 ){. 
19170 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74           /* If t
19180 68 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e  he P3 value cann
19190 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
191a0 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66  into any kind of
191b0 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20   a number,.     
191c0 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65       ** then the
191d0 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73   seek is not pos
191e0 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74  sible, so jump t
191f0 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  o P2 */.        
19200 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
19210 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72   1;.          br
19220 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  eak;.        }. 
19230 20 20 20 20 20 20 20 2f 2a 20 49 66 20 77 65 20         /* If we 
19240 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
19250 2c 20 74 68 65 6e 20 74 68 65 20 50 33 20 76 61  , then the P3 va
19260 6c 75 65 20 6d 75 73 74 20 62 65 20 61 20 66 6c  lue must be a fl
19270 6f 61 74 69 6e 67 0a 20 20 20 20 20 20 20 20 2a  oating.        *
19280 2a 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 20  * point number. 
19290 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  */.        asser
192a0 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  t( (pIn3->flags 
192b0 26 20 4d 45 4d 5f 52 65 61 6c 29 21 3d 30 20 29  & MEM_Real)!=0 )
192c0 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  ;..        if( i
192d0 4b 65 79 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e  Key==SMALLEST_IN
192e0 54 36 34 20 26 26 20 28 70 49 6e 33 2d 3e 72 3c  T64 && (pIn3->r<
192f0 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 7c 7c 20  (double)iKey || 
19300 70 49 6e 33 2d 3e 72 3e 30 29 20 29 7b 0a 20 20  pIn3->r>0) ){.  
19310 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
19320 33 20 76 61 6c 75 65 20 69 73 20 74 6f 20 6c 61  3 value is to la
19330 72 67 65 20 69 6e 20 6d 61 67 6e 69 74 75 64 65  rge in magnitude
19340 20 74 6f 20 62 65 20 65 78 70 72 65 73 73 65 64   to be expressed
19350 20 61 73 20 61 6e 0a 20 20 20 20 20 20 20 20 20   as an.         
19360 20 2a 2a 20 69 6e 74 65 67 65 72 2e 20 2a 2f 0a   ** integer. */.
19370 20 20 20 20 20 20 20 20 20 20 72 65 73 20 3d 20            res = 
19380 31 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  1;.          if(
19390 20 70 49 6e 33 2d 3e 72 3c 30 20 29 7b 0a 20 20   pIn3->r<0 ){.  
193a0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f 63            if( oc
193b0 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 6f  ==OP_SeekGt || o
193c0 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a  c==OP_SeekGe ){.
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63                rc
193e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46   = sqlite3BtreeF
193f0 69 72 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  irst(pC->pCursor
19400 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
19410 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
19420 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
19430 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
19440 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  or;.            
19450 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  }.          }els
19460 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  e{.            i
19470 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74  f( oc==OP_SeekLt
19480 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
19490 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  e ){.           
194a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
194b0 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75  treeLast(pC->pCu
194c0 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
194d0 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72             if( r
194e0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
194f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
19500 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
19510 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
19520 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  }.          if( 
19530 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20  res ){.         
19540 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
19550 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  - 1;.          }
19560 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
19570 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  ;.        }else 
19580 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c  if( oc==OP_SeekL
19590 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  t || oc==OP_Seek
195a0 47 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  Ge ){.          
195b0 2f 2a 20 55 73 65 20 74 68 65 20 63 65 69 6c 69  /* Use the ceili
195c0 6e 67 28 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f  ng() function to
195d0 20 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69   convert real->i
195e0 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  nt */.          
195f0 69 66 28 20 70 49 6e 33 2d 3e 72 20 3e 20 28 64  if( pIn3->r > (d
19600 6f 75 62 6c 65 29 69 4b 65 79 20 29 20 69 4b 65  ouble)iKey ) iKe
19610 79 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  y++;.        }el
19620 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a  se{.          /*
19630 20 55 73 65 20 74 68 65 20 66 6c 6f 6f 72 28 29   Use the floor()
19640 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e   function to con
19650 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a  vert real->int *
19660 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  /.          asse
19670 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c  rt( oc==OP_SeekL
19680 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  e || oc==OP_Seek
19690 47 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Gt );.          
196a0 69 66 28 20 70 49 6e 33 2d 3e 72 20 3c 20 28 64  if( pIn3->r < (d
196b0 6f 75 62 6c 65 29 69 4b 65 79 20 29 20 69 4b 65  ouble)iKey ) iKe
196c0 79 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  y--;.        }. 
196d0 20 20 20 20 20 7d 20 0a 20 20 20 20 20 20 72 63       } .      rc
196e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
196f0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
19700 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75  ->pCursor, 0, (u
19710 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73  64)iKey, 0, &res
19720 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
19730 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
19740 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
19750 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
19760 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
19770 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
19780 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
19790 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  lid = 1;.       
197a0 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   pC->lastRowid =
197b0 20 69 4b 65 79 3b 0a 20 20 20 20 20 20 7d 0a 20   iKey;.      }. 
197c0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
197d0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
197e0 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 46 69 65  ;.      int nFie
197f0 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
19800 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
19810 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
19820 54 33 32 20 29 3b 0a 20 20 20 20 20 20 61 73 73  T32 );.      ass
19830 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b  ert( nField>0 );
19840 0a 20 20 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  .      r.pKeyInf
19850 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
19860 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69 65 6c 64  ;.      r.nField
19870 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a   = (u16)nField;.
19880 20 20 20 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50        if( oc==OP
19890 5f 53 65 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f  _SeekGt || oc==O
198a0 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20 20 20 20  P_SeekLe ){.    
198b0 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e      r.flags = UN
198c0 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 3b 0a  PACKED_INCRKEY;.
198d0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
198e0 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30       r.flags = 0
198f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
19900 72 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65  r.aMem = &p->aMe
19910 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
19920 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
19930 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
19940 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  d(pC->pCursor, &
19950 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  r, 0, 0, &res);.
19960 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
19970 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
19980 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
19990 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
199a0 20 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f    }.      pC->ro
199b0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
199c0 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65      }.    pC->de
199d0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
199e0 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
199f0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
19a00 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ALE;.#ifdef SQLI
19a10 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69  TE_TEST.    sqli
19a20 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
19a30 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69  ++;.#endif.    i
19a40 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65  f( oc==OP_SeekGe
19a50 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   || oc==OP_SeekG
19a60 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72  t ){.      if( r
19a70 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20  es<0 || (res==0 
19a80 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74  && oc==OP_SeekGt
19a90 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  ) ){.        rc 
19aa0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  = sqlite3BtreeNe
19ab0 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  xt(pC->pCursor, 
19ac0 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69  &res);.        i
19ad0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
19ae0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
19af0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
19b00 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
19b10 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20  alid = 0;.      
19b20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72  }else{.        r
19b30 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  es = 0;.      }.
19b40 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
19b50 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
19b60 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLt || oc==OP
19b70 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20  _SeekLe );.     
19b80 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72   if( res>0 || (r
19b90 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f  es==0 && oc==OP_
19ba0 53 65 65 6b 4c 74 29 20 29 7b 0a 20 20 20 20 20  SeekLt) ){.     
19bb0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
19bc0 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d  treePrevious(pC-
19bd0 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
19be0 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
19bf0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
19c00 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
19c10 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43  rror;.        pC
19c20 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
19c30 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   0;.      }else{
19c40 0a 20 20 20 20 20 20 20 20 2f 2a 20 72 65 73 20  .        /* res 
19c50 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74 69 76  might be negativ
19c60 65 20 62 65 63 61 75 73 65 20 74 68 65 20 74 61  e because the ta
19c70 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43  ble is empty.  C
19c80 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 20 20  heck to.        
19c90 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69  ** see if this i
19ca0 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20  s the case..    
19cb0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72      */.        r
19cc0 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  es = sqlite3Btre
19cd0 65 45 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f 72  eEof(pC->pCursor
19ce0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
19cf0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
19d00 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 69 66  ->p2>0 );.    if
19d10 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70  ( res ){.      p
19d20 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
19d30 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69  .    }.  }else i
19d40 66 28 20 21 70 43 2d 3e 70 73 65 75 64 6f 54 61  f( !pC->pseudoTa
19d50 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  ble ){.    /* Th
19d60 69 73 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20  is happens when 
19d70 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 6f 70  attempting to op
19d80 65 6e 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6d  en the sqlite3_m
19d90 61 73 74 65 72 20 74 61 62 6c 65 0a 20 20 20 20  aster table.    
19da0 2a 2a 20 66 6f 72 20 72 65 61 64 20 61 63 63 65  ** for read acce
19db0 73 73 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54  ss returns SQLIT
19dc0 45 5f 45 4d 50 54 59 2e 20 49 6e 20 74 68 69 73  E_EMPTY. In this
19dd0 20 63 61 73 65 20 61 6c 77 61 79 73 0a 20 20 20   case always.   
19de0 20 2a 2a 20 74 61 6b 65 20 74 68 65 20 6a 75 6d   ** take the jum
19df0 70 20 28 73 69 6e 63 65 20 74 68 65 72 65 20 61  p (since there a
19e00 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 69 6e  re no records in
19e10 20 74 68 65 20 74 61 62 6c 65 29 2e 0a 20 20 20   the table)..   
19e20 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   */.    pc = pOp
19e30 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
19e40 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
19e50 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50 32 20  ode: Seek P1 P2 
19e60 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69  * * *.**.** P1 i
19e70 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20  s an open table 
19e80 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73  cursor and P2 is
19e90 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65 72   a rowid integer
19ea0 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f  .  Arrange.** fo
19eb0 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20  r P1 to move so 
19ec0 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
19ed0 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69 76 65  o the rowid give
19ee0 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  n by P2..**.** T
19ef0 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20  his is actually 
19f00 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e  a deferred seek.
19f10 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c    Nothing actual
19f20 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c  ly happens until
19f30 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69  .** the cursor i
19f40 73 20 75 73 65 64 20 74 6f 20 72 65 61 64 20 61  s used to read a
19f50 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77   record.  That w
19f60 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a  ay, if no reads.
19f70 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e  ** occur, no unn
19f80 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70  ecessary I/O hap
19f90 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  pens..*/.case OP
19fa0 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69  _Seek: {    /* i
19fb0 6e 32 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20  n2 */.  int i = 
19fc0 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43  pOp->p1;.  VdbeC
19fd0 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73  ursor *pC;..  as
19fe0 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
19ff0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1a000 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d  pC = p->apCsr[i]
1a010 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1a020 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70  0 );.  if( pC->p
1a030 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20  Cursor!=0 ){.   
1a040 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1a050 61 62 6c 65 20 29 3b 0a 20 20 20 20 70 43 2d 3e  able );.    pC->
1a060 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
1a070 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
1a080 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  t = sqlite3VdbeI
1a090 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20  ntValue(pIn2);. 
1a0a0 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1a0b0 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  lid = 0;.    pC-
1a0c0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1a0d0 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
1a0e0 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64  ;.}.  ../* Opcod
1a0f0 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50  e: Found P1 P2 P
1a100 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69  3 * *.**.** Regi
1a110 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
1a120 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
1a130 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
1a140 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2e   P1 is an index.
1a150 0a 2a 2a 20 49 66 20 61 6e 20 65 6e 74 72 79 20  .** If an entry 
1a160 74 68 61 74 20 6d 61 74 63 68 65 73 20 74 68 65  that matches the
1a170 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1a180 65 72 20 70 33 20 65 78 69 73 74 73 20 69 6e 20  er p3 exists in 
1a190 50 31 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20  P1 then.** jump 
1a1a0 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65 20 50  to P2.  If the P
1a1b0 33 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74  3 value does not
1a1c0 20 6d 61 74 63 68 20 61 6e 79 20 65 6e 74 72 79   match any entry
1a1d0 20 69 6e 20 50 31 0a 2a 2a 20 74 68 65 6e 20 66   in P1.** then f
1a1e0 61 6c 6c 20 74 68 72 75 2e 20 20 54 68 65 20 50  all thru.  The P
1a1f0 31 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74  1 cursor is left
1a200 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
1a210 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 0a   matching entry.
1a220 2a 2a 20 69 66 20 69 74 20 65 78 69 73 74 73 2e  ** if it exists.
1a230 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
1a240 72 75 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20  ruction is used 
1a250 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
1a260 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 77 68 65   IN operator whe
1a270 72 65 20 74 68 65 0a 2a 2a 20 6c 65 66 74 2d 68  re the.** left-h
1a280 61 6e 64 20 73 69 64 65 20 69 73 20 61 20 53 45  and side is a SE
1a290 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
1a2a0 20 50 31 20 6d 61 79 20 62 65 20 61 20 74 72 75   P1 may be a tru
1a2b0 65 20 69 6e 64 65 78 2c 20 6f 72 20 69 74 0a 2a  e index, or it.*
1a2c0 2a 20 6d 61 79 20 62 65 20 61 20 74 65 6d 70 6f  * may be a tempo
1a2d0 72 61 72 79 20 69 6e 64 65 78 20 74 68 61 74 20  rary index that 
1a2e0 68 6f 6c 64 73 20 74 68 65 20 72 65 73 75 6c 74  holds the result
1a2f0 73 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 0a  s of the SELECT.
1a300 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 20  ** statement.   
1a310 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
1a320 20 69 73 20 61 6c 73 6f 20 75 73 65 64 20 74 6f   is also used to
1a330 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a   implement the.*
1a340 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  * DISTINCT keywo
1a350 72 64 20 69 6e 20 53 45 4c 45 43 54 20 73 74 61  rd in SELECT sta
1a360 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54  tements..**.** T
1a370 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1a380 63 68 65 63 6b 73 20 69 66 20 69 6e 64 65 78 20  checks if index 
1a390 50 31 20 63 6f 6e 74 61 69 6e 73 20 61 20 72 65  P1 contains a re
1a3a0 63 6f 72 64 20 66 6f 72 20 77 68 69 63 68 20 0a  cord for which .
1a3b0 2a 2a 20 74 68 65 20 66 69 72 73 74 20 4e 20 73  ** the first N s
1a3c0 65 72 69 61 6c 69 7a 65 64 20 76 61 6c 75 65 73  erialized values
1a3d0 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74   exactly match t
1a3e0 68 65 20 4e 20 73 65 72 69 61 6c 69 7a 65 64 20  he N serialized 
1a3f0 76 61 6c 75 65 73 0a 2a 2a 20 69 6e 20 74 68 65  values.** in the
1a400 20 72 65 63 6f 72 64 20 69 6e 20 72 65 67 69 73   record in regis
1a410 74 65 72 20 50 33 2c 20 77 68 65 72 65 20 4e 20  ter P3, where N 
1a420 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  is the total num
1a430 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e  ber of values in
1a440 0a 2a 2a 20 74 68 65 20 50 33 20 72 65 63 6f 72  .** the P3 recor
1a450 64 20 28 74 68 65 20 50 33 20 72 65 63 6f 72 64  d (the P3 record
1a460 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20   is a prefix of 
1a470 74 68 65 20 50 31 20 72 65 63 6f 72 64 29 2e 20  the P1 record). 
1a480 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1a490 20 4e 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69   NotFound, IsUni
1a4a0 71 75 65 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a  que, NotExists.*
1a4b0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  /./* Opcode: Not
1a4c0 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 2a  Found P1 P2 P3 *
1a4d0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65   *.**.** Registe
1a4e0 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
1a4f0 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
1a500 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 50 31   MakeRecord.  P1
1a510 20 69 73 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 2e   is.** an index.
1a520 20 20 49 66 20 6e 6f 20 65 6e 74 72 79 20 65 78    If no entry ex
1a530 69 73 74 73 20 69 6e 20 50 31 20 74 68 61 74 20  ists in P1 that 
1a540 6d 61 74 63 68 65 73 20 74 68 65 20 62 6c 6f 62  matches the blob
1a550 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f   then jump.** to
1a560 20 50 32 2e 20 20 49 66 20 61 6e 20 65 6e 74 72   P2.  If an entr
1a570 79 20 64 6f 65 73 20 65 78 69 73 74 69 6e 67 2c  y does existing,
1a580 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 20 20   fall through.  
1a590 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65  The cursor is le
1a5a0 66 74 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74  ft.** pointing t
1a5b0 6f 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  o the entry that
1a5c0 20 6d 61 74 63 68 65 73 2e 0a 2a 2a 0a 2a 2a 20   matches..**.** 
1a5d0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1a5e0 20 4e 6f 74 45 78 69 73 74 73 2c 20 49 73 55 6e   NotExists, IsUn
1a5f0 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ique.*/.case OP_
1a600 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20  NotFound:       
1a610 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1a620 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b  case OP_Found: {
1a630 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1a640 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 20   in3 */.  int i 
1a650 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e 74  = pOp->p1;.  int
1a660 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d   alreadyExists =
1a670 20 30 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72   0;.  VdbeCursor
1a680 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20   *pC;.  assert( 
1a690 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
1a6a0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1a6b0 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30  ( p->apCsr[i]!=0
1a6c0 20 29 3b 0a 20 20 69 66 28 20 28 70 43 20 3d 20   );.  if( (pC = 
1a6d0 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43  p->apCsr[i])->pC
1a6e0 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20 20  ursor!=0 ){.    
1a6f0 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 55 6e 70  int res;.    Unp
1a700 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64  ackedRecord *pId
1a710 78 4b 65 79 3b 0a 0a 20 20 20 20 61 73 73 65 72  xKey;..    asser
1a720 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
1a730 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
1a740 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
1a750 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 70  EM_Blob );.    p
1a760 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33  IdxKey = sqlite3
1a770 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b  VdbeRecordUnpack
1a780 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70  (pC->pKeyInfo, p
1a790 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c  In3->n, pIn3->z,
1a7a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7c0 20 20 20 20 20 20 20 61 54 65 6d 70 52 65 63 2c         aTempRec,
1a7d0 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63   sizeof(aTempRec
1a7e0 29 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78  ));.    if( pIdx
1a7f0 4b 65 79 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Key==0 ){.      
1a800 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
1a810 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e   }.    if( pOp->
1a820 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64  opcode==OP_Found
1a830 20 29 7b 0a 20 20 20 20 20 20 70 49 64 78 4b 65   ){.      pIdxKe
1a840 79 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41  y->flags |= UNPA
1a850 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43  CKED_PREFIX_MATC
1a860 48 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20  H;.    }.    rc 
1a870 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1a880 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1a890 3e 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65  >pCursor, pIdxKe
1a8a0 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  y, 0, 0, &res);.
1a8b0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44      sqlite3VdbeD
1a8c0 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65 63  eleteUnpackedRec
1a8d0 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20 20  ord(pIdxKey);.  
1a8e0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1a8f0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 62 72 65  _OK ){.      bre
1a900 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 6c  ak;.    }.    al
1a910 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72  readyExists = (r
1a920 65 73 3d 3d 30 29 3b 0a 20 20 20 20 70 43 2d 3e  es==0);.    pC->
1a930 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1a940 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
1a950 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1a960 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28  STALE;.  }.  if(
1a970 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1a980 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 69 66  _Found ){.    if
1a990 28 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20  ( alreadyExists 
1a9a0 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d  ) pc = pOp->p2 -
1a9b0 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   1;.  }else{.   
1a9c0 20 69 66 28 20 21 61 6c 72 65 61 64 79 45 78 69   if( !alreadyExi
1a9d0 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  sts ) pc = pOp->
1a9e0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
1a9f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1aa00 65 3a 20 49 73 55 6e 69 71 75 65 20 50 31 20 50  e: IsUnique P1 P
1aa10 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
1aa20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 70 65  Cursor P1 is ope
1aa30 6e 20 6f 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20  n on an index.  
1aa40 53 6f 20 69 74 20 68 61 73 20 6e 6f 20 64 61 74  So it has no dat
1aa50 61 20 61 6e 64 20 69 74 73 20 6b 65 79 20 63 6f  a and its key co
1aa60 6e 73 69 73 74 73 20 0a 2a 2a 20 6f 66 20 61 20  nsists .** of a 
1aa70 72 65 63 6f 72 64 20 67 65 6e 65 72 61 74 65 64  record generated
1aa80 20 62 79 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72   by OP_MakeRecor
1aa90 64 20 77 68 65 72 65 20 74 68 65 20 6c 61 73 74  d where the last
1aaa0 20 66 69 65 6c 64 20 69 73 20 74 68 65 20 0a 2a   field is the .*
1aab0 2a 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 65  * rowid of the e
1aac0 6e 74 72 79 20 74 68 61 74 20 74 68 65 20 69 6e  ntry that the in
1aad0 64 65 78 20 72 65 66 65 72 73 20 74 6f 2e 0a 2a  dex refers to..*
1aae0 2a 0a 2a 2a 20 54 68 65 20 50 33 20 72 65 67 69  *.** The P3 regi
1aaf0 73 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 6e  ster contains an
1ab00 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20   integer record 
1ab10 6e 75 6d 62 65 72 2e 20 43 61 6c 6c 20 74 68 69  number. Call thi
1ab20 73 20 72 65 63 6f 72 64 20 0a 2a 2a 20 6e 75 6d  s record .** num
1ab30 62 65 72 20 52 2e 20 52 65 67 69 73 74 65 72 20  ber R. Register 
1ab40 50 34 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P4 is the first 
1ab50 69 6e 20 61 20 73 65 74 20 6f 66 20 4e 20 63 6f  in a set of N co
1ab60 6e 74 69 67 75 6f 75 73 20 72 65 67 69 73 74 65  ntiguous registe
1ab70 72 73 0a 2a 2a 20 74 68 61 74 20 6d 61 6b 65 20  rs.** that make 
1ab80 75 70 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  up an unpacked i
1ab90 6e 64 65 78 20 6b 65 79 20 74 68 61 74 20 63 61  ndex key that ca
1aba0 6e 20 62 65 20 75 73 65 64 20 77 69 74 68 20 63  n be used with c
1abb0 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
1abc0 20 76 61 6c 75 65 20 6f 66 20 4e 20 63 61 6e 20   value of N can 
1abd0 62 65 20 69 6e 66 65 72 72 65 64 20 66 72 6f 6d  be inferred from
1abe0 20 74 68 65 20 63 75 72 73 6f 72 2e 20 4e 20 69   the cursor. N i
1abf0 6e 63 6c 75 64 65 73 20 74 68 65 20 72 6f 77 69  ncludes the rowi
1ac00 64 0a 2a 2a 20 76 61 6c 75 65 20 61 70 70 65 6e  d.** value appen
1ac10 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f  ded to the end o
1ac20 66 20 74 68 65 20 69 6e 64 65 78 20 72 65 63 6f  f the index reco
1ac30 72 64 2e 20 54 68 69 73 20 72 6f 77 69 64 20 76  rd. This rowid v
1ac40 61 6c 75 65 20 6d 61 79 0a 2a 2a 20 6f 72 20 6d  alue may.** or m
1ac50 61 79 20 6e 6f 74 20 62 65 20 74 68 65 20 73 61  ay not be the sa
1ac60 6d 65 20 61 73 20 52 2e 0a 2a 2a 0a 2a 2a 20 49  me as R..**.** I
1ac70 66 20 61 6e 79 20 6f 66 20 74 68 65 20 4e 20 72  f any of the N r
1ac80 65 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69  egisters beginni
1ac90 6e 67 20 77 69 74 68 20 72 65 67 69 73 74 65 72  ng with register
1aca0 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e   P4 contains a N
1acb0 55 4c 4c 0a 2a 2a 20 76 61 6c 75 65 2c 20 6a 75  ULL.** value, ju
1acc0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1acd0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65  o P2..**.** Othe
1ace0 72 77 69 73 65 2c 20 74 68 69 73 20 69 6e 73 74  rwise, this inst
1acf0 72 75 63 74 69 6f 6e 20 63 68 65 63 6b 73 20 69  ruction checks i
1ad00 66 20 63 75 72 73 6f 72 20 50 31 20 63 6f 6e 74  f cursor P1 cont
1ad10 61 69 6e 73 20 61 6e 20 65 6e 74 72 79 0a 2a 2a  ains an entry.**
1ad20 20 77 68 65 72 65 20 74 68 65 20 66 69 72 73 74   where the first
1ad30 20 28 4e 2d 31 29 20 66 69 65 6c 64 73 20 6d 61   (N-1) fields ma
1ad40 74 63 68 20 62 75 74 20 74 68 65 20 72 6f 77 69  tch but the rowi
1ad50 64 20 76 61 6c 75 65 20 61 74 20 74 68 65 20 65  d value at the e
1ad60 6e 64 0a 2a 2a 20 6f 66 20 74 68 65 20 69 6e 64  nd.** of the ind
1ad70 65 78 20 65 6e 74 72 79 20 69 73 20 6e 6f 74 20  ex entry is not 
1ad80 52 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  R. If there is n
1ad90 6f 20 73 75 63 68 20 65 6e 74 72 79 2c 20 63 6f  o such entry, co
1ada0 6e 74 72 6f 6c 20 6a 75 6d 70 73 0a 2a 2a 20 74  ntrol jumps.** t
1adb0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
1adc0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65  . Otherwise, the
1add0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63 6f   rowid of the co
1ade0 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65 78 0a  nflicting index.
1adf0 2a 2a 20 65 6e 74 72 79 20 69 73 20 63 6f 70 69  ** entry is copi
1ae00 65 64 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  ed to register P
1ae10 33 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 66 61  3 and control fa
1ae20 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74  lls through to t
1ae30 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72  he next.** instr
1ae40 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  uction..**.** Se
1ae50 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64  e also: NotFound
1ae60 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 46 6f 75  , NotExists, Fou
1ae70 6e 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73  nd.*/.case OP_Is
1ae80 55 6e 69 71 75 65 3a 20 7b 20 20 20 20 20 20 20  Unique: {       
1ae90 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1aea0 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62  .  int ii;.  Vdb
1aeb0 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20  eCursor *pCx;.  
1aec0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1aed0 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20  .  int nField;. 
1aee0 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 26 70 2d   Mem *aMem = &p-
1aef0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 34 2e 69 5d  >aMem[pOp->p4.i]
1af00 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74  ;..  /* Assert t
1af10 68 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 6f  hat the values o
1af20 66 20 70 61 72 61 6d 65 74 65 72 73 20 50 31 20  f parameters P1 
1af30 61 6e 64 20 50 34 20 61 72 65 20 69 6e 20 72 61  and P4 are in ra
1af40 6e 67 65 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74  nge. */.  assert
1af50 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1af60 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73  4_INT32 );.  ass
1af70 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30  ert( pOp->p4.i>0
1af80 20 26 26 20 70 4f 70 2d 3e 70 34 2e 69 3c 3d 70   && pOp->p4.i<=p
1af90 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61 73 73 65  ->nMem );.  asse
1afa0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1afb0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1afc0 72 73 6f 72 20 29 3b 0a 0a 20 20 2f 2a 20 46 69  rsor );..  /* Fi
1afd0 6e 64 20 74 68 65 20 69 6e 64 65 78 20 63 75 72  nd the index cur
1afe0 73 6f 72 2e 20 2a 2f 0a 20 20 70 43 78 20 3d 20  sor. */.  pCx = 
1aff0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1b000 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78  ];.  assert( pCx
1b010 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1b020 3d 3d 30 20 29 3b 0a 20 20 70 43 78 2d 3e 73 65  ==0 );.  pCx->se
1b030 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20  ekResult = 0;.  
1b040 70 43 78 2d 3e 63 61 63 68 65 53 74 61 74 75 73  pCx->cacheStatus
1b050 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1b060 20 20 70 43 72 73 72 20 3d 20 70 43 78 2d 3e 70    pCrsr = pCx->p
1b070 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 49 66  Cursor;..  /* If
1b080 20 61 6e 79 20 6f 66 20 74 68 65 20 76 61 6c 75   any of the valu
1b090 65 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74 61 6b  es are NULL, tak
1b0a0 65 20 74 68 65 20 6a 75 6d 70 2e 20 2a 2f 0a 20  e the jump. */. 
1b0b0 20 6e 46 69 65 6c 64 20 3d 20 70 43 78 2d 3e 70   nField = pCx->p
1b0c0 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 3b  KeyInfo->nField;
1b0d0 0a 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c  .  for(ii=0; ii<
1b0e0 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20  nField; ii++){. 
1b0f0 20 20 20 69 66 28 20 61 4d 65 6d 5b 69 69 5d 2e     if( aMem[ii].
1b100 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
1b110 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
1b120 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1b130 20 20 70 43 72 73 72 20 3d 20 30 3b 0a 20 20 20    pCrsr = 0;.   
1b140 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
1b150 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 28 61    }.  assert( (a
1b160 4d 65 6d 5b 6e 46 69 65 6c 64 5d 2e 66 6c 61 67  Mem[nField].flag
1b170 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
1b180 20 29 3b 0a 0a 20 20 69 66 28 20 70 43 72 73 72   );..  if( pCrsr
1b190 21 3d 30 20 29 7b 0a 20 20 20 20 55 6e 70 61 63  !=0 ){.    Unpac
1b1a0 6b 65 64 52 65 63 6f 72 64 20 72 3b 20 20 20 20  kedRecord r;    
1b1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b1c0 20 42 2d 54 72 65 65 20 69 6e 64 65 78 20 73 65   B-Tree index se
1b1d0 61 72 63 68 20 6b 65 79 20 2a 2f 0a 20 20 20 20  arch key */.    
1b1e0 69 36 34 20 52 3b 20 20 20 20 20 20 20 20 20 20  i64 R;          
1b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b200 20 20 20 2f 2a 20 52 6f 77 69 64 20 73 74 6f 72     /* Rowid stor
1b210 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
1b220 33 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 50 6f 70  3 */..    /* Pop
1b230 75 6c 61 74 65 20 74 68 65 20 69 6e 64 65 78 20  ulate the index 
1b240 73 65 61 72 63 68 20 6b 65 79 2e 20 2a 2f 0a 20  search key. */. 
1b250 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
1b260 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20  pCx->pKeyInfo;. 
1b270 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 6e 46     r.nField = nF
1b280 69 65 6c 64 20 2b 20 31 3b 0a 20 20 20 20 72 2e  ield + 1;.    r.
1b290 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44  flags = UNPACKED
1b2a0 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48 3b 0a  _PREFIX_SEARCH;.
1b2b0 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 61 4d 65      r.aMem = aMe
1b2c0 6d 3b 0a 0a 20 20 20 20 2f 2a 20 45 78 74 72 61  m;..    /* Extra
1b2d0 63 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ct the value of 
1b2e0 52 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  R from register 
1b2f0 50 33 2e 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  P3. */.    sqlit
1b300 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
1b310 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 52  ify(pIn3);.    R
1b320 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 0a 20   = pIn3->u.i;.. 
1b330 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65     /* Search the
1b340 20 42 2d 54 72 65 65 20 69 6e 64 65 78 2e 20 49   B-Tree index. I
1b350 66 20 6e 6f 20 63 6f 6e 66 6c 69 63 74 69 6e 67  f no conflicting
1b360 20 72 65 63 6f 72 64 20 69 73 20 66 6f 75 6e 64   record is found
1b370 2c 20 6a 75 6d 70 0a 20 20 20 20 2a 2a 20 74 6f  , jump.    ** to
1b380 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
1b390 63 6f 70 79 20 74 68 65 20 72 6f 77 69 64 20 6f  copy the rowid o
1b3a0 66 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e  f the conflictin
1b3b0 67 20 72 65 63 6f 72 64 20 74 6f 0a 20 20 20 20  g record to.    
1b3c0 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33 20 61  ** register P3 a
1b3d0 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  nd fall through 
1b3e0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
1b3f0 72 75 63 74 69 6f 6e 2e 20 20 2a 2f 0a 20 20 20  ruction.  */.   
1b400 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1b410 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1b420 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30  (pCrsr, &r, 0, 0
1b430 2c 20 26 70 43 78 2d 3e 73 65 65 6b 52 65 73 75  , &pCx->seekResu
1b440 6c 74 29 3b 0a 20 20 20 20 69 66 28 20 28 72 2e  lt);.    if( (r.
1b450 66 6c 61 67 73 20 26 20 55 4e 50 41 43 4b 45 44  flags & UNPACKED
1b460 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48 29 20  _PREFIX_SEARCH) 
1b470 7c 7c 20 72 2e 72 6f 77 69 64 3d 3d 52 20 29 7b  || r.rowid==R ){
1b480 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
1b490 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c  >p2 - 1;.    }el
1b4a0 73 65 7b 0a 20 20 20 20 20 20 70 49 6e 33 2d 3e  se{.      pIn3->
1b4b0 75 2e 69 20 3d 20 72 2e 72 6f 77 69 64 3b 0a 20  u.i = r.rowid;. 
1b4c0 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
1b4d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1b4e0 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50 32 20  NotExists P1 P2 
1b4f0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 55 73 65  P3 * *.**.** Use
1b500 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1b510 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1b520 20 69 6e 74 65 67 65 72 20 6b 65 79 2e 20 20 49   integer key.  I
1b530 66 20 61 20 72 65 63 6f 72 64 20 0a 2a 2a 20 77  f a record .** w
1b540 69 74 68 20 74 68 61 74 20 6b 65 79 20 64 6f 65  ith that key doe
1b550 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74  s not exist in t
1b560 61 62 6c 65 20 6f 66 20 50 31 2c 20 74 68 65 6e  able of P1, then
1b570 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a   jump to P2. .**
1b580 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 64   If the record d
1b590 6f 65 73 20 65 78 69 73 74 2c 20 74 68 65 6e 20  oes exist, then 
1b5a0 66 61 6c 6c 20 74 68 72 75 2e 20 20 54 68 65 20  fall thru.  The 
1b5b0 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 0a  cursor is left .
1b5c0 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  ** pointing to t
1b5d0 68 65 20 72 65 63 6f 72 64 20 69 66 20 69 74 20  he record if it 
1b5e0 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  exists..**.** Th
1b5f0 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
1b600 77 65 65 6e 20 74 68 69 73 20 6f 70 65 72 61 74  ween this operat
1b610 69 6f 6e 20 61 6e 64 20 4e 6f 74 46 6f 75 6e 64  ion and NotFound
1b620 20 69 73 20 74 68 61 74 20 74 68 69 73 0a 2a 2a   is that this.**
1b630 20 6f 70 65 72 61 74 69 6f 6e 20 61 73 73 75 6d   operation assum
1b640 65 73 20 74 68 65 20 6b 65 79 20 69 73 20 61 6e  es the key is an
1b650 20 69 6e 74 65 67 65 72 20 61 6e 64 20 74 68 61   integer and tha
1b660 74 20 50 31 20 69 73 20 61 20 74 61 62 6c 65 20  t P1 is a table 
1b670 77 68 65 72 65 61 73 0a 2a 2a 20 4e 6f 74 46 6f  whereas.** NotFo
1b680 75 6e 64 20 61 73 73 75 6d 65 73 20 6b 65 79 20  und assumes key 
1b690 69 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  is a blob constr
1b6a0 75 63 74 65 64 20 66 72 6f 6d 20 4d 61 6b 65 52  ucted from MakeR
1b6b0 65 63 6f 72 64 20 61 6e 64 0a 2a 2a 20 50 31 20  ecord and.** P1 
1b6c0 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a 0a  is an index..**.
1b6d0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1b6e0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 49 73  nd, NotFound, Is
1b6f0 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f  Unique.*/.case O
1b700 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b 20 20  P_NotExists: {  
1b710 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1b720 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20  n3 */.  int i = 
1b730 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43  pOp->p1;.  VdbeC
1b740 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
1b750 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
1b760 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20  assert( i>=0 && 
1b770 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  i<p->nCursor );.
1b780 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
1b790 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66  sr[i]!=0 );.  if
1b7a0 28 20 28 70 43 72 73 72 20 3d 20 28 70 43 20 3d  ( (pCrsr = (pC =
1b7b0 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70   p->apCsr[i])->p
1b7c0 43 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20  Cursor)!=0 ){.  
1b7d0 20 20 69 6e 74 20 72 65 73 20 3d 20 30 3b 0a 20    int res = 0;. 
1b7e0 20 20 20 75 36 34 20 69 4b 65 79 3b 0a 20 20 20     u64 iKey;.   
1b7f0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
1b800 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
1b810 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 2d  ;.    assert( p-
1b820 3e 61 70 43 73 72 5b 69 5d 2d 3e 69 73 54 61 62  >apCsr[i]->isTab
1b830 6c 65 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d  le );.    iKey =
1b840 20 69 6e 74 54 6f 4b 65 79 28 70 49 6e 33 2d 3e   intToKey(pIn3->
1b850 75 2e 69 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  u.i);.    rc = s
1b860 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1b870 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
1b880 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65   0, iKey, 0, &re
1b890 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6c 61 73 74  s);.    pC->last
1b8a0 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e  Rowid = pIn3->u.
1b8b0 69 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  i;.    pC->rowid
1b8c0 49 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30  IsValid = res==0
1b8d0 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 6e   ?1:0;.    pC->n
1b8e0 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ullRow = 0;.    
1b8f0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1b900 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
1b910 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
1b920 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 69  oveto = 0;.    i
1b930 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20  f( res!=0 ){.   
1b940 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1b950 2d 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72  - 1;.      asser
1b960 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  t( pC->rowidIsVa
1b970 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a  lid==0 );.    }.
1b980 20 20 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75      pC->seekResu
1b990 6c 74 20 3d 20 72 65 73 3b 0a 20 20 7d 65 6c 73  lt = res;.  }els
1b9a0 65 20 69 66 28 20 21 70 43 2d 3e 70 73 65 75 64  e if( !pC->pseud
1b9b0 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  oTable ){.    /*
1b9c0 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 77 68   This happens wh
1b9d0 65 6e 20 61 6e 20 61 74 74 65 6d 70 74 20 74 6f  en an attempt to
1b9e0 20 6f 70 65 6e 20 61 20 72 65 61 64 20 63 75 72   open a read cur
1b9f0 73 6f 72 20 6f 6e 20 74 68 65 20 0a 20 20 20 20  sor on the .    
1ba00 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  ** sqlite_master
1ba10 20 74 61 62 6c 65 20 72 65 74 75 72 6e 73 20 53   table returns S
1ba20 51 4c 49 54 45 5f 45 4d 50 54 59 2e 0a 20 20 20  QLITE_EMPTY..   
1ba30 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
1ba40 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
1ba50 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1ba60 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28  - 1;.    assert(
1ba70 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1ba80 64 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e  d==0 );.    pC->
1ba90 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a  seekResult = 0;.
1baa0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1bab0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65  /* Opcode: Seque
1bac0 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
1bad0 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e  **.** Find the n
1bae0 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
1baf0 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f  quence number fo
1bb00 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
1bb10 57 72 69 74 65 20 74 68 65 20 73 65 71 75 65 6e  Write the sequen
1bb20 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72  ce number into r
1bb30 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54  egister P2..** T
1bb40 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  he sequence numb
1bb50 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  er on the cursor
1bb60 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
1bb70 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e  after this.** in
1bb80 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a  struction.  .*/.
1bb90 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65  case OP_Sequence
1bba0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
1bbb0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
1bbc0 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f   */.  int i = pO
1bbd0 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28  p->p1;.  assert(
1bbe0 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
1bbf0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1bc00 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d  t( p->apCsr[i]!=
1bc10 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  0 );.  pOut->u.i
1bc20 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 2d 3e   = p->apCsr[i]->
1bc30 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 4d 65  seqCount++;.  Me
1bc40 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
1bc50 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62  t, MEM_Int);.  b
1bc60 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
1bc70 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31  ode: NewRowid P1
1bc80 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
1bc90 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67   Get a new integ
1bca0 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  er record number
1bcb0 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29   (a.k.a "rowid")
1bcc0 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79   used as the key
1bcd0 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   to a table..** 
1bce0 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  The record numbe
1bcf0 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  r is not previou
1bd00 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65  sly used as a ke
1bd10 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
1bd20 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20  e.** table that 
1bd30 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
1bd40 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65   to.  The new re
1bd50 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77  cord number is w
1bd60 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65  ritten.** writte
1bd70 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  n to register P2
1bd80 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20  ..**.** If P3>0 
1bd90 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65 67  then P3 is a reg
1bda0 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73  ister that holds
1bdb0 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 72 65   the largest pre
1bdc0 76 69 6f 75 73 6c 79 0a 2a 2a 20 67 65 6e 65 72  viously.** gener
1bdd0 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62  ated record numb
1bde0 65 72 2e 20 20 4e 6f 20 6e 65 77 20 72 65 63 6f  er.  No new reco
1bdf0 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 20 61  rd numbers are a
1be00 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73  llowed to be les
1be10 73 0a 2a 2a 20 74 68 61 6e 20 74 68 69 73 20 76  s.** than this v
1be20 61 6c 75 65 2e 20 20 57 68 65 6e 20 74 68 69 73  alue.  When this
1be30 20 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69   value reaches i
1be40 74 73 20 6d 61 78 69 6d 75 6d 2c 20 61 20 53 51  ts maximum, a SQ
1be50 4c 49 54 45 5f 46 55 4c 4c 0a 2a 2a 20 65 72 72  LITE_FULL.** err
1be60 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e  or is generated.
1be70 20 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65    The P3 registe
1be80 72 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74  r is updated wit
1be90 68 20 74 68 65 20 67 65 6e 65 72 61 74 65 64 0a  h the generated.
1bea0 2a 2a 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ** record number
1beb0 2e 20 20 54 68 69 73 20 50 33 20 6d 65 63 68 61  .  This P3 mecha
1bec0 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20  nism is used to 
1bed0 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74  help implement t
1bee0 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d  he.** AUTOINCREM
1bef0 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  ENT feature..*/.
1bf00 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64  case OP_NewRowid
1bf10 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
1bf20 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
1bf30 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f   */.  int i = pO
1bf40 70 2d 3e 70 31 3b 0a 20 20 69 36 34 20 76 20 3d  p->p1;.  i64 v =
1bf50 20 30 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72   0;.  VdbeCursor
1bf60 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20   *pC;.  assert( 
1bf70 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
1bf80 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1bf90 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30  ( p->apCsr[i]!=0
1bfa0 20 29 3b 0a 20 20 69 66 28 20 28 70 43 20 3d 20   );.  if( (pC = 
1bfb0 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43  p->apCsr[i])->pC
1bfc0 75 72 73 6f 72 3d 3d 30 20 29 7b 0a 20 20 20 20  ursor==0 ){.    
1bfd0 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74  /* The zero init
1bfe0 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65  ialization above
1bff0 20 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20   is all that is 
1c000 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73  needed */.  }els
1c010 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65  e{.    /* The ne
1c020 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f  xt rowid or reco
1c030 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65  rd number (diffe
1c040 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74  rent terms for t
1c050 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74  he same.    ** t
1c060 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65  hing) is obtaine
1c070 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20  d in a two-step 
1c080 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a  algorithm..    *
1c090 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77  *.    ** First w
1c0a0 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e  e attempt to fin
1c0b0 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  d the largest ex
1c0c0 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64  isting rowid and
1c0d0 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   add one.    ** 
1c0e0 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66  to that.  But if
1c0f0 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
1c100 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61  sting rowid is a
1c110 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d  lready the maxim
1c120 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69  um.    ** positi
1c130 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68  ve integer, we h
1c140 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f  ave to fall thro
1c150 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e  ugh to the secon
1c160 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69  d.    ** probabi
1c170 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d  listic algorithm
1c180 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54  .    **.    ** T
1c190 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69  he second algori
1c1a0 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74  thm is to select
1c1b0 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64   a rowid at rand
1c1c0 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20  om and see if.  
1c1d0 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20    ** it already 
1c1e0 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61  exists in the ta
1c1f0 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73  ble.  If it does
1c200 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68   not exist, we h
1c210 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65  ave.    ** succe
1c220 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61  eded.  If the ra
1c230 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20  ndom rowid does 
1c240 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74  exist, we select
1c250 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a   a new one.    *
1c260 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c  * and try again,
1c270 20 75 70 20 74 6f 20 31 30 30 30 20 74 69 6d 65   up to 1000 time
1c280 73 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  s..    **.    **
1c290 20 46 6f 72 20 61 20 74 61 62 6c 65 20 77 69 74   For a table wit
1c2a0 68 20 6c 65 73 73 20 74 68 61 6e 20 32 20 62 69  h less than 2 bi
1c2b0 6c 6c 69 6f 6e 20 65 6e 74 72 69 65 73 2c 20 74  llion entries, t
1c2c0 68 65 20 70 72 6f 62 61 62 69 6c 69 74 79 0a 20  he probability. 
1c2d0 20 20 20 2a 2a 20 6f 66 20 6e 6f 74 20 66 69 6e     ** of not fin
1c2e0 64 69 6e 67 20 61 20 75 6e 75 73 65 64 20 72 6f  ding a unused ro
1c2f0 77 69 64 20 69 73 20 61 62 6f 75 74 20 31 2e 30  wid is about 1.0
1c300 65 2d 33 30 30 2e 20 20 54 68 69 73 20 69 73 20  e-300.  This is 
1c310 61 20 0a 20 20 20 20 2a 2a 20 6e 6f 6e 2d 7a 65  a .    ** non-ze
1c320 72 6f 20 70 72 6f 62 61 62 69 6c 69 74 79 2c 20  ro probability, 
1c330 62 75 74 20 69 74 20 69 73 20 73 74 69 6c 6c 20  but it is still 
1c340 76 61 6e 69 73 68 69 6e 67 6c 79 20 73 6d 61 6c  vanishingly smal
1c350 6c 20 61 6e 64 20 73 68 6f 75 6c 64 0a 20 20 20  l and should.   
1c360 20 2a 2a 20 6e 65 76 65 72 20 63 61 75 73 65 20   ** never cause 
1c370 61 20 70 72 6f 62 6c 65 6d 2e 20 20 59 6f 75 20  a problem.  You 
1c380 61 72 65 20 6d 75 63 68 2c 20 6d 75 63 68 20 6d  are much, much m
1c390 6f 72 65 20 6c 69 6b 65 6c 79 20 74 6f 20 68 61  ore likely to ha
1c3a0 76 65 20 61 0a 20 20 20 20 2a 2a 20 68 61 72 64  ve a.    ** hard
1c3b0 77 61 72 65 20 66 61 69 6c 75 72 65 20 74 68 61  ware failure tha
1c3c0 6e 20 66 6f 72 20 74 68 69 73 20 61 6c 67 6f 72  n for this algor
1c3d0 69 74 68 6d 20 74 6f 20 66 61 69 6c 2e 0a 20 20  ithm to fail..  
1c3e0 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20    **.    ** The 
1c3f0 61 6e 61 6c 79 73 69 73 20 69 6e 20 74 68 65 20  analysis in the 
1c400 70 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61  previous paragra
1c410 70 68 20 61 73 73 75 6d 65 73 20 74 68 61 74 20  ph assumes that 
1c420 79 6f 75 20 68 61 76 65 20 61 20 67 6f 6f 64 0a  you have a good.
1c430 20 20 20 20 2a 2a 20 73 6f 75 72 63 65 20 6f 66      ** source of
1c440 20 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 73 2e   random numbers.
1c450 20 20 49 73 20 61 20 6c 69 62 72 61 72 79 20 66    Is a library f
1c460 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 20 6c 72 61  unction like lra
1c470 6e 64 34 38 28 29 0a 20 20 20 20 2a 2a 20 67 6f  nd48().    ** go
1c480 6f 64 20 65 6e 6f 75 67 68 3f 20 20 4d 61 79 62  od enough?  Mayb
1c490 65 2e 20 4d 61 79 62 65 20 6e 6f 74 2e 20 49 74  e. Maybe not. It
1c4a0 27 73 20 68 61 72 64 20 74 6f 20 6b 6e 6f 77 20  's hard to know 
1c4b0 77 68 65 74 68 65 72 20 74 68 65 72 65 0a 20 20  whether there.  
1c4c0 20 20 2a 2a 20 6d 69 67 68 74 20 62 65 20 73 75    ** might be su
1c4d0 62 74 6c 65 20 62 75 67 73 20 69 73 20 73 6f 6d  btle bugs is som
1c4e0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
1c4f0 73 20 6f 66 20 6c 72 61 6e 64 34 38 28 29 20 74  s of lrand48() t
1c500 68 61 74 0a 20 20 20 20 2a 2a 20 63 6f 75 6c 64  hat.    ** could
1c510 20 63 61 75 73 65 20 70 72 6f 62 6c 65 6d 73 2e   cause problems.
1c520 20 54 6f 20 61 76 6f 69 64 20 75 6e 63 65 72 74   To avoid uncert
1c530 61 69 6e 74 79 2c 20 53 51 4c 69 74 65 20 75 73  ainty, SQLite us
1c540 65 73 20 69 74 73 20 6f 77 6e 20 0a 20 20 20 20  es its own .    
1c550 2a 2a 20 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72  ** random number
1c560 20 67 65 6e 65 72 61 74 6f 72 20 62 61 73 65 64   generator based
1c570 20 6f 6e 20 74 68 65 20 52 43 34 20 61 6c 67 6f   on the RC4 algo
1c580 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20  rithm..    **.  
1c590 20 20 2a 2a 20 54 6f 20 70 72 6f 6d 6f 74 65 20    ** To promote 
1c5a0 6c 6f 63 61 6c 69 74 79 20 6f 66 20 72 65 66 65  locality of refe
1c5b0 72 65 6e 63 65 20 66 6f 72 20 72 65 70 65 74 69  rence for repeti
1c5c0 74 69 76 65 20 69 6e 73 65 72 74 73 2c 20 74 68  tive inserts, th
1c5d0 65 0a 20 20 20 20 2a 2a 20 66 69 72 73 74 20 66  e.    ** first f
1c5e0 65 77 20 61 74 74 65 6d 70 74 73 20 61 74 20 63  ew attempts at c
1c5f0 68 6f 6f 73 69 6e 67 20 61 20 72 61 6e 64 6f 6d  hoosing a random
1c600 20 72 6f 77 69 64 20 70 69 63 6b 20 76 61 6c 75   rowid pick valu
1c610 65 73 20 6a 75 73 74 20 61 20 6c 69 74 74 6c 65  es just a little
1c620 0a 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74  .    ** larger t
1c630 68 61 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73  han the previous
1c640 20 72 6f 77 69 64 2e 20 20 54 68 69 73 20 68 61   rowid.  This ha
1c650 73 20 62 65 65 6e 20 73 68 6f 77 6e 20 65 78 70  s been shown exp
1c660 65 72 69 6d 65 6e 74 61 6c 6c 79 0a 20 20 20 20  erimentally.    
1c670 2a 2a 20 74 6f 20 64 6f 75 62 6c 65 20 74 68 65  ** to double the
1c680 20 73 70 65 65 64 20 6f 66 20 74 68 65 20 43 4f   speed of the CO
1c690 50 59 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 20 20  PY operation..  
1c6a0 20 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 73    */.    int res
1c6b0 3d 30 2c 20 72 78 3d 53 51 4c 49 54 45 5f 4f 4b  =0, rx=SQLITE_OK
1c6c0 2c 20 63 6e 74 3b 0a 20 20 20 20 69 36 34 20 78  , cnt;.    i64 x
1c6d0 3b 0a 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20  ;.    cnt = 0;. 
1c6e0 20 20 20 69 66 28 20 28 73 71 6c 69 74 65 33 42     if( (sqlite3B
1c6f0 74 72 65 65 46 6c 61 67 73 28 70 43 2d 3e 70 43  treeFlags(pC->pC
1c700 75 72 73 6f 72 29 26 28 42 54 52 45 45 5f 49 4e  ursor)&(BTREE_IN
1c710 54 4b 45 59 7c 42 54 52 45 45 5f 5a 45 52 4f 44  TKEY|BTREE_ZEROD
1c720 41 54 41 29 29 20 21 3d 0a 20 20 20 20 20 20 20  ATA)) !=.       
1c730 20 20 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 20     BTREE_INTKEY 
1c740 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
1c750 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
1c760 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  T;.      goto ab
1c770 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1c780 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  ;.    }.    asse
1c790 72 74 28 20 28 73 71 6c 69 74 65 33 42 74 72 65  rt( (sqlite3Btre
1c7a0 65 46 6c 61 67 73 28 70 43 2d 3e 70 43 75 72 73  eFlags(pC->pCurs
1c7b0 6f 72 29 20 26 20 42 54 52 45 45 5f 49 4e 54 4b  or) & BTREE_INTK
1c7c0 45 59 29 21 3d 30 20 29 3b 0a 20 20 20 20 61 73  EY)!=0 );.    as
1c7d0 73 65 72 74 28 20 28 73 71 6c 69 74 65 33 42 74  sert( (sqlite3Bt
1c7e0 72 65 65 46 6c 61 67 73 28 70 43 2d 3e 70 43 75  reeFlags(pC->pCu
1c7f0 72 73 6f 72 29 20 26 20 42 54 52 45 45 5f 5a 45  rsor) & BTREE_ZE
1c800 52 4f 44 41 54 41 29 3d 3d 30 20 29 3b 0a 0a 23  RODATA)==0 );..#
1c810 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42  ifdef SQLITE_32B
1c820 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66  IT_ROWID.#   def
1c830 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78  ine MAX_ROWID 0x
1c840 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20  7fffffff.#else. 
1c850 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69     /* Some compi
1c860 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62  lers complain ab
1c870 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66  out constants of
1c880 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66   the form 0x7fff
1c890 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20  ffffffffffff..  
1c8a0 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70    ** Others comp
1c8b0 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66  lain about 0x7ff
1c8c0 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c  ffffffffffffffLL
1c8d0 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
1c8e0 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20   macro seems.   
1c8f0 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74   ** to provide t
1c900 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c  he constant whil
1c910 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d  e making all com
1c920 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20  pilers happy..  
1c930 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20    */.#   define 
1c940 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29  MAX_ROWID  (i64)
1c950 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66 66  ( (((u64)0x7ffff
1c960 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34  fff)<<32) | (u64
1c970 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23 65  )0xffffffff ).#e
1c980 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70  ndif..    if( !p
1c990 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
1c9a0 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73  d ){.      v = s
1c9b0 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 43 61  qlite3BtreeGetCa
1c9c0 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43  chedRowid(pC->pC
1c9d0 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 69 66  ursor);.      if
1c9e0 28 20 76 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ( v==0 ){.      
1c9f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1ca00 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72  reeLast(pC->pCur
1ca10 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1ca20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1ca30 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1ca40 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1ca50 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1ca60 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
1ca70 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20  ( res ){.       
1ca80 20 20 20 76 20 3d 20 31 3b 0a 20 20 20 20 20 20     v = 1;.      
1ca90 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1caa0 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b     sqlite3BtreeK
1cab0 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73  eySize(pC->pCurs
1cac0 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20  or, &v);.       
1cad0 20 20 20 76 20 3d 20 6b 65 79 54 6f 49 6e 74 28     v = keyToInt(
1cae0 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  v);.          if
1caf0 28 20 76 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 29  ( v==MAX_ROWID )
1cb00 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 43  {.            pC
1cb10 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
1cb20 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20   = 1;.          
1cb30 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1cb40 20 20 20 76 2b 2b 3b 0a 20 20 20 20 20 20 20 20     v++;.        
1cb50 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
1cb60 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53      }..#ifndef S
1cb70 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
1cb80 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 20 20 69  NCREMENT.      i
1cb90 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
1cba0 20 20 20 20 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b        Mem *pMem;
1cbb0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1cbc0 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
1cbd0 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
1cbe0 3b 20 2f 2a 20 50 33 20 69 73 20 61 20 76 61 6c  ; /* P3 is a val
1cbf0 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a  id memory cell *
1cc00 2f 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d  /.        pMem =
1cc10 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
1cc20 33 5d 3b 0a 09 52 45 47 49 53 54 45 52 5f 54 52  3];..REGISTER_TR
1cc30 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65  ACE(pOp->p3, pMe
1cc40 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  m);.        sqli
1cc50 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
1cc60 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20  rify(pMem);.    
1cc70 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65      assert( (pMe
1cc80 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  m->flags & MEM_I
1cc90 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65  nt)!=0 );  /* me
1cca0 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69  m(P3) holds an i
1ccb0 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20  nteger */.      
1ccc0 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d    if( pMem->u.i=
1ccd0 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43  =MAX_ROWID || pC
1cce0 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
1ccf0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63   ){.          rc
1cd00 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 0a   = SQLITE_FULL;.
1cd10 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
1cd20 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1cd30 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  r;.        }.   
1cd40 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d       if( v<pMem-
1cd50 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20  >u.i+1 ){.      
1cd60 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e      v = pMem->u.
1cd70 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  i + 1;.        }
1cd80 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75  .        pMem->u
1cd90 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20 20 7d 0a  .i = v;.      }.
1cda0 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 73 71  #endif..      sq
1cdb0 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
1cdc0 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75  hedRowid(pC->pCu
1cdd0 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f 57 49  rsor, v<MAX_ROWI
1cde0 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a 20 20  D ? v+1 : 0);.  
1cdf0 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43 2d 3e    }.    if( pC->
1ce00 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
1ce10 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
1ce20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f  pOp->p3==0 );  /
1ce30 2a 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 6d 75  * SQLITE_FULL mu
1ce40 73 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64  st have occurred
1ce50 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 2a   prior to this *
1ce60 2f 0a 20 20 20 20 20 20 76 20 3d 20 64 62 2d 3e  /.      v = db->
1ce70 70 72 69 6f 72 4e 65 77 52 6f 77 69 64 3b 0a 20  priorNewRowid;. 
1ce80 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20       cnt = 0;.  
1ce90 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
1cea0 69 66 28 20 63 6e 74 3d 3d 30 20 26 26 20 28 76  if( cnt==0 && (v
1ceb0 26 30 78 66 66 66 66 66 66 29 3d 3d 76 20 29 7b  &0xffffff)==v ){
1cec0 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 0a  .          v++;.
1ced0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1cee0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1cef0 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65  _randomness(size
1cf00 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20  of(v), &v);.    
1cf10 20 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35 20        if( cnt<5 
1cf20 29 20 76 20 26 3d 20 30 78 66 66 66 66 66 66 3b  ) v &= 0xffffff;
1cf30 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1cf40 20 20 20 69 66 28 20 76 3d 3d 30 20 29 20 63 6f     if( v==0 ) co
1cf50 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
1cf60 78 20 3d 20 69 6e 74 54 6f 4b 65 79 28 76 29 3b  x = intToKey(v);
1cf70 0a 20 20 20 20 20 20 20 20 72 78 20 3d 20 73 71  .        rx = sq
1cf80 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1cf90 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1cfa0 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 78 2c  rsor, 0, (u64)x,
1cfb0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20   0, &res);.     
1cfc0 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20     cnt++;.      
1cfd0 7d 77 68 69 6c 65 28 20 63 6e 74 3c 31 30 30 20  }while( cnt<100 
1cfe0 26 26 20 72 78 3d 3d 53 51 4c 49 54 45 5f 4f 4b  && rx==SQLITE_OK
1cff0 20 26 26 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20   && res==0 );.  
1d000 20 20 20 20 64 62 2d 3e 70 72 69 6f 72 4e 65 77      db->priorNew
1d010 52 6f 77 69 64 20 3d 20 76 3b 0a 20 20 20 20 20  Rowid = v;.     
1d020 20 69 66 28 20 72 78 3d 3d 53 51 4c 49 54 45 5f   if( rx==SQLITE_
1d030 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a  OK && res==0 ){.
1d040 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
1d050 49 54 45 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20  ITE_FULL;.      
1d060 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1d070 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1d080 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d   }.    }.    pC-
1d090 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1d0a0 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  0;.    pC->defer
1d0b0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
1d0c0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
1d0d0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1d0e0 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79  ;.  }.  MemSetTy
1d0f0 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
1d100 5f 49 6e 74 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  _Int);.  pOut->u
1d110 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b  .i = v;.  break;
1d120 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
1d130 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50  nsert P1 P2 P3 P
1d140 34 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  4 P5.**.** Write
1d150 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74   an entry into t
1d160 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73  he table of curs
1d170 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e  or P1.  A new en
1d180 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65  try is.** create
1d190 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20  d if it doesn't 
1d1a0 61 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72  already exist or
1d1b0 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e   the data for an
1d1c0 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74   existing.** ent
1d1d0 72 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65  ry is overwritte
1d1e0 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20  n.  The data is 
1d1f0 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
1d200 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d   register.** num
1d210 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20  ber P2. The key 
1d220 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
1d230 69 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65  ister P3. The ke
1d240 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 6e 20  y must.** be an 
1d250 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 49  integer..**.** I
1d260 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
1d270 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20  ANGE flag of P5 
1d280 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
1d290 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e   row change coun
1d2a0 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e  t is.** incremen
1d2b0 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
1d2c0 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46  ot).  If the OPF
1d2d0 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c  LAG_LASTROWID fl
1d2e0 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
1d2f0 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69  .** then rowid i
1d300 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62  s stored for sub
1d310 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62  sequent return b
1d320 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  y the.** sqlite3
1d330 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
1d340 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f  id() function (o
1d350 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75  therwise it is u
1d360 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a  nmodified)..**.*
1d370 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d  * Parameter P4 m
1d380 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 73 74  ay point to a st
1d390 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ring containing 
1d3a0 74 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20  the table-name, 
1d3b0 6f 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c  or.** may be NUL
1d3c0 4c 2e 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20  L. If it is not 
1d3d0 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75  NULL, then the u
1d3e0 70 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28  pdate-hook .** (
1d3f0 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43  sqlite3.xUpdateC
1d400 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f  allback) is invo
1d410 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  ked following a 
1d420 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72  successful inser
1d430 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e  t..**.** (WARNIN
1d440 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73  G/TODO: If P1 is
1d450 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72   a pseudo-cursor
1d460 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d   and P2 is dynam
1d470 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61  ically.** alloca
1d480 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73  ted, then owners
1d490 68 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61  hip of P2 is tra
1d4a0 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20  nsferred to the 
1d4b0 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a  pseudo-cursor.**
1d4c0 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32   and register P2
1d4d0 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72   becomes ephemer
1d4e0 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73  al.  If the curs
1d4f0 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74  or is changed, t
1d500 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72  he.** value of r
1d510 65 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20  egister P2 will 
1d520 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61  then change.  Ma
1d530 6b 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65  ke sure this doe
1d540 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61  s not.** cause a
1d550 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a  ny problems.).**
1d560 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
1d570 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
1d580 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  on tables.  The 
1d590 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72  equivalent instr
1d5a0 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e  uction.** for in
1d5b0 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49  dices is OP_IdxI
1d5c0 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nsert..*/.case O
1d5d0 50 5f 49 6e 73 65 72 74 3a 20 7b 0a 20 20 4d 65  P_Insert: {.  Me
1d5e0 6d 20 2a 70 44 61 74 61 20 3d 20 26 70 2d 3e 61  m *pData = &p->a
1d5f0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
1d600 4d 65 6d 20 2a 70 4b 65 79 20 3d 20 26 70 2d 3e  Mem *pKey = &p->
1d610 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a  aMem[pOp->p3];..
1d620 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 2f 2a    i64 iKey;   /*
1d630 20 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57   The integer ROW
1d640 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68  ID or key for th
1d650 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69  e record to be i
1d660 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74  nserted */.  int
1d670 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
1d680 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1d690 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
1d6a0 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
1d6b0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1d6c0 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  r[i];.  assert( 
1d6d0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1d6e0 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
1d6f0 30 20 7c 7c 20 70 43 2d 3e 70 73 65 75 64 6f 54  0 || pC->pseudoT
1d700 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74  able );.  assert
1d710 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20  ( pKey->flags & 
1d720 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73  MEM_Int );.  ass
1d730 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1d740 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
1d750 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44  RACE(pOp->p2, pD
1d760 61 74 61 29 3b 0a 20 20 52 45 47 49 53 54 45 52  ata);.  REGISTER
1d770 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
1d780 70 4b 65 79 29 3b 0a 0a 20 20 69 4b 65 79 20 3d  pKey);..  iKey =
1d790 20 69 6e 74 54 6f 4b 65 79 28 70 4b 65 79 2d 3e   intToKey(pKey->
1d7a0 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  u.i);.  if( pOp-
1d7b0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p5 & OPFLAG_NCH
1d7c0 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
1d7d0 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  e++;.  if( pOp->
1d7e0 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54  p5 & OPFLAG_LAST
1d7f0 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74  ROWID ) db->last
1d800 52 6f 77 69 64 20 3d 20 70 4b 65 79 2d 3e 75 2e  Rowid = pKey->u.
1d810 69 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e  i;.  if( pData->
1d820 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
1d830 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a   ){.    pData->z
1d840 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d   = 0;.    pData-
1d850 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  >n = 0;.  }else{
1d860 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61  .    assert( pDa
1d870 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  ta->flags & (MEM
1d880 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29  _Blob|MEM_Str) )
1d890 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 43 2d 3e  ;.  }.  if( pC->
1d8a0 70 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20  pseudoTable ){. 
1d8b0 20 20 20 69 66 28 20 21 70 43 2d 3e 65 70 68 65     if( !pC->ephe
1d8c0 6d 50 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a  mPseudoTable ){.
1d8d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
1d8e0 72 65 65 28 64 62 2c 20 70 43 2d 3e 70 44 61 74  ree(db, pC->pDat
1d8f0 61 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43  a);.    }.    pC
1d900 2d 3e 69 4b 65 79 20 3d 20 69 4b 65 79 3b 0a 20  ->iKey = iKey;. 
1d910 20 20 20 70 43 2d 3e 6e 44 61 74 61 20 3d 20 70     pC->nData = p
1d920 44 61 74 61 2d 3e 6e 3b 0a 20 20 20 20 69 66 28  Data->n;.    if(
1d930 20 70 44 61 74 61 2d 3e 7a 3d 3d 70 44 61 74 61   pData->z==pData
1d940 2d 3e 7a 4d 61 6c 6c 6f 63 20 7c 7c 20 70 43 2d  ->zMalloc || pC-
1d950 3e 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c  >ephemPseudoTabl
1d960 65 20 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e 70  e ){.      pC->p
1d970 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 7a 3b  Data = pData->z;
1d980 0a 20 20 20 20 20 20 69 66 28 20 21 70 43 2d 3e  .      if( !pC->
1d990 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65  ephemPseudoTable
1d9a0 20 29 7b 0a 20 20 20 20 20 20 20 20 70 44 61 74   ){.        pDat
1d9b0 61 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  a->flags &= ~MEM
1d9c0 5f 44 79 6e 3b 0a 20 20 20 20 20 20 20 20 70 44  _Dyn;.        pD
1d9d0 61 74 61 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  ata->flags |= ME
1d9e0 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20 20 20 20  M_Ephem;.       
1d9f0 20 70 44 61 74 61 2d 3e 7a 4d 61 6c 6c 6f 63 20   pData->zMalloc 
1da00 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
1da10 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 43   }else{.      pC
1da20 2d 3e 70 44 61 74 61 20 3d 20 73 71 6c 69 74 65  ->pData = sqlite
1da30 33 4d 61 6c 6c 6f 63 28 20 70 43 2d 3e 6e 44 61  3Malloc( pC->nDa
1da40 74 61 2b 32 20 29 3b 0a 20 20 20 20 20 20 69 66  ta+2 );.      if
1da50 28 20 21 70 43 2d 3e 70 44 61 74 61 20 29 20 67  ( !pC->pData ) g
1da60 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
1da70 20 20 6d 65 6d 63 70 79 28 70 43 2d 3e 70 44 61    memcpy(pC->pDa
1da80 74 61 2c 20 70 44 61 74 61 2d 3e 7a 2c 20 70 43  ta, pData->z, pC
1da90 2d 3e 6e 44 61 74 61 29 3b 0a 20 20 20 20 20 20  ->nData);.      
1daa0 70 43 2d 3e 70 44 61 74 61 5b 70 43 2d 3e 6e 44  pC->pData[pC->nD
1dab0 61 74 61 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  ata] = 0;.      
1dac0 70 43 2d 3e 70 44 61 74 61 5b 70 43 2d 3e 6e 44  pC->pData[pC->nD
1dad0 61 74 61 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20  ata+1] = 0;.    
1dae0 7d 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  }.    pC->nullRo
1daf0 77 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  w = 0;.  }else{.
1db00 20 20 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 0a 20      int nZero;. 
1db10 20 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c     int seekResul
1db20 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  t = ((pOp->p5 & 
1db30 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
1db40 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b  SULT) ? pC->seek
1db50 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 20  Result : 0);.   
1db60 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
1db70 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
1db80 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44        nZero = pD
1db90 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20  ata->u.nZero;.  
1dba0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e    }else{.      n
1dbb0 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  Zero = 0;.    }.
1dbc0 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
1dbd0 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70  SetCachedRowid(p
1dbe0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a  C->pCursor, 0);.
1dbf0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1dc00 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e  BtreeInsert(pC->
1dc10 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79  pCursor, 0, iKey
1dc20 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1dc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
1dc40 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e  ata->z, pData->n
1dc50 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20  , nZero,.       
1dc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc70 20 20 20 20 20 70 4f 70 2d 3e 70 35 20 26 20 4f       pOp->p5 & O
1dc80 50 46 4c 41 47 5f 41 50 50 45 4e 44 2c 20 73 65  PFLAG_APPEND, se
1dc90 65 6b 52 65 73 75 6c 74 0a 20 20 20 20 29 3b 0a  ekResult.    );.
1dca0 20 20 7d 0a 20 20 0a 20 20 70 43 2d 3e 72 6f 77    }.  .  pC->row
1dcb0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1dcc0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1dcd0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
1dce0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1dcf0 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
1dd00 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
1dd10 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
1dd20 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  ed. */.  if( rc=
1dd30 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62  =SQLITE_OK && db
1dd40 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
1dd50 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29  k && pOp->p4.z )
1dd60 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
1dd70 20 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b   *zDb = db->aDb[
1dd80 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a  pC->iDb].zName;.
1dd90 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
1dda0 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  zTbl = pOp->p4.z
1ddb0 3b 0a 20 20 20 20 69 6e 74 20 6f 70 20 3d 20 28  ;.    int op = (
1ddc0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
1ddd0 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51  G_ISUPDATE) ? SQ
1dde0 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51  LITE_UPDATE : SQ
1ddf0 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20  LITE_INSERT);.  
1de00 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1de10 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d  Table );.    db-
1de20 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
1de30 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
1de40 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20   op, zDb, zTbl, 
1de50 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72  iKey);.    asser
1de60 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b  t( pC->iDb>=0 );
1de70 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1de80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65  ./* Opcode: Dele
1de90 74 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  te P1 P2 * P4 *.
1dea0 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65  **.** Delete the
1deb0 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68   record at which
1dec0 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 69   the P1 cursor i
1ded0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
1dee0 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ting..**.** The 
1def0 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c  cursor will be l
1df00 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
1df10 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74 20  either the next 
1df20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a  or the previous.
1df30 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65  ** record in the
1df40 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73   table. If it is
1df50 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
1df60 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72  t the next recor
1df70 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e  d, then.** the n
1df80 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63  ext Next instruc
1df90 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e  tion will be a n
1dfa0 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74 20  o-op.  Hence it 
1dfb0 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a  is OK to delete.
1dfc0 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d  ** a record from
1dfd0 20 77 69 74 68 69 6e 20 61 6e 20 4e 65 78 74 20   within an Next 
1dfe0 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  loop..**.** If t
1dff0 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
1e000 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73 20  E flag of P2 is 
1e010 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f  set, then the ro
1e020 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69  w change count i
1e030 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
1e040 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29   (otherwise not)
1e050 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20  ..**.** P1 must 
1e060 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61  not be pseudo-ta
1e070 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20  ble.  It has to 
1e080 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20  be a real table 
1e090 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65  with.** multiple
1e0a0 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   rows..**.** If 
1e0b0 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
1e0c0 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e  then it is the n
1e0d0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1e0e0 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20 70   that P1 is.** p
1e0f0 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68 65  ointing to.  The
1e100 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c   update hook wil
1e110 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66  l be invoked, if
1e120 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49   it exists..** I
1e130 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
1e140 20 74 68 65 6e 20 74 68 65 20 50 31 20 63 75 72   then the P1 cur
1e150 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62 65  sor must have be
1e160 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a  en positioned.**
1e170 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75   using OP_NotFou
1e180 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f  nd prior to invo
1e190 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  king this opcode
1e1a0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c  ..*/.case OP_Del
1e1b0 65 74 65 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d  ete: {.  int i =
1e1c0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 36 34 20   pOp->p1;.  i64 
1e1d0 69 4b 65 79 20 3d 20 30 3b 0a 20 20 56 64 62 65  iKey = 0;.  Vdbe
1e1e0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
1e1f0 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
1e200 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1e210 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69   pC = p->apCsr[i
1e220 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1e230 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1e240 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1e250 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64  ;  /* Only valid
1e260 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73   for real tables
1e270 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65  , no pseudotable
1e280 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68  s */..  /* If th
1e290 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69  e update-hook wi
1e2a0 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73  ll be invoked, s
1e2b0 65 74 20 69 4b 65 79 20 74 6f 20 74 68 65 20 72  et iKey to the r
1e2c0 6f 77 69 64 20 6f 66 20 74 68 65 0a 20 20 2a 2a  owid of the.  **
1e2d0 20 72 6f 77 20 62 65 69 6e 67 20 64 65 6c 65 74   row being delet
1e2e0 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64  ed..  */.  if( d
1e2f0 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
1e300 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  ck && pOp->p4.z 
1e310 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
1e320 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
1e330 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f    assert( pC->ro
1e340 77 69 64 49 73 56 61 6c 69 64 20 29 3b 20 20 2f  widIsValid );  /
1e350 2a 20 6c 61 73 74 52 6f 77 69 64 20 73 65 74 20  * lastRowid set 
1e360 62 79 20 70 72 65 76 69 6f 75 73 20 4f 50 5f 4e  by previous OP_N
1e370 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20 20 20 69  otFound */.    i
1e380 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f  Key = pC->lastRo
1e390 77 69 64 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d  wid;.  }..  rc =
1e3a0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
1e3b0 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
1e3c0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1e3d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1e3e0 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ;.  sqlite3Btree
1e3f0 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70  SetCachedRowid(p
1e400 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a  C->pCursor, 0);.
1e410 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1e420 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43  reeDelete(pC->pC
1e430 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61  ursor);.  pC->ca
1e440 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1e450 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49  E_STALE;..  /* I
1e460 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
1e470 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
1e480 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d  d. */.  if( rc==
1e490 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d  SQLITE_OK && db-
1e4a0 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
1e4b0 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b   && pOp->p4.z ){
1e4c0 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
1e4d0 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70  *zDb = db->aDb[p
1e4e0 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20  C->iDb].zName;. 
1e4f0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
1e500 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  Tbl = pOp->p4.z;
1e510 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65  .    db->xUpdate
1e520 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
1e530 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f  dateArg, SQLITE_
1e540 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62  DELETE, zDb, zTb
1e550 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73  l, iKey);.    as
1e560 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
1e570 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   );.  }.  if( pO
1e580 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p2 & OPFLAG_N
1e590 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
1e5a0 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a  nge++;.  break;.
1e5b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
1e5c0 73 65 74 43 6f 75 6e 74 20 50 31 20 2a 20 2a 0a  setCount P1 * *.
1e5d0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1e5e0 65 20 72 65 73 65 74 73 20 74 68 65 20 56 4d 73  e resets the VMs
1e5f0 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65   internal change
1e600 20 63 6f 75 6e 74 65 72 20 74 6f 20 30 2e 20 49   counter to 0. I
1e610 66 20 50 31 20 69 73 20 74 72 75 65 2c 0a 2a 2a  f P1 is true,.**
1e620 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
1e630 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  of the change co
1e640 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20  unter is copied 
1e650 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
1e660 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65  handle.** change
1e670 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e   counter (return
1e680 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74  ed by subsequent
1e690 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65   calls to sqlite
1e6a0 33 5f 63 68 61 6e 67 65 73 28 29 29 0a 2a 2a 20  3_changes()).** 
1e6b0 62 65 66 6f 72 65 20 69 74 20 69 73 20 72 65 73  before it is res
1e6c0 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  et. This is used
1e6d0 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67   by trigger prog
1e6e0 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rams..*/.case OP
1e6f0 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20  _ResetCount: {. 
1e700 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
1e710 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
1e720 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
1e730 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 7d 0a 20  >nChange);.  }. 
1e740 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
1e750 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1e760 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20  Opcode: RowData 
1e770 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1e780 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
1e790 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d  ister P2 the com
1e7a0 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20 66  plete row data f
1e7b0 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  or cursor P1..**
1e7c0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74   There is no int
1e7d0 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
1e7e0 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74  he data.  .** It
1e7f0 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20   is just copied 
1e800 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69  onto the P2 regi
1e810 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20  ster exactly as 
1e820 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20  .** it is found 
1e830 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
1e840 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  file..**.** If t
1e850 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
1e860 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f  t be pointing to
1e870 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f   a valid row (no
1e880 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a  t a NULL row).**
1e890 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65   of a real table
1e8a0 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
1e8b0 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  able..*/./* Opco
1e8c0 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32  de: RowKey P1 P2
1e8d0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
1e8e0 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
1e8f0 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
1e900 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72   row key for cur
1e910 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
1e920 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
1e930 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
1e940 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20  a.  .** The key 
1e950 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  is copied onto t
1e960 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 65  he P3 register e
1e970 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
1e980 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
1e990 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
1e9a0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
1e9b0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
1e9c0 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
1e9d0 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
1e9e0 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
1e9f0 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
1ea00 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
1ea10 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65  */.case OP_RowKe
1ea20 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61  y:.case OP_RowDa
1ea30 74 61 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20  ta: {.  int i = 
1ea40 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43  pOp->p1;.  VdbeC
1ea50 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
1ea60 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
1ea70 75 33 32 20 6e 3b 0a 0a 20 20 70 4f 75 74 20 3d  u32 n;..  pOut =
1ea80 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
1ea90 32 5d 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74  2];..  /* Note t
1eaa0 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52  hat RowKey and R
1eab0 6f 77 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c  owData are reall
1eac0 79 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  y exactly the sa
1ead0 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a  me instruction *
1eae0 2f 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  /.  assert( i>=0
1eaf0 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
1eb00 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1eb10 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74  Csr[i];.  assert
1eb20 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c  ( pC->isTable ||
1eb30 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1eb40 5f 52 6f 77 4b 65 79 20 29 3b 0a 20 20 61 73 73  _RowKey );.  ass
1eb50 65 72 74 28 20 70 43 2d 3e 69 73 49 6e 64 65 78  ert( pC->isIndex
1eb60 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
1eb70 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20  =OP_RowData );. 
1eb80 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1eb90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1eba0 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20  nullRow==0 );.  
1ebb0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
1ebc0 64 6f 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  doTable==0 );.  
1ebd0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
1ebe0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73  sor!=0 );.  pCrs
1ebf0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
1ec00 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
1ec10 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
1ec20 70 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  pC);.  if( rc ) 
1ec30 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1ec40 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70  o_error;.  if( p
1ec50 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20  C->isIndex ){.  
1ec60 20 20 69 36 34 20 6e 36 34 3b 0a 20 20 20 20 61    i64 n64;.    a
1ec70 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54 61  ssert( !pC->isTa
1ec80 62 6c 65 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ble );.    sqlit
1ec90 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
1eca0 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20  Crsr, &n64);.   
1ecb0 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69   if( n64>db->aLi
1ecc0 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
1ecd0 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
1ece0 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
1ecf0 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 69      }.    n = (i
1ed00 6e 74 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b  nt)n64;.  }else{
1ed10 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
1ed20 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c  eDataSize(pCrsr,
1ed30 20 26 6e 29 3b 0a 20 20 20 20 69 66 28 20 28 69   &n);.    if( (i
1ed40 6e 74 29 6e 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  nt)n>db->aLimit[
1ed50 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
1ed60 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f  GTH] ){.      go
1ed70 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
1ed80 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  }.  }.  if( sqli
1ed90 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
1eda0 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20  Out, n, 0) ){.  
1edb0 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
1edc0 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e   }.  pOut->n = n
1edd0 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
1ede0 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f  ag(pOut, MEM_Blo
1edf0 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  b);.  if( pC->is
1ee00 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63 20  Index ){.    rc 
1ee10 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
1ee20 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70  y(pCrsr, 0, n, p
1ee30 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65  Out->z);.  }else
1ee40 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
1ee50 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72 73  e3BtreeData(pCrs
1ee60 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a  r, 0, n, pOut->z
1ee70 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65  );.  }.  pOut->e
1ee80 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
1ee90 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68  ;  /* In case th
1eea0 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63  e blob is ever c
1eeb0 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20  ast to text */. 
1eec0 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
1eed0 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
1eee0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1eef0 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a  e: Rowid P1 P2 *
1ef00 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65   * *.**.** Store
1ef10 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
1ef20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
1ef30 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74   is the key of t
1ef40 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
1ef50 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72  hat.** P1 is cur
1ef60 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e  rently point to.
1ef70 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65  .**.** P1 can be
1ef80 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e   either an ordin
1ef90 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76  ary table or a v
1efa0 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54  irtual table.  T
1efb0 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  here used to.** 
1efc0 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50  be a separate OP
1efd0 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66  _VRowid opcode f
1efe0 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74  or use with virt
1eff0 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20  ual tables, but 
1f000 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f  this.** one opco
1f010 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72  de now works for
1f020 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65   both table type
1f030 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  s..*/.case OP_Ro
1f040 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
1f050 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
1f060 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
1f070 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
1f080 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f090 3b 0a 20 20 69 36 34 20 76 3b 0a 0a 20 20 61 73  ;.  i64 v;..  as
1f0a0 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
1f0b0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1f0c0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d  pC = p->apCsr[i]
1f0d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1f0e0 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e  0 );.  if( pC->n
1f0f0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 2f 2a  ullRow ){.    /*
1f100 20 44 6f 20 6e 6f 74 68 69 6e 67 20 73 6f 20 74   Do nothing so t
1f110 68 61 74 20 72 65 67 5b 50 32 5d 20 72 65 6d 61  hat reg[P2] rema
1f120 69 6e 73 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20  ins NULL */.    
1f130 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69  break;.  }else i
1f140 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  f( pC->deferredM
1f150 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d  oveto ){.    v =
1f160 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
1f170 74 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  t;.  }else if( p
1f180 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29  C->pseudoTable )
1f190 7b 0a 20 20 20 20 76 20 3d 20 6b 65 79 54 6f 49  {.    v = keyToI
1f1a0 6e 74 28 70 43 2d 3e 69 4b 65 79 29 3b 0a 23 69  nt(pC->iKey);.#i
1f1b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1f1c0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
1f1d0 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70   }else if( pC->p
1f1e0 56 74 61 62 43 75 72 73 6f 72 20 29 7b 0a 20 20  VtabCursor ){.  
1f1f0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
1f200 70 56 74 61 62 3b 0a 20 20 20 20 63 6f 6e 73 74  pVtab;.    const
1f210 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
1f220 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 70 56  *pModule;.    pV
1f230 74 61 62 20 3d 20 70 43 2d 3e 70 56 74 61 62 43  tab = pC->pVtabC
1f240 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
1f250 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
1f260 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20  b->pModule;.    
1f270 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
1f280 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 69  >xRowid );.    i
1f290 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
1f2a0 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61  Off(db) ) goto a
1f2b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
1f2c0 73 65 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f  se;.    rc = pMo
1f2d0 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d  dule->xRowid(pC-
1f2e0 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 76  >pVtabCursor, &v
1f2f0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62  );.    sqlite3Db
1f300 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72  Free(db, p->zErr
1f310 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72  Msg);.    p->zEr
1f320 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45  rMsg = pVtab->zE
1f330 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62  rrMsg;.    pVtab
1f340 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20  ->zErrMsg = 0;. 
1f350 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61     if( sqlite3Sa
1f360 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
1f370 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
1f380 69 73 75 73 65 3b 0a 23 65 6e 64 69 66 20 2f 2a  isuse;.#endif /*
1f390 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
1f3a0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d  TUALTABLE */.  }
1f3b0 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73  else{.    rc = s
1f3c0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
1f3d0 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20  Moveto(pC);.    
1f3e0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1f3f0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1f400 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 72 6f  ;.    if( pC->ro
1f410 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a 20 20  widIsValid ){.  
1f420 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73 74      v = pC->last
1f430 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73 65  Rowid;.    }else
1f440 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
1f450 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1f460 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ;.      sqlite3B
1f470 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e  treeKeySize(pC->
1f480 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  pCursor, &v);.  
1f490 20 20 20 20 76 20 3d 20 6b 65 79 54 6f 49 6e 74      v = keyToInt
1f4a0 28 76 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  (v);.    }.  }. 
1f4b0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pOut->u.i = v;.
1f4c0 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
1f4d0 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
1f4e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1f4f0 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20  Opcode: NullRow 
1f500 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
1f510 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72   Move the cursor
1f520 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f   P1 to a null ro
1f530 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d  w.  Any OP_Colum
1f540 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20  n operations.** 
1f550 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65  that occur while
1f560 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f   the cursor is o
1f570 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77  n the null row w
1f580 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72  ill always.** wr
1f590 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  ite a NULL..*/.c
1f5a0 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20  ase OP_NullRow: 
1f5b0 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  {.  int i = pOp-
1f5c0 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  >p1;.  VdbeCurso
1f5d0 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
1f5e0 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
1f5f0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1f600 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20   p->apCsr[i];.  
1f610 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1f620 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
1f630 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49   1;.  pC->rowidI
1f640 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 69 66  sValid = 0;.  if
1f650 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b  ( pC->pCursor ){
1f660 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
1f670 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d  eClearCursor(pC-
1f680 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  >pCursor);.  }. 
1f690 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1f6a0 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32  code: Last P1 P2
1f6b0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
1f6c0 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
1f6d0 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
1f6e0 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
1f6f0 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
1f700 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
1f710 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
1f720 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
1f730 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
1f740 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
1f750 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
1f760 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
1f770 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1f780 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
1f790 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
1f7a0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
1f7b0 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
1f7c0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
1f7d0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
1f7e0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
1f7f0 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20   OP_Last: {     
1f800 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
1f810 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
1f820 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1f830 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
1f840 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
1f850 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ..  assert( i>=0
1f860 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
1f870 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1f880 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74  Csr[i];.  assert
1f890 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
1f8a0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
1f8b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
1f8c0 72 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  r!=0 );.  rc = s
1f8d0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
1f8e0 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
1f8f0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75  pC->nullRow = (u
1f900 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66  8)res;.  pC->def
1f910 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1f920 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
1f930 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  lid = 0;.  pC->c
1f940 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1f950 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
1f960 72 65 73 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30  res && pOp->p2>0
1f970 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
1f980 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
1f990 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
1f9a0 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32  code: Sort P1 P2
1f9b0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
1f9c0 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78  s opcode does ex
1f9d0 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74  actly the same t
1f9e0 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e  hing as OP_Rewin
1f9f0 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  d except that.**
1fa00 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61   it increments a
1fa10 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67  n undocumented g
1fa20 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75  lobal variable u
1fa30 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e  sed for testing.
1fa40 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69  .**.** Sorting i
1fa50 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62  s accomplished b
1fa60 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64  y writing record
1fa70 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67  s into a sorting
1fa80 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20   index,.** then 
1fa90 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69  rewinding that i
1faa0 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67  ndex and playing
1fab0 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65   it back from be
1fac0 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e  ginning to.** en
1fad0 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f  d.  We use the O
1fae0 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e  P_Sort opcode in
1faf0 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69  stead of OP_Rewi
1fb00 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20  nd to do the.** 
1fb10 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61  rewinding so tha
1fb20 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  t the global var
1fb30 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e  iable will be in
1fb40 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a  cremented and.**
1fb50 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
1fb60 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20  s can determine 
1fb70 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
1fb80 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a  he optimizer is.
1fb90 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74  ** correctly opt
1fba0 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74  imizing out sort
1fbb0 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  s..*/.case OP_So
1fbc0 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  rt: {        /* 
1fbd0 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53  jump */.#ifdef S
1fbe0 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c  QLITE_TEST.  sql
1fbf0 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b  ite3_sort_count+
1fc00 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61  +;.  sqlite3_sea
1fc10 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e  rch_count--;.#en
1fc20 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65  dif.  p->aCounte
1fc30 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41  r[SQLITE_STMTSTA
1fc40 54 55 53 5f 53 4f 52 54 2d 31 5d 2b 2b 3b 0a 20  TUS_SORT-1]++;. 
1fc50 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
1fc60 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20   into OP_Rewind 
1fc70 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  */.}./* Opcode: 
1fc80 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a  Rewind P1 P2 * *
1fc90 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78   *.**.** The nex
1fca0 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77  t use of the Row
1fcb0 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20  id or Column or 
1fcc0 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
1fcd0 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c   for P1 .** will
1fce0 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69   refer to the fi
1fcf0 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  rst entry in the
1fd00 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
1fd10 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
1fd20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
1fd30 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20  ex is empty and 
1fd40 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20  P2>0, then jump 
1fd50 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
1fd60 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30  2..** If P2 is 0
1fd70 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65   or if the table
1fd80 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
1fd90 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
1fda0 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
1fdb0 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
1fdc0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
1fdd0 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20 20  _Rewind: {      
1fde0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
1fdf0 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
1fe00 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1fe10 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
1fe20 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
1fe30 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
1fe40 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
1fe50 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1fe60 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28  sr[i];.  assert(
1fe70 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pC!=0 );.  if( 
1fe80 28 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75  (pCrsr = pC->pCu
1fe90 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20  rsor)!=0 ){.    
1fea0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1feb0 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72  eFirst(pCrsr, &r
1fec0 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 61 74 46  es);.    pC->atF
1fed0 69 72 73 74 20 3d 20 72 65 73 3d 3d 30 20 3f 31  irst = res==0 ?1
1fee0 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65  :0;.    pC->defe
1fef0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
1ff00 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
1ff10 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1ff20 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  E;.    pC->rowid
1ff30 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d  IsValid = 0;.  }
1ff40 65 6c 73 65 7b 0a 20 20 20 20 72 65 73 20 3d 20  else{.    res = 
1ff50 31 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c  1;.  }.  pC->nul
1ff60 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
1ff70 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1ff80 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70  2>0 && pOp->p2<p
1ff90 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20 72  ->nOp );.  if( r
1ffa0 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
1ffb0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
1ffc0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1ffd0 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50  pcode: Next P1 P
1ffe0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64  2 * * *.**.** Ad
1fff0 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20  vance cursor P1 
20000 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
20010 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65  s to the next ke
20020 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69  y/data pair in i
20030 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69  ts.** table or i
20040 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20  ndex.  If there 
20050 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f  are no more key/
20060 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e  value pairs then
20070 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
20080 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
20090 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  g instruction.  
200a0 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f  But if the curso
200b0 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73 75  r advance was su
200c0 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d  ccessful,.** jum
200d0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
200e0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50   P2..**.** The P
200f0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
20100 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
20110 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
20120 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  table..**.** See
20130 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f   also: Prev.*/./
20140 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50  * Opcode: Prev P
20150 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
20160 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20   Back up cursor 
20170 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
20180 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76  ints to the prev
20190 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61  ious key/data pa
201a0 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62  ir in its.** tab
201b0 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66  le or index.  If
201c0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65   there is no pre
201d0 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20  vious key/value 
201e0 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
201f0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
20200 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
20210 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
20220 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b   the cursor back
20230 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75  up was successfu
20240 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64  l,.** jump immed
20250 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
20260 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f  .** The P1 curso
20270 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20  r must be for a 
20280 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
20290 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
202a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a  */.case OP_Prev:
202b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
202c0 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  p */.case OP_Nex
202d0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
202e0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
202f0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
20300 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
20310 74 20 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f  t res;..  CHECK_
20320 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
20330 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
20340 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
20350 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
20360 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
20370 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d  ->p1];.  if( pC=
20380 3d 30 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  =0 ){.    break;
20390 20 20 2f 2a 20 53 65 65 20 74 69 63 6b 65 74 20    /* See ticket 
203a0 23 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 70  #2273 */.  }.  p
203b0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
203c0 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
203d0 72 73 72 20 29 3b 0a 20 20 72 65 73 20 3d 20 31  rsr );.  res = 1
203e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
203f0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
20400 30 20 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d  0 );.  rc = pOp-
20410 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78 74  >opcode==OP_Next
20420 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e   ? sqlite3BtreeN
20430 65 78 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  ext(pCrsr, &res)
20440 20 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   :.             
20450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20460 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
20470 76 69 6f 75 73 28 70 43 72 73 72 2c 20 26 72 65  vious(pCrsr, &re
20480 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  s);.  pC->nullRo
20490 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70  w = (u8)res;.  p
204a0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
204b0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
204c0 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
204d0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
204e0 20 31 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   1;.    if( pOp-
204f0 3e 70 35 20 29 20 70 2d 3e 61 43 6f 75 6e 74 65  >p5 ) p->aCounte
20500 72 5b 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a  r[pOp->p5-1]++;.
20510 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
20520 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
20530 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
20540 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e  endif.  }.  pC->
20550 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
20560 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
20570 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65   Opcode: IdxInse
20580 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  rt P1 P2 P3 * P5
20590 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
205a0 50 32 20 68 6f 6c 64 73 20 61 20 53 51 4c 20 69  P2 holds a SQL i
205b0 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73  ndex key made us
205c0 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52  ing the.** MakeR
205d0 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
205e0 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  ns.  This opcode
205f0 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79   writes that key
20600 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64  .** into the ind
20610 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72  ex P1.  Data for
20620 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69   the entry is ni
20630 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61  l..**.** P3 is a
20640 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76 69   flag that provi
20650 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68  des a hint to th
20660 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20 74  e b-tree layer t
20670 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65  hat this.** inse
20680 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  rt is likely to 
20690 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a  be an append..**
206a0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
206b0 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
206c0 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68  for indices.  Th
206d0 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
206e0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
206f0 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73  tables is OP_Ins
20700 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ert..*/.case OP_
20710 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20  IdxInsert: {    
20720 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
20730 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
20740 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
20750 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
20760 43 72 73 72 3b 0a 20 20 61 73 73 65 72 74 28 20  Crsr;.  assert( 
20770 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
20780 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
20790 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30  ( p->apCsr[i]!=0
207a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49   );.  assert( pI
207b0 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
207c0 42 6c 6f 62 20 29 3b 0a 20 20 69 66 28 20 28 70  Blob );.  if( (p
207d0 43 72 73 72 20 3d 20 28 70 43 20 3d 20 70 2d 3e  Crsr = (pC = p->
207e0 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73  apCsr[i])->pCurs
207f0 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 61 73  or)!=0 ){.    as
20800 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
20810 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  e==0 );.    rc =
20820 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
20830 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
20840 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
20850 20 20 69 6e 74 20 6e 4b 65 79 20 3d 20 70 49 6e    int nKey = pIn
20860 32 2d 3e 6e 3b 0a 20 20 20 20 20 20 63 6f 6e 73  2->n;.      cons
20870 74 20 63 68 61 72 20 2a 7a 4b 65 79 20 3d 20 70  t char *zKey = p
20880 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63  In2->z;.      rc
20890 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
208a0 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65  nsert(pCrsr, zKe
208b0 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20  y, nKey, "", 0, 
208c0 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20  0, pOp->p3, .   
208d0 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35         ((pOp->p5
208e0 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45   & OPFLAG_USESEE
208f0 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73  KRESULT) ? pC->s
20900 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20  eekResult : 0). 
20910 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 61 73       );.      as
20920 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
20930 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
20940 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74       pC->cacheSt
20950 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
20960 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  LE;.    }.  }.  
20970 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
20980 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50  ode: IdxDelete P
20990 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
209a0 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * The content of
209b0 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74   P3 registers st
209c0 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74  arting at regist
209d0 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e  er P2 form.** an
209e0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
209f0 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  key. This opcode
20a00 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e   removes that en
20a10 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a  try from the .**
20a20 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79   index opened by
20a30 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63   cursor P1..*/.c
20a40 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65  ase OP_IdxDelete
20a50 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f  : {.  int i = pO
20a60 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72  p->p1;.  VdbeCur
20a70 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
20a80 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 61 73  sor *pCrsr;.  as
20a90 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
20aa0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
20ab0 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
20ac0 32 2b 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  2+pOp->p3<=p->nM
20ad0 65 6d 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  em+1 );.  assert
20ae0 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
20af0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
20b00 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21  rt( p->apCsr[i]!
20b10 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 43 72  =0 );.  if( (pCr
20b20 73 72 20 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70  sr = (pC = p->ap
20b30 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72  Csr[i])->pCursor
20b40 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20  )!=0 ){.    int 
20b50 72 65 73 3b 0a 20 20 20 20 55 6e 70 61 63 6b 65  res;.    Unpacke
20b60 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 20 20 72  dRecord r;.    r
20b70 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
20b80 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
20b90 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
20ba0 70 2d 3e 70 33 3b 0a 20 20 20 20 72 2e 66 6c 61  p->p3;.    r.fla
20bb0 67 73 20 3d 20 30 3b 0a 20 20 20 20 72 2e 61 4d  gs = 0;.    r.aM
20bc0 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  em = &p->aMem[pO
20bd0 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 72 63 20 3d  p->p2];.    rc =
20be0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
20bf0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
20c00 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
20c10 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  s);.    if( rc==
20c20 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73  SQLITE_OK && res
20c30 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
20c40 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65  = sqlite3BtreeDe
20c50 6c 65 74 65 28 70 43 72 73 72 29 3b 0a 20 20 20  lete(pCrsr);.   
20c60 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70   }.    assert( p
20c70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
20c80 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e  o==0 );.    pC->
20c90 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
20ca0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
20cb0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
20cc0 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50  code: IdxRowid P
20cd0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
20ce0 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
20cf0 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67  ster P2 an integ
20d00 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
20d10 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
20d20 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74  e record at.** t
20d30 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
20d40 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20  dex key pointed 
20d50 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  to by cursor P1.
20d60 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73    This integer s
20d70 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20  hould be.** the 
20d80 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
20d90 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63  le entry to whic
20da0 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74  h this index ent
20db0 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a  ry points..**.**
20dc0 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64   See also: Rowid
20dd0 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f  , MakeRecord..*/
20de0 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69  .case OP_IdxRowi
20df0 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
20e00 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
20e10 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 20  ease */.  int i 
20e20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 42 74 43  = pOp->p1;.  BtC
20e30 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
20e40 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
20e50 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ..  assert( i>=0
20e60 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
20e70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
20e80 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a  >apCsr[i]!=0 );.
20e90 20 20 69 66 28 20 28 70 43 72 73 72 20 3d 20 28    if( (pCrsr = (
20ea0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d  pC = p->apCsr[i]
20eb0 29 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29  )->pCursor)!=0 )
20ec0 7b 0a 20 20 20 20 69 36 34 20 72 6f 77 69 64 3b  {.    i64 rowid;
20ed0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
20ee0 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
20ef0 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72  o(pC);.    if( r
20f00 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
20f10 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
20f20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
20f30 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
20f40 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
20f50 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
20f60 20 20 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c      if( !pC->nul
20f70 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 72 63  lRow ){.      rc
20f80 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
20f90 78 52 6f 77 69 64 28 70 43 72 73 72 2c 20 26 72  xRowid(pCrsr, &r
20fa0 6f 77 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28  owid);.      if(
20fb0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
20fc0 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  {.        goto a
20fd0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
20fe0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
20ff0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
21000 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
21010 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20        pOut->u.i 
21020 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  = rowid;.    }. 
21030 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
21040 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20  * Opcode: IdxGE 
21050 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
21060 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
21070 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
21080 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
21090 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
210a0 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
210b0 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49  t omits the ROWI
210c0 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  D.  Compare this
210d0 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
210e0 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
210f0 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
21100 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
21110 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
21120 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20  ROWID on the P1 
21130 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  index..**.** If 
21140 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
21150 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
21160 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
21170 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
21180 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
21190 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
211a0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
211b0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
211c0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
211d0 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74   non-zero then t
211e0 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20  he key value is 
211f0 69 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20  increased by an 
21200 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f  epsilon .** prio
21210 72 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  r to the compari
21220 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 20  son.  This make 
21230 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20  the opcode work 
21240 6c 69 6b 65 20 49 64 78 47 54 20 65 78 63 65 70  like IdxGT excep
21250 74 0a 2a 2a 20 74 68 61 74 20 69 66 20 74 68 65  t.** that if the
21260 20 6b 65 79 20 66 72 6f 6d 20 72 65 67 69 73 74   key from regist
21270 65 72 20 50 33 20 69 73 20 61 20 70 72 65 66 69  er P3 is a prefi
21280 78 20 6f 66 20 74 68 65 20 6b 65 79 20 69 6e 20  x of the key in 
21290 74 68 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74  the cursor,.** t
212a0 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c  he result is fal
212b0 73 65 20 77 68 65 72 65 61 73 20 69 74 20 77 6f  se whereas it wo
212c0 75 6c 64 20 62 65 20 74 72 75 65 20 77 69 74 68  uld be true with
212d0 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70   IdxGT..*/./* Op
212e0 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50  code: IdxLT P1 P
212f0 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  2 P3 * P5.**.** 
21300 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
21310 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
21320 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
21330 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
21340 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
21350 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43  ts the ROWID.  C
21360 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
21370 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
21380 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
21390 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
213a0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
213b0 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44  noring the ROWID
213c0 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
213d0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
213e0 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
213f0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
21400 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
21410 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68  mp to P2..** Oth
21420 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
21430 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
21440 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
21450 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
21460 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65  zero then the ke
21470 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65  y value is incre
21480 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c  ased by an epsil
21490 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f 20  on prior .** to 
214a0 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
214b0 20 54 68 69 73 20 6d 61 6b 65 73 20 74 68 65 20   This makes the 
214c0 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65  opcode work like
214d0 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20   IdxLE..*/.case 
214e0 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20  OP_IdxLT:       
214f0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
21500 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45  */.case OP_IdxGE
21510 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
21520 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
21530 20 69 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56   i= pOp->p1;.  V
21540 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
21550 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
21560 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
21570 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
21580 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20  pCsr[i]!=0 );.  
21590 69 66 28 20 28 70 43 20 3d 20 70 2d 3e 61 70 43  if( (pC = p->apC
215a0 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 21  sr[i])->pCursor!
215b0 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65  =0 ){.    int re
215c0 73 3b 0a 20 20 20 20 55 6e 70 61 63 6b 65 64 52  s;.    UnpackedR
215d0 65 63 6f 72 64 20 72 3b 0a 20 20 20 20 61 73 73  ecord r;.    ass
215e0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
215f0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
21600 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21610 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
21620 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =1 );.    assert
21630 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
21640 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 72  4_INT32 );.    r
21650 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
21660 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
21670 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
21680 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 69 66 28  p->p4.i;.    if(
21690 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
216a0 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
216b0 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55  CKED_INCRKEY | U
216c0 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52  NPACKED_IGNORE_R
216d0 4f 57 49 44 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  OWID;.    }else{
216e0 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  .      r.flags =
216f0 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45   UNPACKED_IGNORE
21700 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d 0a 20 20  _ROWID;.    }.  
21710 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e 61    r.aMem = &p->a
21720 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
21730 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
21740 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28  beIdxKeyCompare(
21750 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20  pC, &r, &res);. 
21760 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f     if( pOp->opco
21770 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 7b 0a  de==OP_IdxLT ){.
21780 20 20 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73        res = -res
21790 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
217a0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
217b0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45  opcode==OP_IdxGE
217c0 20 29 3b 0a 20 20 20 20 20 20 72 65 73 2b 2b 3b   );.      res++;
217d0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
217e0 65 73 3e 30 20 29 7b 0a 20 20 20 20 20 20 70 63  es>0 ){.      pc
217f0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 20 3b   = pOp->p2 - 1 ;
21800 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
21810 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
21820 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50 32 20  : Destroy P1 P2 
21830 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c  P3 * *.**.** Del
21840 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61  ete an entire da
21850 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
21860 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
21870 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 61 74   page in the dat
21880 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73  abase.** file is
21890 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a   given by P1..**
218a0 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65  .** The table be
218b0 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69 73  ing destroyed is
218c0 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
218d0 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 33  abase file if P3
218e0 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d  ==0.  If.** P3==
218f0 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
21900 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
21910 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
21920 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
21930 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
21940 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
21950 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
21960 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
21970 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54  LE..**.** If AUT
21980 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c  OVACUUM is enabl
21990 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f  ed then it is po
219a0 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74  ssible that anot
219b0 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  her root page.**
219c0 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20   might be moved 
219d0 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64  into the newly d
219e0 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65  eleted root page
219f0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
21a00 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61  p all.** root pa
21a10 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61  ges contiguous a
21a20 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
21a30 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  of the database.
21a40 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20    The former.** 
21a50 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f  value of the roo
21a60 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65  t page that move
21a70 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65  d - its value be
21a80 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63  fore the move oc
21a90 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73  curred -.** is s
21aa0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
21ab0 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67  r P2.  If no pag
21ac0 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77  e .** movement w
21ad0 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63  as required (bec
21ae0 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 62  ause the table b
21af0 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73  eing dropped was
21b00 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65   already .** the
21b10 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65   last one in the
21b20 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20   database) then 
21b30 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64  a zero is stored
21b40 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
21b50 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
21b60 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74 68  M is disabled th
21b70 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
21b80 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
21b90 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
21ba0 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73  so: Clear.*/.cas
21bb0 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20  e OP_Destroy: { 
21bc0 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
21bd0 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
21be0 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 43  iMoved;.  int iC
21bf0 6e 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  nt;.#ifndef SQLI
21c00 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
21c10 41 42 4c 45 0a 20 20 56 64 62 65 20 2a 70 56 64  ABLE.  Vdbe *pVd
21c20 62 65 3b 0a 20 20 69 43 6e 74 20 3d 20 30 3b 0a  be;.  iCnt = 0;.
21c30 20 20 66 6f 72 28 70 56 64 62 65 3d 64 62 2d 3e    for(pVdbe=db->
21c40 70 56 64 62 65 3b 20 70 56 64 62 65 3b 20 70 56  pVdbe; pVdbe; pV
21c50 64 62 65 3d 70 56 64 62 65 2d 3e 70 4e 65 78 74  dbe=pVdbe->pNext
21c60 29 7b 0a 20 20 20 20 69 66 28 20 70 56 64 62 65  ){.    if( pVdbe
21c70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41  ->magic==VDBE_MA
21c80 47 49 43 5f 52 55 4e 20 26 26 20 70 56 64 62 65  GIC_RUN && pVdbe
21c90 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32  ->inVtabMethod<2
21ca0 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30   && pVdbe->pc>=0
21cb0 20 29 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b   ){.      iCnt++
21cc0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73  ;.    }.  }.#els
21cd0 65 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e 61  e.  iCnt = db->a
21ce0 63 74 69 76 65 56 64 62 65 43 6e 74 3b 0a 23 65  ctiveVdbeCnt;.#e
21cf0 6e 64 69 66 0a 20 20 69 66 28 20 69 43 6e 74 3e  ndif.  if( iCnt>
21d00 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  1 ){.    rc = SQ
21d10 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20  LITE_LOCKED;.   
21d20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20   p->errorAction 
21d30 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65  = OE_Abort;.  }e
21d40 6c 73 65 7b 0a 20 20 20 20 69 6e 74 20 69 44 62  lse{.    int iDb
21d50 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20   = pOp->p3;.    
21d60 61 73 73 65 72 74 28 20 69 43 6e 74 3d 3d 31 20  assert( iCnt==1 
21d70 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
21d80 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
21d90 31 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20  1<<iDb))!=0 );. 
21da0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
21db0 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62  treeDropTable(db
21dc0 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20  ->aDb[iDb].pBt, 
21dd0 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64  pOp->p1, &iMoved
21de0 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  );.    MemSetTyp
21df0 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
21e00 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Int);.    pOut->
21e10 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69  u.i = iMoved;.#i
21e20 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21e30 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20  T_AUTOVACUUM.   
21e40 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
21e50 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20  OK && iMoved!=0 
21e60 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
21e70 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 26 64  RootPageMoved(&d
21e80 62 2d 3e 61 44 62 5b 69 44 62 5d 2c 20 69 4d 6f  b->aDb[iDb], iMo
21e90 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  ved, pOp->p1);. 
21ea0 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
21eb0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
21ec0 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20  pcode: Clear P1 
21ed0 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  P2 P3.**.** Dele
21ee0 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20  te all contents 
21ef0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
21f00 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
21f10 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a  hose root page.*
21f20 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  * in the databas
21f30 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  e file is given 
21f40 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c  by P1.  But, unl
21f50 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20  ike Destroy, do 
21f60 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68  not.** remove th
21f70 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
21f80 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
21f90 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
21fa0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
21fb0 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d  lear is in the m
21fc0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
21fd0 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a  e if P2==0.  If.
21fe0 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68  ** P2==1 then th
21ff0 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
22000 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
22010 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
22020 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
22030 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
22040 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
22050 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
22060 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
22070 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
22080 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
22090 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66  en the table ref
220a0 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65  erred to must be
220b0 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61   an.** intkey ta
220c0 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c  ble (an SQL tabl
220d0 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29  e, not an index)
220e0 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
220f0 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a  he row change .*
22100 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65  * count is incre
22110 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
22120 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
22130 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
22140 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20  cleared. .** If 
22150 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
22160 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  an zero, then th
22170 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
22180 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
22190 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65  .** also increme
221a0 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
221b0 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
221c0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
221d0 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  eared..**.** See
221e0 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a   also: Destroy.*
221f0 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a  /.case OP_Clear:
22200 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65   {.  int nChange
22210 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
22220 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
22230 28 31 3c 3c 70 4f 70 2d 3e 70 32 29 29 21 3d 30  (1<<pOp->p2))!=0
22240 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
22250 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c  e3BtreeClearTabl
22260 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62  e(.      db->aDb
22270 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70  [pOp->p2].pBt, p
22280 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33  Op->p1, (pOp->p3
22290 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29   ? &nChange : 0)
222a0 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  .  );.  if( pOp-
222b0 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43  >p3 ){.    p->nC
222c0 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65  hange += nChange
222d0 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
222e0 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  3>0 ){.      p->
222f0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e  aMem[pOp->p3].u.
22300 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20  i += nChange;.  
22310 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
22320 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
22330 72 65 61 74 65 54 61 62 6c 65 20 50 31 20 50 32  reateTable P1 P2
22340 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c   * * *.**.** All
22350 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c  ocate a new tabl
22360 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  e in the main da
22370 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
22380 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a  1==0 or in the.*
22390 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  * auxiliary data
223a0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
223b0 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
223c0 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
223d0 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65  .** P1>1.  Write
223e0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   the root page n
223f0 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77  umber of the new
22400 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72   table into.** r
22410 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a  egister P2.**.**
22420 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
22430 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20  between a table 
22440 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20  and an index is 
22450 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d  this:  A table m
22460 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d  ust.** have a 4-
22470 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79  byte integer key
22480 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72   and can have ar
22490 62 69 74 72 61 72 79 20 64 61 74 61 2e 20 20 41  bitrary data.  A
224a0 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61  n index.** has a
224b0 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65 79 20  n arbitrary key 
224c0 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a  but no data..**.
224d0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65  ** See also: Cre
224e0 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f  ateIndex.*/./* O
224f0 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64  pcode: CreateInd
22500 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ex P1 P2 * * *.*
22510 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20  *.** Allocate a 
22520 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65  new index in the
22530 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
22540 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20  ile if P1==0 or 
22550 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69  in the.** auxili
22560 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
22570 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e  e if P1==1 or in
22580 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
22590 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31  abase if.** P1>1
225a0 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f  .  Write the roo
225b0 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  t page number of
225c0 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69   the new table i
225d0 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  nto.** register 
225e0 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f  P2..**.** See do
225f0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f  cumentation on O
22600 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f  P_CreateTable fo
22610 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
22620 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  ormation..*/.cas
22630 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78  e OP_CreateIndex
22640 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  :            /* 
22650 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
22660 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
22670 65 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20  eTable: {       
22680 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
22690 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70  lease */.  int p
226a0 67 6e 6f 20 3d 20 30 3b 0a 20 20 69 6e 74 20 66  gno = 0;.  int f
226b0 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b  lags;.  Db *pDb;
226c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
226d0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
226e0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
226f0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
22700 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70  ask & (1<<pOp->p
22710 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20  1))!=0 );.  pDb 
22720 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
22730 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
22740 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
22750 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
22760 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20  =OP_CreateTable 
22770 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20  ){.    /* flags 
22780 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20  = BTREE_INTKEY; 
22790 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42  */.    flags = B
227a0 54 52 45 45 5f 4c 45 41 46 44 41 54 41 7c 42 54  TREE_LEAFDATA|BT
227b0 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65  REE_INTKEY;.  }e
227c0 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d  lse{.    flags =
227d0 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 3b   BTREE_ZERODATA;
227e0 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
227f0 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
22800 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70  ble(pDb->pBt, &p
22810 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 70  gno, flags);.  p
22820 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b  Out->u.i = pgno;
22830 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
22840 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
22850 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
22860 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63   Opcode: ParseSc
22870 68 65 6d 61 20 50 31 20 50 32 20 2a 20 50 34 20  hema P1 P2 * P4 
22880 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64  *.**.** Read and
22890 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69   parse all entri
228a0 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49  es from the SQLI
228b0 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20  TE_MASTER table 
228c0 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a  of database P1.*
228d0 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65  * that match the
228e0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34   WHERE clause P4
228f0 2e 20 20 50 32 20 69 73 20 74 68 65 20 22 66 6f  .  P2 is the "fo
22900 72 63 65 22 20 66 6c 61 67 2e 20 20 20 41 6c 77  rce" flag.   Alw
22910 61 79 73 20 64 6f 0a 2a 2a 20 74 68 65 20 70 61  ays do.** the pa
22920 72 73 69 6e 67 20 69 66 20 50 32 20 69 73 20 74  rsing if P2 is t
22930 72 75 65 2e 20 20 49 66 20 50 32 20 69 73 20 66  rue.  If P2 is f
22940 61 6c 73 65 2c 20 74 68 65 6e 20 74 68 69 73 20  alse, then this 
22950 72 6f 75 74 69 6e 65 20 69 73 20 61 0a 2a 2a 20  routine is a.** 
22960 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 73 63 68  no-op if the sch
22970 65 6d 61 20 69 73 20 6e 6f 74 20 63 75 72 72 65  ema is not curre
22980 6e 74 6c 79 20 6c 6f 61 64 65 64 2e 20 20 49 6e  ntly loaded.  In
22990 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
229a0 20 50 32 0a 2a 2a 20 69 73 20 66 61 6c 73 65 2c   P2.** is false,
229b0 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54   the SQLITE_MAST
229c0 45 52 20 74 61 62 6c 65 20 69 73 20 6f 6e 6c 79  ER table is only
229d0 20 70 61 72 73 65 64 20 69 66 20 74 68 65 20 72   parsed if the r
229e0 65 73 74 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  est of the.** sc
229f0 68 65 6d 61 20 69 73 20 61 6c 72 65 61 64 79 20  hema is already 
22a00 6c 6f 61 64 65 64 20 69 6e 74 6f 20 74 68 65 20  loaded into the 
22a10 73 79 6d 62 6f 6c 20 74 61 62 6c 65 2e 0a 2a 2a  symbol table..**
22a20 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
22a30 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73  invokes the pars
22a40 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e  er to create a n
22a50 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
22a60 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73  ne,.** then runs
22a70 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c   the new virtual
22a80 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73   machine.  It is
22a90 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61   thus a re-entra
22aa0 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  nt opcode..*/.ca
22ab0 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  se OP_ParseSchem
22ac0 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 20 3d  a: {.  int iDb =
22ad0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65   pOp->p1;.  asse
22ae0 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
22af0 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 0a 20 20  b<db->nDb );..  
22b00 2f 2a 20 49 66 20 70 4f 70 2d 3e 70 32 20 69 73  /* If pOp->p2 is
22b10 20 30 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70   0, then this op
22b20 63 6f 64 65 20 69 73 20 62 65 69 6e 67 20 65 78  code is being ex
22b30 65 63 75 74 65 64 20 74 6f 20 72 65 61 64 20 61  ecuted to read a
22b40 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 72 6f 77  .  ** single row
22b50 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  , for example th
22b60 65 20 72 6f 77 20 63 6f 72 72 65 73 70 6f 6e 64  e row correspond
22b70 69 6e 67 20 74 6f 20 61 20 6e 65 77 20 69 6e 64  ing to a new ind
22b80 65 78 0a 20 20 2a 2a 20 63 72 65 61 74 65 64 20  ex.  ** created 
22b90 62 79 20 74 68 69 73 20 56 44 42 45 2c 20 66 72  by this VDBE, fr
22ba0 6f 6d 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61  om the sqlite_ma
22bb0 73 74 65 72 20 74 61 62 6c 65 2e 20 49 74 20 6f  ster table. It o
22bc0 6e 6c 79 0a 20 20 2a 2a 20 64 6f 65 73 20 74 68  nly.  ** does th
22bd0 69 73 20 69 66 20 74 68 65 20 63 6f 72 72 65 73  is if the corres
22be0 70 6f 6e 64 69 6e 67 20 69 6e 2d 6d 65 6d 6f 72  ponding in-memor
22bf0 79 20 73 63 68 65 6d 61 20 69 73 20 63 75 72 72  y schema is curr
22c00 65 6e 74 6c 79 0a 20 20 2a 2a 20 6c 6f 61 64 65  ently.  ** loade
22c10 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68  d. Otherwise, th
22c20 65 20 6e 65 77 20 69 6e 64 65 78 20 64 65 66 69  e new index defi
22c30 6e 69 74 69 6f 6e 20 63 61 6e 20 62 65 20 6c 6f  nition can be lo
22c40 61 64 65 64 20 61 6c 6f 6e 67 0a 20 20 2a 2a 20  aded along.  ** 
22c50 77 69 74 68 20 74 68 65 20 72 65 73 74 20 6f 66  with the rest of
22c60 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e   the schema when
22c70 20 69 74 20 69 73 20 72 65 71 75 69 72 65 64 2e   it is required.
22c80 0a 20 20 2a 2a 0a 20 20 2a 2a 20 41 6c 74 68 6f  .  **.  ** Altho
22c90 75 67 68 20 74 68 65 20 6d 75 74 65 78 20 6f 6e  ugh the mutex on
22ca0 20 74 68 65 20 42 74 53 68 61 72 65 64 20 6f 62   the BtShared ob
22cb0 6a 65 63 74 20 74 68 61 74 20 63 6f 72 72 65 73  ject that corres
22cc0 70 6f 6e 64 73 20 74 6f 0a 20 20 2a 2a 20 64 61  ponds to.  ** da
22cd0 74 61 62 61 73 65 20 69 44 62 20 28 74 68 65 20  tabase iDb (the 
22ce0 64 61 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e  database contain
22cf0 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 5f 6d  ing the sqlite_m
22d00 61 73 74 65 72 20 74 61 62 6c 65 0a 20 20 2a 2a  aster table.  **
22d10 20 72 65 61 64 20 62 79 20 74 68 69 73 20 69 6e   read by this in
22d20 73 74 72 75 63 74 69 6f 6e 29 20 69 73 20 63 75  struction) is cu
22d30 72 72 65 6e 74 6c 79 20 68 65 6c 64 2c 20 69 74  rrently held, it
22d40 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 74 6f   is necessary to
22d50 0a 20 20 2a 2a 20 6f 62 74 61 69 6e 20 74 68 65  .  ** obtain the
22d60 20 6d 75 74 65 78 65 73 20 6f 6e 20 61 6c 6c 20   mutexes on all 
22d70 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
22d80 65 73 20 62 65 66 6f 72 65 20 63 68 65 63 6b 69  es before checki
22d90 6e 67 20 69 66 0a 20 20 2a 2a 20 74 68 65 20 73  ng if.  ** the s
22da0 63 68 65 6d 61 20 6f 66 20 69 44 62 20 69 73 20  chema of iDb is 
22db0 6c 6f 61 64 65 64 2e 20 54 68 69 73 20 69 73 20  loaded. This is 
22dc0 62 65 63 61 75 73 65 2c 20 61 74 20 74 68 65 20  because, at the 
22dd0 73 74 61 72 74 20 6f 66 0a 20 20 2a 2a 20 74 68  start of.  ** th
22de0 65 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  e sqlite3_exec()
22df0 20 63 61 6c 6c 20 62 65 6c 6f 77 2c 20 53 51 4c   call below, SQL
22e00 69 74 65 20 77 69 6c 6c 20 69 6e 76 6f 6b 65 20  ite will invoke 
22e10 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72  .  ** sqlite3Btr
22e20 65 65 45 6e 74 65 72 41 6c 6c 28 29 2e 20 49 66  eeEnterAll(). If
22e30 20 61 6c 6c 20 6d 75 74 65 78 65 73 20 61 72 65   all mutexes are
22e40 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 68 65 6c   not already hel
22e50 64 2c 20 74 68 65 0a 20 20 2a 2a 20 69 44 62 20  d, the.  ** iDb 
22e60 6d 75 74 65 78 20 6d 61 79 20 62 65 20 74 65 6d  mutex may be tem
22e70 70 6f 72 61 72 69 6c 79 20 72 65 6c 65 61 73 65  porarily release
22e80 64 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c  d to avoid deadl
22e90 6f 63 6b 2e 20 49 66 20 0a 20 20 2a 2a 20 74 68  ock. If .  ** th
22ea0 69 73 20 68 61 70 70 65 6e 73 2c 20 74 68 65 6e  is happens, then
22eb0 20 73 6f 6d 65 20 6f 74 68 65 72 20 74 68 72 65   some other thre
22ec0 61 64 20 6d 61 79 20 64 65 6c 65 74 65 20 74 68  ad may delete th
22ed0 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 0a 20 20 2a  e in-memory .  *
22ee0 2a 20 73 63 68 65 6d 61 20 6f 66 20 64 61 74 61  * schema of data
22ef0 62 61 73 65 20 69 44 62 20 62 65 66 6f 72 65 20  base iDb before 
22f00 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
22f10 74 20 72 75 6e 73 2e 20 54 68 65 20 73 63 68 65  t runs. The sche
22f20 6d 61 0a 20 20 2a 2a 20 77 69 6c 6c 20 6e 6f 74  ma.  ** will not
22f30 20 62 65 20 72 65 6c 6f 61 64 65 64 20 62 65 63   be reloaded bec
22f40 75 61 73 65 20 74 68 65 20 64 62 2d 3e 69 6e 69  uase the db->ini
22f50 74 2e 62 75 73 79 20 66 6c 61 67 20 69 73 20 73  t.busy flag is s
22f60 65 74 2e 20 54 68 69 73 0a 20 20 2a 2a 20 63 61  et. This.  ** ca
22f70 6e 20 72 65 73 75 6c 74 20 69 6e 20 61 20 22 6e  n result in a "n
22f80 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 73 71  o such table: sq
22f90 6c 69 74 65 5f 6d 61 73 74 65 72 22 20 6f 72 20  lite_master" or 
22fa0 22 6d 61 6c 66 6f 72 6d 65 64 0a 20 20 2a 2a 20  "malformed.  ** 
22fb0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 22  database schema"
22fc0 20 65 72 72 6f 72 20 62 65 69 6e 67 20 72 65 74   error being ret
22fd0 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65  urned to the use
22fe0 72 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  r..  */.  assert
22ff0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f  ( sqlite3BtreeHo
23000 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62  ldsMutex(db->aDb
23010 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20  [iDb].pBt) );.  
23020 73 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65  sqlite3BtreeEnte
23030 72 41 6c 6c 28 64 62 29 3b 0a 20 20 69 66 28 20  rAll(db);.  if( 
23040 70 4f 70 2d 3e 70 32 20 7c 7c 20 44 62 48 61 73  pOp->p2 || DbHas
23050 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62  Property(db, iDb
23060 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  , DB_SchemaLoade
23070 64 29 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20  d) ){.    const 
23080 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 20 3d 20  char *zMaster = 
23090 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62  SCHEMA_TABLE(iDb
230a0 29 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 71  );.    char *zSq
230b0 6c 3b 0a 20 20 20 20 49 6e 69 74 44 61 74 61 20  l;.    InitData 
230c0 69 6e 69 74 44 61 74 61 3b 0a 20 20 20 20 69 6e  initData;.    in
230d0 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a  itData.db = db;.
230e0 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62      initData.iDb
230f0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20   = pOp->p1;.    
23100 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73  initData.pzErrMs
23110 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b  g = &p->zErrMsg;
23120 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  .    zSql = sqli
23130 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20  te3MPrintf(db,. 
23140 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61        "SELECT na
23150 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71  me, rootpage, sq
23160 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57  l FROM '%q'.%s W
23170 48 45 52 45 20 25 73 22 2c 0a 20 20 20 20 20 20  HERE %s",.      
23180 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e   db->aDb[iDb].zN
23190 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f  ame, zMaster, pO
231a0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66  p->p4.z);.    if
231b0 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( zSql==0 ){.   
231c0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e     rc = SQLITE_N
231d0 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  OMEM;.    }else{
231e0 0a 20 20 20 20 20 20 28 76 6f 69 64 29 73 71 6c  .      (void)sql
231f0 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
23200 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
23210 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d   db->init.busy==
23220 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  0 );.      db->i
23230 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20  nit.busy = 1;.  
23240 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20      initData.rc 
23250 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
23260 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e     assert( !db->
23270 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
23280 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
23290 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c  e3_exec(db, zSql
232a0 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  , sqlite3InitCal
232b0 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61  lback, &initData
232c0 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
232d0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc==SQLITE_OK ) 
232e0 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63  rc = initData.rc
232f0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  ;.      sqlite3D
23300 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b  bFree(db, zSql);
23310 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
23320 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 20 20  busy = 0;.      
23330 28 76 6f 69 64 29 73 71 6c 69 74 65 33 53 61 66  (void)sqlite3Saf
23340 65 74 79 4f 6e 28 64 62 29 3b 0a 20 20 20 20 7d  etyOn(db);.    }
23350 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42 74  .  }.  sqlite3Bt
23360 72 65 65 4c 65 61 76 65 41 6c 6c 28 64 62 29 3b  reeLeaveAll(db);
23370 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
23380 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67  E_NOMEM ){.    g
23390 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
233a0 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69    break;  .}..#i
233b0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
233c0 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20  E_OMIT_ANALYZE) 
233d0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
233e0 54 45 5f 4f 4d 49 54 5f 50 41 52 53 45 52 29 0a  TE_OMIT_PARSER).
233f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41  /* Opcode: LoadA
23400 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a  nalysis P1 * * *
23410 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68   *.**.** Read th
23420 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  e sqlite_stat1 t
23430 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73  able for databas
23440 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68  e P1 and load th
23450 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20  e content.** of 
23460 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20  that table into 
23470 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64  the internal ind
23480 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20  ex hash table.  
23490 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a  This will cause.
234a0 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  ** the analysis 
234b0 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  to be used when 
234c0 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75  preparing all su
234d0 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73  bsequent queries
234e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61  ..*/.case OP_Loa
234f0 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 69  dAnalysis: {.  i
23500 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  nt iDb = pOp->p1
23510 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
23520 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
23530 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  b );.  rc = sqli
23540 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
23550 64 62 2c 20 69 44 62 29 3b 0a 20 20 62 72 65 61  db, iDb);.  brea
23560 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  k;  .}.#endif /*
23570 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
23580 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 26  _OMIT_ANALYZE) &
23590 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
235a0 45 5f 4f 4d 49 54 5f 50 41 52 53 45 52 29 20 20  E_OMIT_PARSER)  
235b0 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  */../* Opcode: D
235c0 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20  ropTable P1 * * 
235d0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
235e0 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
235f0 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
23600 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
23610 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
23620 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69  table named P4 i
23630 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
23640 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
23650 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20  fter a table.** 
23660 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72  is dropped in or
23670 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20  der to keep the 
23680 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
23690 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
236a0 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
236b0 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
236c0 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
236d0 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20  e OP_DropTable: 
236e0 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
236f0 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28  kAndDeleteTable(
23700 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
23710 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
23720 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
23730 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a  DropIndex P1 * *
23740 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
23750 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
23760 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
23770 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
23780 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
23790 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20   index named P4 
237a0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
237b0 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
237c0 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a  after an index.*
237d0 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20  * is dropped in 
237e0 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68  order to keep th
237f0 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
23800 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
23810 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
23820 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
23830 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
23840 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78  ase OP_DropIndex
23850 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
23860 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65  inkAndDeleteInde
23870 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  x(db, pOp->p1, p
23880 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
23890 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
238a0 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20 50 31  : DropTrigger P1
238b0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
238c0 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
238d0 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
238e0 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
238f0 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
23900 20 74 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d   the trigger nam
23910 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
23920 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
23930 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 72  alled after a tr
23940 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70  igger.** is drop
23950 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ped in order to 
23960 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
23970 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
23980 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
23990 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
239a0 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
239b0 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
239c0 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73  opTrigger: {.  s
239d0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
239e0 65 6c 65 74 65 54 72 69 67 67 65 72 28 64 62 2c  eleteTrigger(db,
239f0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
23a00 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
23a10 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
23a20 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
23a30 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65  _CHECK./* Opcode
23a40 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31  : IntegrityCk P1
23a50 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a   P2 P3 * P5.**.*
23a60 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73  * Do an analysis
23a70 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c   of the currentl
23a80 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e  y open database.
23a90 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65    Store in.** re
23aa0 67 69 73 74 65 72 20 50 31 20 74 68 65 20 74 65  gister P1 the te
23ab0 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d  xt of an error m
23ac0 65 73 73 61 67 65 20 64 65 73 63 72 69 62 69 6e  essage describin
23ad0 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a  g any problems..
23ae0 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d  ** If no problem
23af0 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f  s are found, sto
23b00 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67  re a NULL in reg
23b10 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
23b20 54 68 65 20 72 65 67 69 73 74 65 72 20 50 33 20  The register P3 
23b30 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d 61 78  contains the max
23b40 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61  imum number of a
23b50 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a  llowed errors..*
23b60 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33  * At most reg(P3
23b70 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65  ) errors will be
23b80 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e   reported..** In
23b90 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
23ba0 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73  e analysis stops
23bb0 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28   as soon as reg(
23bc0 50 31 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a  P1) errors are .
23bd0 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31  ** seen.  Reg(P1
23be0 29 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74  ) is updated wit
23bf0 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  h the number of 
23c00 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67  errors remaining
23c10 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74  ..**.** The root
23c20 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66   page numbers of
23c30 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74   all tables in t
23c40 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20  he database are 
23c50 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65  integer.** store
23c60 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20 72 65  d in reg(P1), re
23c70 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50 31 2b  g(P1+1), reg(P1+
23c80 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20  2), ....  There 
23c90 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a  are P2 tables.**
23ca0 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66   total..**.** If
23cb0 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P5 is not zero,
23cc0 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f   the check is do
23cd0 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69  ne on the auxili
23ce0 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ary database.** 
23cf0 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61  file, not the ma
23d00 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
23d10 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
23d20 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 69  ode is used to i
23d30 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74  mplement the int
23d40 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61  egrity_check pra
23d50 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  gma..*/.case OP_
23d60 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20  IntegrityCk: {. 
23d70 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20   int nRoot;     
23d80 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
23d90 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20  bles to check.  
23da0 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20  (Number of root 
23db0 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74  pages.) */.  int
23dc0 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20   *aRoot;     /* 
23dd0 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67  Array of rootpag
23de0 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61  e numbers for ta
23df0 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b  bles to be check
23e00 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20  ed */.  int j;  
23e10 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
23e20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74  counter */.  int
23e30 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20   nErr;       /* 
23e40 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
23e50 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63   reported */.  c
23e60 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f  har *z;        /
23e70 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 65 72  * Text of the er
23e80 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20  ror report */.  
23e90 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20  Mem *pnErr;     
23ea0 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65 65 70  /* Register keep
23eb0 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72  ing track of err
23ec0 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f  ors remaining */
23ed0 0a 20 20 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f  .  .  nRoot = pO
23ee0 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
23ef0 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52   nRoot>0 );.  aR
23f00 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  oot = sqlite3DbM
23f10 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a  allocRaw(db, siz
23f20 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b  eof(int)*(nRoot+
23f30 31 29 20 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f  1) );.  if( aRoo
23f40 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  t==0 ) goto no_m
23f50 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  em;.  assert( pO
23f60 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
23f70 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
23f80 20 70 6e 45 72 72 20 3d 20 26 70 2d 3e 61 4d 65   pnErr = &p->aMe
23f90 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
23fa0 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c  sert( (pnErr->fl
23fb0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
23fc0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  0 );.  assert( (
23fd0 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28  pnErr->flags & (
23fe0 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
23ff0 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20  ))==0 );.  pIn1 
24000 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
24010 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20  p1];.  for(j=0; 
24020 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20  j<nRoot; j++){. 
24030 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69     aRoot[j] = (i
24040 6e 74 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e  nt)sqlite3VdbeIn
24050 74 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29  tValue(&pIn1[j])
24060 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d  ;.  }.  aRoot[j]
24070 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
24080 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20  pOp->p5<db->nDb 
24090 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
240a0 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
240b0 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b  <pOp->p5))!=0 );
240c0 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74  .  z = sqlite3Bt
240d0 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63  reeIntegrityChec
240e0 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  k(db->aDb[pOp->p
240f0 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e  5].pBt, aRoot, n
24100 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20  Root,.          
24110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24120 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72         (int)pnEr
24130 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a  r->u.i, &nErr);.
24140 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
24150 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e  db, aRoot);.  pn
24160 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72  Err->u.i -= nErr
24170 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
24180 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
24190 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29  .  if( nErr==0 )
241a0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d  {.    assert( z=
241b0 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  =0 );.  }else if
241c0 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ( z==0 ){.    go
241d0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c  to no_mem;.  }el
241e0 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
241f0 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e  dbeMemSetStr(pIn
24200 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  1, z, -1, SQLITE
24210 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66  _UTF8, sqlite3_f
24220 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  ree);.  }.  UPDA
24230 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
24240 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
24250 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
24260 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  ng(pIn1, encodin
24270 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
24280 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
24290 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
242a0 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  HECK */../* Opco
242b0 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31  de: RowSetAdd P1
242c0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
242d0 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67  Insert the integ
242e0 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79  er value held by
242f0 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74   register P2 int
24300 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  o a boolean inde
24310 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67  x.** held in reg
24320 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
24330 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69  An assertion fai
24340 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20  ls if P2 is not 
24350 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
24360 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64  ase OP_RowSetAdd
24370 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 32  : {       /* in2
24380 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 64 78 3b   */.  Mem *pIdx;
24390 0a 20 20 4d 65 6d 20 2a 70 56 61 6c 3b 0a 20 20  .  Mem *pVal;.  
243a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
243b0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  0 && pOp->p1<=p-
243c0 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 64 78 20  >nMem );.  pIdx 
243d0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
243e0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
243f0 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
24400 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p2<=p->nMem );.
24410 20 20 70 56 61 6c 20 3d 20 26 70 2d 3e 61 4d 65    pVal = &p->aMe
24420 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
24430 73 65 72 74 28 20 28 70 56 61 6c 2d 3e 66 6c 61  sert( (pVal->fla
24440 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
24450 20 29 3b 0a 20 20 69 66 28 20 28 70 49 64 78 2d   );.  if( (pIdx-
24460 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
24470 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  Set)==0 ){.    s
24480 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
24490 52 6f 77 53 65 74 28 70 49 64 78 29 3b 0a 20 20  RowSet(pIdx);.  
244a0 20 20 69 66 28 20 28 70 49 64 78 2d 3e 66 6c 61    if( (pIdx->fla
244b0 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
244c0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
244d0 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  m;.  }.  sqlite3
244e0 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 64  RowSetInsert(pId
244f0 78 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 56  x->u.pRowSet, pV
24500 61 6c 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61  al->u.i);.  brea
24510 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
24520 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50   RowSetRead P1 P
24530 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45  2 P3 * *.**.** E
24540 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c  xtract the small
24550 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62  est value from b
24560 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
24570 61 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c  and put that val
24580 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  ue into.** regis
24590 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20  ter P3.  Or, if 
245a0 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31  boolean index P1
245b0 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d   is initially em
245c0 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a  pty, leave P3.**
245d0 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a   unchanged and j
245e0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
245f0 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  on P2..*/.case O
24600 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20  P_RowSetRead: { 
24610 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 6f        /* jump, o
24620 75 74 33 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  ut3 */.  Mem *pI
24630 64 78 3b 0a 20 20 69 36 34 20 76 61 6c 3b 0a 20  dx;.  i64 val;. 
24640 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
24650 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70  >0 && pOp->p1<=p
24660 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 43 48 45 43  ->nMem );.  CHEC
24670 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b  K_FOR_INTERRUPT;
24680 0a 20 20 70 49 64 78 20 3d 20 26 70 2d 3e 61 4d  .  pIdx = &p->aM
24690 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
246a0 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
246b0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
246c0 70 49 64 78 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIdx->flags & ME
246d0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20  M_RowSet)==0 .  
246e0 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65   || sqlite3RowSe
246f0 74 4e 65 78 74 28 70 49 64 78 2d 3e 75 2e 70 52  tNext(pIdx->u.pR
24700 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a  owSet, &val)==0.
24710 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20    ){.    /* The 
24720 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73  boolean index is
24730 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71   empty */.    sq
24740 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
24750 75 6c 6c 28 70 49 64 78 29 3b 0a 20 20 20 20 70  ull(pIdx);.    p
24760 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
24770 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
24780 20 41 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c   A value was pul
24790 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64  led from the ind
247a0 65 78 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74  ex */.    assert
247b0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
247c0 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
247d0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
247e0 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f  beMemSetInt64(pO
247f0 75 74 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20  ut, val);.  }.  
24800 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
24810 6f 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20  ode: RowSetTest 
24820 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 0a 2a  P1 P2 P3 P4.**.*
24830 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73  * Register P3 is
24840 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64   assumed to hold
24850 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
24860 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67 69  r value. If regi
24870 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61  ster P1.** conta
24880 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62 6a  ins a RowSet obj
24890 65 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f 77  ect and that Row
248a0 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61  Set object conta
248b0 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  ins.** the value
248c0 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d   held in P3, jum
248d0 70 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  p to register P2
248e0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 73  . Otherwise, ins
248f0 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67  ert the.** integ
24900 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74 68  er in P3 into th
24910 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e  e RowSet and con
24920 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a  tinue on to the.
24930 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a  ** next opcode..
24940 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65 74  **.** The RowSet
24950 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69 6d   object is optim
24960 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61 73  ized for the cas
24970 65 20 77 68 65 72 65 20 73 75 63 63 65 73 73 69  e where successi
24980 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e  ve sets.** of in
24990 74 65 67 65 72 73 2c 20 77 68 65 72 65 20 65 61  tegers, where ea
249a0 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20  ch set contains 
249b0 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20 45  no duplicates. E
249c0 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61  ach set.** of va
249d0 6c 75 65 73 20 69 73 20 69 64 65 6e 74 69 66 69  lues is identifi
249e0 65 64 20 62 79 20 61 20 75 6e 69 71 75 65 20 50  ed by a unique P
249f0 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72  4 value. The fir
24a00 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68  st set.** must h
24a10 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66  ave P4==0, the f
24a20 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20  inal set P4=-1. 
24a30 20 50 34 20 6d 75 73 74 20 62 65 20 65 69 74 68   P4 must be eith
24a40 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d  er -1 or.** non-
24a50 6e 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20 6e  negative.  For n
24a60 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75  on-negative valu
24a70 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68  es of P4 only th
24a80 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74  e lower 4.** bit
24a90 73 20 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e  s are significan
24aa0 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c  t..**.** This al
24ab0 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  lows optimizatio
24ac0 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d  ns: (a) when P4=
24ad0 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  =0 there is no n
24ae0 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74  eed to test.** t
24af0 68 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74  he rowset object
24b00 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69   for P3, as it i
24b10 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74  s guaranteed not
24b20 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a   to contain it,.
24b30 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d  ** (b) when P4==
24b40 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  -1 there is no n
24b50 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68  eed to insert th
24b60 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77  e value, as it w
24b70 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20  ill.** never be 
24b80 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20  tested for, and 
24b90 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65  (c) when a value
24ba0 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66   that is part of
24bb0 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73   set X is.** ins
24bc0 65 72 74 65 64 2c 20 74 68 65 72 65 20 69 73 20  erted, there is 
24bd0 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63  no need to searc
24be0 68 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  h to see if the 
24bf0 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a  same value was.*
24c00 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73  * previously ins
24c10 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
24c20 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20   set X (only if 
24c30 69 74 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c  it was previousl
24c40 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73  y.** inserted as
24c50 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74   part of some ot
24c60 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73  her set)..*/.cas
24c70 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a  e OP_RowSetTest:
24c80 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
24c90 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
24ca0 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  in1, in3 */.  in
24cb0 74 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34  t iSet = pOp->p4
24cc0 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  .i;.  assert( pI
24cd0 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n3->flags&MEM_In
24ce0 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  t );..  /* If th
24cf0 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20  ere is anything 
24d00 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77  other than a row
24d10 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65  set object in me
24d20 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20  mory cell P1,.  
24d30 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77  ** delete it now
24d40 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20   and initialize 
24d50 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79  P1 with an empty
24d60 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69   rowset.  */.  i
24d70 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
24d80 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
24d90 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
24da0 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28  dbeMemSetRowSet(
24db0 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28  pIn1);.    if( (
24dc0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
24dd0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67  M_RowSet)==0 ) g
24de0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
24df0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
24e00 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
24e10 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53   );.  assert( iS
24e20 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d  et==-1 || iSet>=
24e30 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20  0 );.  if( iSet 
24e40 29 7b 0a 20 20 20 20 69 6e 74 20 65 78 69 73 74  ){.    int exist
24e50 73 3b 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20  s;.    exists = 
24e60 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73  sqlite3RowSetTes
24e70 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
24e80 74 2c 20 69 53 65 74 3e 3d 30 20 3f 20 69 53 65  t, iSet>=0 ? iSe
24e90 74 20 26 20 30 78 66 20 3a 20 30 78 66 66 2c 0a  t & 0xf : 0xff,.
24ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
24ec0 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 69  In3->u.i);.    i
24ed0 66 28 20 65 78 69 73 74 73 20 29 7b 0a 20 20 20  f( exists ){.   
24ee0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
24ef0 2d 20 31 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  - 1;.      break
24f00 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
24f10 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20  ( iSet>=0 ){.   
24f20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
24f30 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  sert(pIn1->u.pRo
24f40 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29  wSet, pIn3->u.i)
24f50 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
24f60 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
24f70 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 2f  E_OMIT_TRIGGER./
24f80 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 74 65 78  * Opcode: Contex
24f90 74 50 75 73 68 20 2a 20 2a 20 2a 20 0a 2a 2a 0a  tPush * * * .**.
24fa0 2a 2a 20 53 61 76 65 20 74 68 65 20 63 75 72 72  ** Save the curr
24fb0 65 6e 74 20 56 64 62 65 20 63 6f 6e 74 65 78 74  ent Vdbe context
24fc0 20 73 75 63 68 20 74 68 61 74 20 69 74 20 63 61   such that it ca
24fd0 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20 62 79  n be restored by
24fe0 20 61 20 43 6f 6e 74 65 78 74 50 6f 70 0a 2a 2a   a ContextPop.**
24ff0 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 63 6f 6e   opcode. The con
25000 74 65 78 74 20 73 74 6f 72 65 73 20 74 68 65 20  text stores the 
25010 6c 61 73 74 20 69 6e 73 65 72 74 20 72 6f 77 20  last insert row 
25020 69 64 2c 20 74 68 65 20 6c 61 73 74 20 73 74 61  id, the last sta
25030 74 65 6d 65 6e 74 20 63 68 61 6e 67 65 0a 2a 2a  tement change.**
25040 20 63 6f 75 6e 74 2c 20 61 6e 64 20 74 68 65 20   count, and the 
25050 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e  current statemen
25060 74 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 2e 0a  t change count..
25070 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 74 65  */.case OP_Conte
25080 78 74 50 75 73 68 3a 20 7b 0a 20 20 69 6e 74 20  xtPush: {.  int 
25090 69 20 3d 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74  i = p->contextSt
250a0 61 63 6b 54 6f 70 2b 2b 3b 0a 20 20 43 6f 6e 74  ackTop++;.  Cont
250b0 65 78 74 20 2a 70 43 6f 6e 74 65 78 74 3b 0a 0a  ext *pContext;..
250c0 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29    assert( i>=0 )
250d0 3b 0a 20 20 2f 2a 20 46 49 58 20 4d 45 3a 20 54  ;.  /* FIX ME: T
250e0 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 61 6c  his should be al
250f0 6c 6f 63 61 74 65 64 20 61 73 20 70 61 72 74 20  located as part 
25100 6f 66 20 74 68 65 20 76 64 62 65 20 61 74 20 63  of the vdbe at c
25110 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 20  ompile-time */. 
25120 20 69 66 28 20 69 3e 3d 70 2d 3e 63 6f 6e 74 65   if( i>=p->conte
25130 78 74 53 74 61 63 6b 44 65 70 74 68 20 29 7b 0a  xtStackDepth ){.
25140 20 20 20 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74      p->contextSt
25150 61 63 6b 44 65 70 74 68 20 3d 20 69 2b 31 3b 0a  ackDepth = i+1;.
25160 20 20 20 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74      p->contextSt
25170 61 63 6b 20 3d 20 73 71 6c 69 74 65 33 44 62 52  ack = sqlite3DbR
25180 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 64 62 2c  eallocOrFree(db,
25190 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b   p->contextStack
251a0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
251b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251c0 20 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65              size
251d0 6f 66 28 43 6f 6e 74 65 78 74 29 2a 28 69 2b 31  of(Context)*(i+1
251e0 29 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 63  ));.    if( p->c
251f0 6f 6e 74 65 78 74 53 74 61 63 6b 3d 3d 30 20 29  ontextStack==0 )
25200 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
25210 7d 0a 20 20 70 43 6f 6e 74 65 78 74 20 3d 20 26  }.  pContext = &
25220 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 5b  p->contextStack[
25230 69 5d 3b 0a 20 20 70 43 6f 6e 74 65 78 74 2d 3e  i];.  pContext->
25240 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e  lastRowid = db->
25250 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 43 6f  lastRowid;.  pCo
25260 6e 74 65 78 74 2d 3e 6e 43 68 61 6e 67 65 20 3d  ntext->nChange =
25270 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 62   p->nChange;.  b
25280 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
25290 64 65 3a 20 43 6f 6e 74 65 78 74 50 6f 70 20 2a  de: ContextPop *
252a0 20 2a 20 2a 20 0a 2a 2a 0a 2a 2a 20 52 65 73 74   * * .**.** Rest
252b0 6f 72 65 20 74 68 65 20 56 64 62 65 20 63 6f 6e  ore the Vdbe con
252c0 74 65 78 74 20 74 6f 20 74 68 65 20 73 74 61 74  text to the stat
252d0 65 20 69 74 20 77 61 73 20 69 6e 20 77 68 65 6e  e it was in when
252e0 20 63 6f 6e 74 65 78 74 50 75 73 68 20 77 61 73   contextPush was
252f0 20 6c 61 73 74 0a 2a 2a 20 65 78 65 63 75 74 65   last.** execute
25300 64 2e 20 54 68 65 20 63 6f 6e 74 65 78 74 20 73  d. The context s
25310 74 6f 72 65 73 20 74 68 65 20 6c 61 73 74 20 69  tores the last i
25320 6e 73 65 72 74 20 72 6f 77 20 69 64 2c 20 74 68  nsert row id, th
25330 65 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  e last statement
25340 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  .** change count
25350 2c 20 61 6e 64 20 74 68 65 20 63 75 72 72 65 6e  , and the curren
25360 74 20 73 74 61 74 65 6d 65 6e 74 20 63 68 61 6e  t statement chan
25370 67 65 20 63 6f 75 6e 74 2e 0a 2a 2f 0a 63 61 73  ge count..*/.cas
25380 65 20 4f 50 5f 43 6f 6e 74 65 78 74 50 6f 70 3a  e OP_ContextPop:
25390 20 7b 0a 20 20 43 6f 6e 74 65 78 74 20 2a 70 43   {.  Context *pC
253a0 6f 6e 74 65 78 74 20 3d 20 26 70 2d 3e 63 6f 6e  ontext = &p->con
253b0 74 65 78 74 53 74 61 63 6b 5b 2d 2d 70 2d 3e 63  textStack[--p->c
253c0 6f 6e 74 65 78 74 53 74 61 63 6b 54 6f 70 5d 3b  ontextStackTop];
253d0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 63 6f  .  assert( p->co
253e0 6e 74 65 78 74 53 74 61 63 6b 54 6f 70 3e 3d 30  ntextStackTop>=0
253f0 20 29 3b 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f   );.  db->lastRo
25400 77 69 64 20 3d 20 70 43 6f 6e 74 65 78 74 2d 3e  wid = pContext->
25410 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 2d 3e  lastRowid;.  p->
25420 6e 43 68 61 6e 67 65 20 3d 20 70 43 6f 6e 74 65  nChange = pConte
25430 78 74 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 62  xt->nChange;.  b
25440 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
25450 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
25460 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f  _OMIT_TRIGGER */
25470 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
25480 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
25490 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  ENT./* Opcode: M
254a0 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20 2a 20  emMax P1 P2 * * 
254b0 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
254c0 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
254d0 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69  r P1 to the maxi
254e0 6d 75 6d 20 6f 66 20 69 74 73 20 63 75 72 72 65  mum of its curre
254f0 6e 74 20 76 61 6c 75 65 0a 2a 2a 20 61 6e 64 20  nt value.** and 
25500 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
25510 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
25520 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
25530 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72   throws an error
25540 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63   if the memory c
25550 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69  ell is not initi
25560 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67  ally.** an integ
25570 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  er..*/.case OP_M
25580 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20  emMax: {        
25590 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20  /* in1, in2 */. 
255a0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
255b0 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
255c0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
255d0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32  mIntegerify(pIn2
255e0 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
255f0 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20  .i<pIn2->u.i){. 
25600 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70     pIn1->u.i = p
25610 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20  In2->u.i;.  }.  
25620 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
25630 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  /* SQLITE_OMIT_A
25640 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
25650 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f  ./* Opcode: IfPo
25660 73 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  s P1 P2 * * *.**
25670 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
25680 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
25690 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c  is 1 or greater,
256a0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
256b0 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
256c0 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73   to use this ins
256d0 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65  truction on a re
256e0 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73  gister that does
256f0 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  .** not contain 
25700 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20  an integer.  An 
25710 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20  assertion fault 
25720 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79  will result if y
25730 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20  ou try..*/.case 
25740 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20  OP_IfPos: {     
25750 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
25760 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  */.  assert( pIn
25770 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
25780 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e   );.  if( pIn1->
25790 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20 70 63  u.i>0 ){.     pc
257a0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
257b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
257c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67  /* Opcode: IfNeg
257d0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
257e0 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
257f0 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
25800 73 20 6c 65 73 73 20 74 68 61 6e 20 7a 65 72 6f  s less than zero
25810 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  , jump to P2. .*
25820 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
25830 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69  al to use this i
25840 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20  nstruction on a 
25850 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f  register that do
25860 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69  es.** not contai
25870 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41  n an integer.  A
25880 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c  n assertion faul
25890 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66  t will result if
258a0 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73   you try..*/.cas
258b0 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20  e OP_IfNeg: {   
258c0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
258d0 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  1 */.  assert( p
258e0 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
258f0 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  nt );.  if( pIn1
25900 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20 20 20 20  ->u.i<0 ){.     
25910 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
25920 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
25930 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 5a  ../* Opcode: IfZ
25940 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
25950 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  **.** If the val
25960 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
25970 31 20 69 73 20 65 78 61 63 74 6c 79 20 30 2c 20  1 is exactly 0, 
25980 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a  jump to P2. .**.
25990 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
259a0 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73   to use this ins
259b0 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65  truction on a re
259c0 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73  gister that does
259d0 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  .** not contain 
259e0 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20  an integer.  An 
259f0 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20  assertion fault 
25a00 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79  will result if y
25a10 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20  ou try..*/.case 
25a20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20  OP_IfZero: {    
25a30 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
25a40 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 49   */.  assert( pI
25a50 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
25a60 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  t );.  if( pIn1-
25a70 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20  >u.i==0 ){.     
25a80 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
25a90 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
25aa0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  ../* Opcode: Agg
25ab0 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34 20  Step * P2 P3 P4 
25ac0 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  P5.**.** Execute
25ad0 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
25ae0 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67  on for an aggreg
25af0 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e  ate.  The.** fun
25b00 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67  ction has P5 arg
25b10 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20  uments.   P4 is 
25b20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
25b30 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75   FuncDef.** stru
25b40 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69  cture that speci
25b50 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f  fies the functio
25b60 6e 2e 20 20 55 73 65 20 72 65 67 69 73 74 65 72  n.  Use register
25b70 0a 2a 2a 20 50 33 20 61 73 20 74 68 65 20 61 63  .** P3 as the ac
25b80 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a  cumulator..**.**
25b90 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74   The P5 argument
25ba0 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d  s are taken from
25bb0 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
25bc0 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f   its.** successo
25bd0 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  rs..*/.case OP_A
25be0 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20  ggStep: {.  int 
25bf0 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 69  n = pOp->p5;.  i
25c00 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65  nt i;.  Mem *pMe
25c10 6d 2c 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69  m, *pRec;.  sqli
25c20 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b  te3_context ctx;
25c30 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
25c40 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 61 73 73   **apVal;..  ass
25c50 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70  ert( n>=0 );.  p
25c60 52 65 63 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Rec = &p->aMem[p
25c70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c  Op->p2];.  apVal
25c80 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61   = p->apArg;.  a
25c90 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20  ssert( apVal || 
25ca0 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d  n==0 );.  for(i=
25cb0 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65  0; i<n; i++, pRe
25cc0 63 2b 2b 29 7b 0a 20 20 20 20 61 70 56 61 6c 5b  c++){.    apVal[
25cd0 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20 20 73  i] = pRec;.    s
25ce0 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 70 52 65  toreTypeInfo(pRe
25cf0 63 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  c, encoding);.  
25d00 7d 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20  }.  ctx.pFunc = 
25d10 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20  pOp->p4.pFunc;. 
25d20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
25d30 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
25d40 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 63 74 78 2e  ->nMem );.  ctx.
25d50 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26 70  pMem = pMem = &p
25d60 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
25d70 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20  .  pMem->n++;.  
25d80 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45  ctx.s.flags = ME
25d90 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e  M_Null;.  ctx.s.
25da0 7a 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a  z = 0;.  ctx.s.z
25db0 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74  Malloc = 0;.  ct
25dc0 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20  x.s.xDel = 0;.  
25dd0 63 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20  ctx.s.db = db;. 
25de0 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30   ctx.isError = 0
25df0 3b 0a 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20  ;.  ctx.pColl = 
25e00 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75  0;.  if( ctx.pFu
25e10 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  nc->flags & SQLI
25e20 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
25e30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
25e40 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20  pOp>p->aOp );.  
25e50 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
25e60 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ].p4type==P4_COL
25e70 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65  LSEQ );.    asse
25e80 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
25e90 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29  de==OP_CollSeq )
25ea0 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20  ;.    ctx.pColl 
25eb0 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f  = pOp[-1].p4.pCo
25ec0 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63 74 78 2e 70  ll;.  }.  (ctx.p
25ed0 46 75 6e 63 2d 3e 78 53 74 65 70 29 28 26 63 74  Func->xStep)(&ct
25ee0 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 0a 20 20  x, n, apVal);.  
25ef0 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20  if( ctx.isError 
25f00 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
25f10 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
25f20 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
25f30 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
25f40 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20  t(&ctx.s));.    
25f50 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72  rc = ctx.isError
25f60 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
25f70 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63  dbeMemRelease(&c
25f80 74 78 2e 73 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  tx.s);.  break;.
25f90 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  }../* Opcode: Ag
25fa0 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50  gFinal P1 P2 * P
25fb0 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  4 *.**.** Execut
25fc0 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20  e the finalizer 
25fd0 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
25fe0 61 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69  aggregate.  P1 i
25ff0 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20  s.** the memory 
26000 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73  location that is
26010 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72   the accumulator
26020 20 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61   for the aggrega
26030 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  te..**.** P2 is 
26040 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
26050 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65  guments that the
26060 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74   step function t
26070 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69  akes and.** P4 i
26080 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
26090 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74  he FuncDef for t
260a0 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  his function.  T
260b0 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e  he P2.** argumen
260c0 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79  t is not used by
260d0 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49   this opcode.  I
260e0 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20  t is only there 
260f0 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a  to disambiguate.
26100 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61  ** functions tha
26110 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69  t can take varyi
26120 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72  ng numbers of ar
26130 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a  guments.  The.**
26140 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
26150 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20  only needed for 
26160 74 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63  the degenerate c
26170 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65  ase where.** the
26180 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77   step function w
26190 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  as not previousl
261a0 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73  y called..*/.cas
261b0 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b  e OP_AggFinal: {
261c0 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
261d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
261e0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  0 && pOp->p1<=p-
261f0 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20  >nMem );.  pMem 
26200 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
26210 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p1];.  assert( (
26220 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28  pMem->flags & ~(
26230 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67  MEM_Null|MEM_Agg
26240 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ))==0 );.  rc = 
26250 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69  sqlite3VdbeMemFi
26260 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70  nalize(pMem, pOp
26270 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69  ->p4.pFunc);.  i
26280 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52  f( rc==SQLITE_ER
26290 52 4f 52 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ROR ){.    sqlit
262a0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
262b0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
262c0 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
262d0 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20  _text(pMem));.  
262e0 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  }.  sqlite3VdbeC
262f0 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d  hangeEncoding(pM
26300 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  em, encoding);. 
26310 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
26320 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66  SIZE(pMem);.  if
26330 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
26340 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a  TooBig(pMem) ){.
26350 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
26360 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
26370 0a 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ...#if !defined(
26380 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55  SQLITE_OMIT_VACU
26390 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  UM) && !defined(
263a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41  SQLITE_OMIT_ATTA
263b0 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  CH)./* Opcode: V
263c0 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a  acuum * * * * *.
263d0 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65  **.** Vacuum the
263e0 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
263f0 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
26400 69 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20  ill cause other 
26410 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69  virtual.** machi
26420 6e 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65  nes to be create
26430 64 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d  d and run.  It m
26440 61 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64  ay not be called
26450 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20   from within.** 
26460 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a  a transaction..*
26470 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d  /.case OP_Vacuum
26480 3a 20 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  : {.  if( sqlite
26490 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29  3SafetyOff(db) )
264a0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
264b0 74 6f 5f 6d 69 73 75 73 65 3b 20 0a 20 20 72 63  to_misuse; .  rc
264c0 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63   = sqlite3RunVac
264d0 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  uum(&p->zErrMsg,
264e0 20 64 62 29 3b 0a 20 20 69 66 28 20 73 71 6c 69   db);.  if( sqli
264f0 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
26500 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
26510 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 62 72  _to_misuse;.  br
26520 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
26530 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
26540 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
26550 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  UM)./* Opcode: I
26560 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20  ncrVacuum P1 P2 
26570 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66  * * *.**.** Perf
26580 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65  orm a single ste
26590 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65  p of the increme
265a0 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63  ntal vacuum proc
265b0 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20  edure on.** the 
265c0 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20  P1 database. If 
265d0 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66  the vacuum has f
265e0 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f  inished, jump to
265f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
26600 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
26610 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
26620 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
26630 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
26640 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20  IncrVacuum: {   
26650 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
26660 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
26670 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
26680 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
26690 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
266a0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
266b0 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29  k & (1<<pOp->p1)
266c0 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20  )!=0 );.  pBt = 
266d0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
266e0 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c  .pBt;.  rc = sql
266f0 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63  ite3BtreeIncrVac
26700 75 75 6d 28 70 42 74 29 3b 0a 20 20 69 66 28 20  uum(pBt);.  if( 
26710 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc==SQLITE_DONE 
26720 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
26730 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63 20  >p2 - 1;.    rc 
26740 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d  = SQLITE_OK;.  }
26750 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
26760 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  if../* Opcode: E
26770 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a  xpire P1 * * * *
26780 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65  .**.** Cause pre
26790 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65  compiled stateme
267a0 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65 20 65 78  nts to become ex
267b0 70 69 72 65 64 2e 20 41 6e 20 65 78 70 69 72 65  pired. An expire
267c0 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66  d statement.** f
267d0 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72  ails with an err
267e0 6f 72 20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54  or code of SQLIT
267f0 45 5f 53 43 48 45 4d 41 20 69 66 20 69 74 20 69  E_SCHEMA if it i
26800 73 20 65 76 65 72 20 65 78 65 63 75 74 65 64 20  s ever executed 
26810 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69 74 65 33  .** (via sqlite3
26820 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a 2a  _step())..** .**
26830 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65   If P1 is 0, the
26840 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d  n all SQL statem
26850 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69  ents become expi
26860 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f  red. If P1 is no
26870 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20  n-zero,.** then 
26880 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74  only the current
26890 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61  ly executing sta
268a0 74 65 6d 65 6e 74 20 69 73 20 61 66 66 65 63 74  tement is affect
268b0 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ed. .*/.case OP_
268c0 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20  Expire: {.  if( 
268d0 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20  !pOp->p1 ){.    
268e0 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
268f0 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
26900 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  db);.  }else{.  
26910 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
26920 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
26930 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
26940 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
26950 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61  HE./* Opcode: Ta
26960 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33  bleLock P1 P2 P3
26970 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74 61   P4 *.**.** Obta
26980 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70  in a lock on a p
26990 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e  articular table.
269a0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
269b0 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77  n is only used w
269c0 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65  hen.** the share
269d0 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65 20  d-cache feature 
269e0 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a  is enabled. .**.
269f0 2a 2a 20 49 66 20 50 31 20 69 73 20 20 74 68 65  ** If P1 is  the
26a00 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
26a10 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65  tabase in sqlite
26a20 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64  3.aDb[] of the d
26a30 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68  atabase.** on wh
26a40 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20  ich the lock is 
26a50 61 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61  acquired.  A rea
26a60 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65  dlock is obtaine
26a70 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a  d if P3==0 or.**
26a80 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66   a write lock if
26a90 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32   P3==1..**.** P2
26aa0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f   contains the ro
26ab0 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74  ot-page of the t
26ac0 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a  able to lock..**
26ad0 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20  .** P4 contains 
26ae0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
26af0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
26b00 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e  le being locked.
26b10 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a   This is only.**
26b20 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
26b30 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  e an error messa
26b40 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63  ge if the lock c
26b50 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65  annot be obtaine
26b60 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61  d..*/.case OP_Ta
26b70 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 69 6e 74  bleLock: {.  int
26b80 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a   p1 = pOp->p1; .
26b90 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b    u8 isWriteLock
26ba0 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a   = (u8)pOp->p3;.
26bb0 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20    assert( p1>=0 
26bc0 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  && p1<db->nDb );
26bd0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
26be0 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
26bf0 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  1))!=0 );.  asse
26c00 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d  rt( isWriteLock=
26c10 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63  =0 || isWriteLoc
26c20 6b 3d 3d 31 20 29 3b 0a 20 20 72 63 20 3d 20 73  k==1 );.  rc = s
26c30 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54  qlite3BtreeLockT
26c40 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d  able(db->aDb[p1]
26c50 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69  .pBt, pOp->p2, i
26c60 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 69  sWriteLock);.  i
26c70 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51  f( (rc&0xFF)==SQ
26c80 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20  LITE_LOCKED ){. 
26c90 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
26ca0 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
26cb0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
26cc0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
26cd0 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 74 61  db, "database ta
26ce0 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25  ble is locked: %
26cf0 73 22 2c 20 7a 29 3b 0a 20 20 7d 0a 20 20 62 72  s", z);.  }.  br
26d00 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
26d10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
26d20 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69  RED_CACHE */..#i
26d30 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26d40 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
26d50 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e  * Opcode: VBegin
26d60 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
26d70 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f  * P4 may be a po
26d80 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69  inter to an sqli
26d90 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
26da0 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20  re. If so, call 
26db0 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d  the .** xBegin m
26dc0 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74  ethod for that t
26dd0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f  able..**.** Also
26de0 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  , whether or not
26df0 20 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63   P4 is set, chec
26e00 6b 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e  k that this is n
26e10 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20  ot being called 
26e20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61  from.** within a
26e30 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76   callback to a v
26e40 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79  irtual table xSy
26e50 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20  nc() method. If 
26e60 69 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72  it is, the error
26e70 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65  .** code will be
26e80 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c   set to SQLITE_L
26e90 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f  OCKED..*/.case O
26ea0 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 73 71  P_VBegin: {.  sq
26eb0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
26ec0 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
26ed0 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  b;.  rc = sqlite
26ee0 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70  3VtabBegin(db, p
26ef0 56 74 61 62 29 3b 0a 20 20 69 66 28 20 70 56 74  Vtab);.  if( pVt
26f00 61 62 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ab ){.    sqlite
26f10 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
26f20 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
26f30 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d  zErrMsg = pVtab-
26f40 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56  >zErrMsg;.    pV
26f50 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  tab->zErrMsg = 0
26f60 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
26f70 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
26f80 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
26f90 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
26fa0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
26fb0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
26fc0 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a  de: VCreate P1 *
26fd0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
26fe0 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
26ff0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
27000 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
27010 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65  Call the xCreate
27020 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74   method.** for t
27030 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
27040 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b  se OP_VCreate: {
27050 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
27060 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62  tabCallCreate(db
27070 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
27080 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73  p4.z, &p->zErrMs
27090 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
270a0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
270b0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
270c0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
270d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
270e0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
270f0 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20  : VDestroy P1 * 
27100 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
27110 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
27120 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
27130 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
27140 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f  Call the xDestro
27150 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74  y method.** of t
27160 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
27170 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20  se OP_VDestroy: 
27180 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  {.  p->inVtabMet
27190 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20  hod = 2;.  rc = 
271a0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
271b0 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e  estroy(db, pOp->
271c0 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
271d0 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
271e0 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  d = 0;.  break;.
271f0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
27200 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
27210 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
27220 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
27230 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
27240 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20  ode: VOpen P1 * 
27250 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
27260 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
27270 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
27280 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
27290 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
272a0 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  e..** P1 is a cu
272b0 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68  rsor number.  Th
272c0 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20  is opcode opens 
272d0 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  a cursor to the 
272e0 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
272f0 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74   and stores that
27300 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a   cursor in P1..*
27310 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a  /.case OP_VOpen:
27320 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
27330 2a 70 43 75 72 20 3d 20 30 3b 0a 20 20 73 71 6c  *pCur = 0;.  sql
27340 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
27350 20 2a 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20   *pVtabCursor = 
27360 30 3b 0a 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  0;..  sqlite3_vt
27370 61 62 20 2a 70 56 74 61 62 20 3d 20 70 4f 70 2d  ab *pVtab = pOp-
27380 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 73 71 6c  >p4.pVtab;.  sql
27390 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
273a0 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f  dule = (sqlite3_
273b0 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e  module *)pVtab->
273c0 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65  pModule;..  asse
273d0 72 74 28 70 56 74 61 62 20 26 26 20 70 4d 6f 64  rt(pVtab && pMod
273e0 75 6c 65 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  ule);.  if( sqli
273f0 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29  te3SafetyOff(db)
27400 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
27410 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 72  e_to_misuse;.  r
27420 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70  c = pModule->xOp
27430 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74 61 62  en(pVtab, &pVtab
27440 43 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c 69 74  Cursor);.  sqlit
27450 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
27460 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a  zErrMsg);.  p->z
27470 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e  ErrMsg = pVtab->
27480 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62  zErrMsg;.  pVtab
27490 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20  ->zErrMsg = 0;. 
274a0 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
274b0 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20  tyOn(db) ) goto 
274c0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
274d0 75 73 65 3b 0a 20 20 69 66 28 20 53 51 4c 49 54  use;.  if( SQLIT
274e0 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20  E_OK==rc ){.    
274f0 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73 71  /* Initialize sq
27500 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
27510 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a  r base class */.
27520 20 20 20 20 70 56 74 61 62 43 75 72 73 6f 72 2d      pVtabCursor-
27530 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b 0a  >pVtab = pVtab;.
27540 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69  .    /* Initiali
27550 73 65 20 76 64 62 65 20 63 75 72 73 6f 72 20 6f  se vdbe cursor o
27560 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70 43 75  bject */.    pCu
27570 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  r = allocateCurs
27580 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  or(p, pOp->p1, 0
27590 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20 69 66  , -1, 0);.    if
275a0 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20 20 20  ( pCur ){.      
275b0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
275c0 72 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 3b  r = pVtabCursor;
275d0 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 4d 6f  .      pCur->pMo
275e0 64 75 6c 65 20 3d 20 70 56 74 61 62 43 75 72 73  dule = pVtabCurs
275f0 6f 72 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f 64 75  or->pVtab->pModu
27600 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  le;.    }else{. 
27610 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46       db->mallocF
27620 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20  ailed = 1;.     
27630 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65   pModule->xClose
27640 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  (pVtabCursor);. 
27650 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
27660 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
27670 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
27680 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
27690 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
276a0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
276b0 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20 50  pcode: VFilter P
276c0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
276d0 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f  ** P1 is a curso
276e0 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56  r opened using V
276f0 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20  Open.  P2 is an 
27700 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20  address to jump 
27710 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c  to if.** the fil
27720 74 65 72 65 64 20 72 65 73 75 6c 74 20 73 65 74  tered result set
27730 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a   is empty..**.**
27740 20 50 34 20 69 73 20 65 69 74 68 65 72 20 4e 55   P4 is either NU
27750 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74  LL or a string t
27760 68 61 74 20 77 61 73 20 67 65 6e 65 72 61 74 65  hat was generate
27770 64 20 62 79 20 74 68 65 20 78 42 65 73 74 49 6e  d by the xBestIn
27780 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66  dex.** method of
27790 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68   the module.  Th
277a0 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  e interpretation
277b0 20 6f 66 20 74 68 65 20 50 34 20 73 74 72 69 6e   of the P4 strin
277c0 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20  g is left.** to 
277d0 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65  the module imple
277e0 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  mentation..**.**
277f0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
27800 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65 72  okes the xFilter
27810 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76   method on the v
27820 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65  irtual table spe
27830 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e  cified.** by P1.
27840 20 20 54 68 65 20 69 6e 74 65 67 65 72 20 71 75    The integer qu
27850 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74  ery plan paramet
27860 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73  er to xFilter is
27870 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
27880 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73  ter.** P3. Regis
27890 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20  ter P3+1 stores 
278a0 74 68 65 20 61 72 67 63 20 70 61 72 61 6d 65 74  the argc paramet
278b0 65 72 20 74 6f 20 62 65 20 70 61 73 73 65 64 20  er to be passed 
278c0 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65  to the.** xFilte
278d0 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74  r method. Regist
278e0 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61  ers P3+2..P3+1+a
278f0 72 67 63 20 61 72 65 20 74 68 65 20 61 72 67 63  rgc are the argc
27900 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70  .** additional p
27910 61 72 61 6d 65 74 65 72 73 20 77 68 69 63 68 20  arameters which 
27920 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a  are passed to.**
27930 20 78 46 69 6c 74 65 72 20 61 73 20 61 72 67 76   xFilter as argv
27940 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 32 20  . Register P3+2 
27950 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20  becomes argv[0] 
27960 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78  when passed to x
27970 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20  Filter..**.** A 
27980 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20  jump is made to 
27990 50 32 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  P2 if the result
279a0 20 73 65 74 20 61 66 74 65 72 20 66 69 6c 74 65   set after filte
279b0 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d  ring would be em
279c0 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  pty..*/.case OP_
279d0 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20  VFilter: {   /* 
279e0 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  jump */.  int nA
279f0 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79  rg;.  int iQuery
27a00 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
27a10 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
27a20 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79  e;.  Mem *pQuery
27a30 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
27a40 3e 70 33 5d 3b 0a 20 20 4d 65 6d 20 2a 70 41 72  >p3];.  Mem *pAr
27a50 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b  gc = &pQuery[1];
27a60 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  .  sqlite3_vtab_
27a70 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72  cursor *pVtabCur
27a80 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  sor;.  sqlite3_v
27a90 74 61 62 20 2a 70 56 74 61 62 3b 0a 0a 20 20 56  tab *pVtab;..  V
27aa0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20  dbeCursor *pCur 
27ab0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
27ac0 70 31 5d 3b 0a 0a 20 20 52 45 47 49 53 54 45 52  p1];..  REGISTER
27ad0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
27ae0 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72  pQuery);.  asser
27af0 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
27b00 72 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43  rsor );.  pVtabC
27b10 75 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56  ursor = pCur->pV
27b20 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74  tabCursor;.  pVt
27b30 61 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72  ab = pVtabCursor
27b40 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
27b50 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
27b60 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20  ule;..  /* Grab 
27b70 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72  the index number
27b80 20 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65   and argc parame
27b90 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  ters */.  assert
27ba0 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73  ( (pQuery->flags
27bb0 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20  &MEM_Int)!=0 && 
27bc0 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45  pArgc->flags==ME
27bd0 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20  M_Int );.  nArg 
27be0 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e  = (int)pArgc->u.
27bf0 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69  i;.  iQuery = (i
27c00 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a  nt)pQuery->u.i;.
27c10 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
27c20 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
27c30 2a 2f 0a 20 20 7b 0a 20 20 20 20 69 6e 74 20 72  */.  {.    int r
27c40 65 73 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20  es = 0;.    int 
27c50 69 3b 0a 20 20 20 20 4d 65 6d 20 2a 2a 61 70 41  i;.    Mem **apA
27c60 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
27c70 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c     for(i = 0; i<
27c80 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
27c90 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41    apArg[i] = &pA
27ca0 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 20 20  rgc[i+1];.      
27cb0 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 61 70  storeTypeInfo(ap
27cc0 41 72 67 5b 69 5d 2c 20 30 29 3b 0a 20 20 20 20  Arg[i], 0);.    
27cd0 7d 0a 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  }..    if( sqlit
27ce0 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
27cf0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
27d00 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20  _to_misuse;.    
27d10 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
27d20 70 56 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 69  pVtab);.    p->i
27d30 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b  nVtabMethod = 1;
27d40 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  .    rc = pModul
27d50 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 74 61 62  e->xFilter(pVtab
27d60 43 75 72 73 6f 72 2c 20 69 51 75 65 72 79 2c 20  Cursor, iQuery, 
27d70 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c  pOp->p4.z, nArg,
27d80 20 61 70 41 72 67 29 3b 0a 20 20 20 20 70 2d 3e   apArg);.    p->
27d90 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30  inVtabMethod = 0
27da0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  ;.    sqlite3DbF
27db0 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
27dc0 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
27dd0 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72  Msg = pVtab->zEr
27de0 72 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d  rMsg;.    pVtab-
27df0 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  >zErrMsg = 0;.  
27e00 20 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c    sqlite3VtabUnl
27e10 6f 63 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a  ock(db, pVtab);.
27e20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
27e30 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
27e40 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
27e50 6f 66 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  of(pVtabCursor);
27e60 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73  .    }.    if( s
27e70 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
27e80 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
27e90 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a  due_to_misuse;..
27ea0 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
27eb0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
27ec0 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  2 - 1;.    }.  }
27ed0 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
27ee0 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a   = 0;..  break;.
27ef0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
27f00 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
27f10 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
27f20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
27f30 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
27f40 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20  ode: VColumn P1 
27f50 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
27f60 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20  Store the value 
27f70 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  of the P2-th col
27f80 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f  umn of.** the ro
27f90 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c  w of the virtual
27fa0 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20  -table that the 
27fb0 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73  .** P1 cursor is
27fc0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74   pointing to int
27fd0 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
27fe0 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d  /.case OP_VColum
27ff0 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  n: {.  sqlite3_v
28000 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
28010 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
28020 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d  le *pModule;.  M
28030 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c  em *pDest;.  sql
28040 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f  ite3_context sCo
28050 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75  ntext;..  VdbeCu
28060 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e  rsor *pCur = p->
28070 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
28080 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
28090 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
280a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
280b0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
280c0 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73  ->nMem );.  pDes
280d0 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
280e0 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 70 43 75  ->p3];.  if( pCu
280f0 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
28100 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
28110 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
28120 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
28130 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70   pVtab = pCur->p
28140 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
28150 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
28160 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
28170 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
28180 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d  ->xColumn );.  m
28190 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c  emset(&sContext,
281a0 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74   0, sizeof(sCont
281b0 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65  ext));..  /* The
281c0 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79   output cell may
281d0 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20   already have a 
281e0 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64  buffer allocated
281f0 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20  . Move.  ** the 
28200 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73  current contents
28210 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20 73   to sContext.s s
28220 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73  o in case the us
28230 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a  er-function .  *
28240 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20 61 6c  * can use the al
28250 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20  ready allocated 
28260 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f  buffer instead o
28270 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a  f allocating a .
28280 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20    ** new one..  
28290 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
282a0 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78  MemMove(&sContex
282b0 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d  t.s, pDest);.  M
282c0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 73  emSetTypeFlag(&s
282d0 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e  Context.s, MEM_N
282e0 75 6c 6c 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c  ull);..  if( sql
282f0 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
28300 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
28310 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
28320 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  rc = pModule->xC
28330 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61  olumn(pCur->pVta
28340 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65  bCursor, &sConte
28350 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  xt, pOp->p2);.  
28360 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
28370 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
28380 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56   p->zErrMsg = pV
28390 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20  tab->zErrMsg;.  
283a0 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d  pVtab->zErrMsg =
283b0 20 30 3b 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74   0;..  /* Copy t
283c0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
283d0 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65   function to the
283e0 20 50 33 20 72 65 67 69 73 74 65 72 2e 20 57 65   P3 register. We
283f0 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73 20 72 65  .  ** do this re
28400 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
28410 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 72  her or not an er
28420 72 6f 72 20 6f 63 63 75 72 72 65 64 20 74 6f 20  ror occurred to 
28430 65 6e 73 75 72 65 20 61 6e 79 0a 20 20 2a 2a 20  ensure any.  ** 
28440 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61 74 69  dynamic allocati
28450 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78 74 2e 73  on in sContext.s
28460 20 28 61 20 4d 65 6d 20 73 74 72 75 63 74 29 20   (a Mem struct) 
28470 69 73 20 20 72 65 6c 65 61 73 65 64 2e 0a 20 20  is  released..  
28480 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
28490 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26  ChangeEncoding(&
284a0 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65 6e 63 6f  sContext.s, enco
284b0 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54 45  ding);.  REGISTE
284c0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
284d0 20 70 44 65 73 74 29 3b 0a 20 20 73 71 6c 69 74   pDest);.  sqlit
284e0 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 44  e3VdbeMemMove(pD
284f0 65 73 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e 73  est, &sContext.s
28500 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
28510 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b  BLOBSIZE(pDest);
28520 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  ..  if( sqlite3S
28530 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20  afetyOn(db) ){. 
28540 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
28550 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 7d  e_to_misuse;.  }
28560 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
28570 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73  beMemTooBig(pDes
28580 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  t) ){.    goto t
28590 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72  oo_big;.  }.  br
285a0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
285b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
285c0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
285d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
285e0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
285f0 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20  * Opcode: VNext 
28600 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
28610 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74 75 61  * Advance virtua
28620 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68  l table P1 to th
28630 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74  e next row in it
28640 73 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64  s result set and
28650 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  .** jump to inst
28660 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c  ruction P2.  Or,
28670 20 69 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   if the virtual 
28680 74 61 62 6c 65 20 68 61 73 20 72 65 61 63 68 65  table has reache
28690 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  d.** the end of 
286a0 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20  its result set, 
286b0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
286c0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
286d0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
286e0 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20  se OP_VNext: {  
286f0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71   /* jump */.  sq
28700 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
28710 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
28720 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
28730 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 20 3d 20  le;.  int res = 
28740 30 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72  0;..  VdbeCursor
28750 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73   *pCur = p->apCs
28760 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
28770 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61  sert( pCur->pVta
28780 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  bCursor );.  if(
28790 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29   pCur->nullRow )
287a0 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  {.    break;.  }
287b0 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d  .  pVtab = pCur-
287c0 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56  >pVtabCursor->pV
287d0 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
287e0 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
287f0 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75  .  assert( pModu
28800 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20  le->xNext );..  
28810 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e  /* Invoke the xN
28820 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20  ext() method of 
28830 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72  the module. Ther
28840 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20  e is no way for 
28850 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79  the.  ** underly
28860 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ing implementati
28870 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20  on to return an 
28880 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63  error if one occ
28890 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20  urs during.  ** 
288a0 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64  xNext(). Instead
288b0 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  , if an error oc
288c0 63 75 72 73 2c 20 74 72 75 65 20 69 73 20 72 65  curs, true is re
288d0 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69  turned (indicati
288e0 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61  ng that .  ** da
288f0 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29  ta is available)
28900 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63   and the error c
28910 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77 68 65  ode returned whe
28920 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a  n xColumn or.  *
28930 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74  * some other met
28940 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f  hod is next invo
28950 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20  ked on the save 
28960 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75  virtual table cu
28970 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  rsor..  */.  if(
28980 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
28990 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
289a0 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
289b0 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 4c  ;.  sqlite3VtabL
289c0 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 70 2d  ock(pVtab);.  p-
289d0 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
289e0 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  1;.  rc = pModul
289f0 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 70  e->xNext(pCur->p
28a00 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 70  VtabCursor);.  p
28a10 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
28a20 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46   0;.  sqlite3DbF
28a30 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
28a40 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73  sg);.  p->zErrMs
28a50 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  g = pVtab->zErrM
28a60 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72  sg;.  pVtab->zEr
28a70 72 4d 73 67 20 3d 20 30 3b 0a 20 20 73 71 6c 69  rMsg = 0;.  sqli
28a80 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62  te3VtabUnlock(db
28a90 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
28aa0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
28ab0 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75  .    res = pModu
28ac0 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70  le->xEof(pCur->p
28ad0 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d  VtabCursor);.  }
28ae0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
28af0 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
28b00 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
28b10 69 73 75 73 65 3b 0a 0a 20 20 69 66 28 20 21 72  isuse;..  if( !r
28b20 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  es ){.    /* If 
28b30 74 68 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a  there is data, j
28b40 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20  ump to P2 */.   
28b50 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
28b60 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
28b70 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
28b80 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
28b90 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
28ba0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
28bb0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
28bc0 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20  ode: VRename P1 
28bd0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
28be0 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
28bf0 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
28c00 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
28c10 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
28c20 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ure..** This opc
28c30 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
28c40 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52  corresponding xR
28c50 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68  ename method. Th
28c60 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65  e value.** in re
28c70 67 69 73 74 65 72 20 50 31 20 69 73 20 70 61 73  gister P1 is pas
28c80 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65  sed as the zName
28c90 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
28ca0 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e   xRename method.
28cb0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e  .*/.case OP_VRen
28cc0 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ame: {.  sqlite3
28cd0 5f 76 74 61 62 20 2a 70 56 74 61 62 20 3d 20 70  _vtab *pVtab = p
28ce0 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20  Op->p4.pVtab;.  
28cf0 4d 65 6d 20 2a 70 4e 61 6d 65 20 3d 20 26 70 2d  Mem *pName = &p-
28d00 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
28d10 20 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d    assert( pVtab-
28d20 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d  >pModule->xRenam
28d30 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  e );.  REGISTER_
28d40 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
28d50 4e 61 6d 65 29 3b 0a 0a 20 20 53 74 72 69 6e 67  Name);..  String
28d60 69 66 79 28 70 4e 61 6d 65 2c 20 65 6e 63 6f 64  ify(pName, encod
28d70 69 6e 67 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c  ing);..  if( sql
28d80 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
28d90 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
28da0 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
28db0 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
28dc0 70 56 74 61 62 29 3b 0a 20 20 72 63 20 3d 20 70  pVtab);.  rc = p
28dd0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78  Vtab->pModule->x
28de0 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e  Rename(pVtab, pN
28df0 61 6d 65 2d 3e 7a 29 3b 0a 20 20 73 71 6c 69 74  ame->z);.  sqlit
28e00 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
28e10 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a  zErrMsg);.  p->z
28e20 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e  ErrMsg = pVtab->
28e30 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62  zErrMsg;.  pVtab
28e40 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20  ->zErrMsg = 0;. 
28e50 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
28e60 63 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20  ck(db, pVtab);. 
28e70 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
28e80 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20  tyOn(db) ) goto 
28e90 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
28ea0 75 73 65 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  use;..  break;.}
28eb0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
28ec0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
28ed0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
28ee0 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50 31 20  ode: VUpdate P1 
28ef0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
28f00 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
28f10 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
28f20 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73  ble object, an s
28f30 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
28f40 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f  cture..** This o
28f50 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
28f60 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
28f70 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e 20  xUpdate method. 
28f80 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  P2 values.** are
28f90 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f   contiguous memo
28fa0 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69 6e  ry cells startin
28fb0 67 20 61 74 20 50 33 20 74 6f 20 70 61 73 73 20  g at P3 to pass 
28fc0 74 6f 20 74 68 65 20 78 55 70 64 61 74 65 20 0a  to the xUpdate .
28fd0 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54  ** invocation. T
28fe0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
28ff0 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29 20 63  ster (P3+P2-1) c
29000 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
29010 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65  e .** p2th eleme
29020 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76 20 61  nt of the argv a
29030 72 72 61 79 20 70 61 73 73 65 64 20 74 6f 20 78  rray passed to x
29040 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  Update..**.** Th
29050 65 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64  e xUpdate method
29060 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54   will do a DELET
29070 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54 20 6f  E or an INSERT o
29080 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61  r both..** The a
29090 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28  rgv[0] element (
290a0 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e 64  which correspond
290b0 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  s to memory cell
290c0 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20 72   P3).** is the r
290d0 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20 74 6f  owid of a row to
290e0 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61 72 67   delete.  If arg
290f0 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65  v[0] is NULL the
29100 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f  n no .** deletio
29110 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65 20 61  n occurs.  The a
29120 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69  rgv[1] element i
29130 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  s the rowid of t
29140 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20  he new .** row. 
29150 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e 55 4c   This can be NUL
29160 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 69  L to have the vi
29170 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65 6c 65  rtual table sele
29180 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72  ct the new .** r
29190 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c 66 2e  owid for itself.
291a0 20 20 54 68 65 20 73 75 62 73 65 71 75 65 6e 74    The subsequent
291b0 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65   elements in the
291c0 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a 20 74   array are .** t
291d0 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c  he values of col
291e0 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65 77 20  umns in the new 
291f0 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  row..**.** If P2
29200 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65  ==1 then no inse
29210 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e  rt is performed.
29220 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74 68 65    argv[0] is the
29230 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72   rowid of.** a r
29240 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a  ow to delete..**
29250 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f 6f 6c  .** P1 is a bool
29260 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69 74 20  ean flag. If it 
29270 69 73 20 73 65 74 20 74 6f 20 74 72 75 65 20 61  is set to true a
29280 6e 64 20 74 68 65 20 78 55 70 64 61 74 65 20 63  nd the xUpdate c
29290 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65 73  all.** is succes
292a0 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65 20 76  sful, then the v
292b0 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
292c0 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e   sqlite3_last_in
292d0 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a  sert_rowid() .**
292e0 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76   is set to the v
292f0 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 77 69  alue of the rowi
29300 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20 6a 75  d for the row ju
29310 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2f 0a  st inserted..*/.
29320 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a  case OP_VUpdate:
29330 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
29340 62 20 2a 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  b *pVtab = pOp->
29350 70 34 2e 70 56 74 61 62 3b 0a 20 20 73 71 6c 69  p4.pVtab;.  sqli
29360 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
29370 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d  ule = (sqlite3_m
29380 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70  odule *)pVtab->p
29390 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41  Module;.  int nA
293a0 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  rg = pOp->p2;.  
293b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
293c0 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a  ype==P4_VTAB );.
293d0 20 20 69 66 28 20 70 4d 6f 64 75 6c 65 2d 3e 78    if( pModule->x
293e0 55 70 64 61 74 65 3d 3d 30 20 29 7b 0a 20 20 20  Update==0 ){.   
293f0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
29400 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
29410 62 2c 20 22 72 65 61 64 2d 6f 6e 6c 79 20 74 61  b, "read-only ta
29420 62 6c 65 22 29 3b 0a 20 20 20 20 72 63 20 3d 20  ble");.    rc = 
29430 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
29440 7d 65 6c 73 65 7b 0a 20 20 20 20 69 6e 74 20 69  }else{.    int i
29450 3b 0a 20 20 20 20 73 71 6c 69 74 65 5f 69 6e 74  ;.    sqlite_int
29460 36 34 20 72 6f 77 69 64 3b 0a 20 20 20 20 4d 65  64 rowid;.    Me
29470 6d 20 2a 2a 61 70 41 72 67 20 3d 20 70 2d 3e 61  m **apArg = p->a
29480 70 41 72 67 3b 0a 20 20 20 20 4d 65 6d 20 2a 70  pArg;.    Mem *p
29490 58 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  X = &p->aMem[pOp
294a0 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69  ->p3];.    for(i
294b0 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
294c0 7b 0a 20 20 20 20 20 20 73 74 6f 72 65 54 79 70  {.      storeTyp
294d0 65 49 6e 66 6f 28 70 58 2c 20 30 29 3b 0a 20 20  eInfo(pX, 0);.  
294e0 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70      apArg[i] = p
294f0 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20  X;.      pX++;. 
29500 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c     }.    if( sql
29510 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
29520 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
29530 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
29540 20 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63    sqlite3VtabLoc
29550 6b 28 70 56 74 61 62 29 3b 0a 20 20 20 20 72 63  k(pVtab);.    rc
29560 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64   = pModule->xUpd
29570 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c  ate(pVtab, nArg,
29580 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b   apArg, &rowid);
29590 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
295a0 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
295b0 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
295c0 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72  sg = pVtab->zErr
295d0 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e  Msg;.    pVtab->
295e0 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20  zErrMsg = 0;.   
295f0 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
29600 63 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20  ck(db, pVtab);. 
29610 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61     if( sqlite3Sa
29620 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
29630 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
29640 69 73 75 73 65 3b 0a 20 20 20 20 69 66 28 20 70  isuse;.    if( p
29650 4f 70 2d 3e 70 31 20 26 26 20 72 63 3d 3d 53 51  Op->p1 && rc==SQ
29660 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
29670 20 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31 20   assert( nArg>1 
29680 26 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20 28  && apArg[0] && (
29690 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26  apArg[0]->flags&
296a0 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20  MEM_Null) );.   
296b0 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64     db->lastRowid
296c0 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a   = rowid;.    }.
296d0 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b      p->nChange++
296e0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
296f0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
29700 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
29710 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
29720 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
29730 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70  ER_PRAGMAS./* Op
29740 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20  code: Pagecount 
29750 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
29760 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
29770 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  ent number of pa
29780 67 65 73 20 69 6e 20 64 61 74 61 62 61 73 65 20  ges in database 
29790 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c  P1 to memory cel
297a0 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  l P2..*/.case OP
297b0 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20  _Pagecount: {   
297c0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
297d0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
297e0 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70   int p1 = pOp->p
297f0 31 3b 20 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b  1; .  int nPage;
29800 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72  .  Pager *pPager
29810 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
29820 61 67 65 72 28 64 62 2d 3e 61 44 62 5b 70 31 5d  ager(db->aDb[p1]
29830 2e 70 42 74 29 3b 0a 0a 20 20 72 63 20 3d 20 73  .pBt);..  rc = s
29840 71 6c 69 74 65 33 50 61 67 65 72 50 61 67 65 63  qlite3PagerPagec
29850 6f 75 6e 74 28 70 50 61 67 65 72 2c 20 26 6e 50  ount(pPager, &nP
29860 61 67 65 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  age);.  if( rc==
29870 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
29880 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
29890 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
298a0 2d 3e 75 2e 69 20 3d 20 6e 50 61 67 65 3b 0a 20  ->u.i = nPage;. 
298b0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
298c0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
298d0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a  LITE_OMIT_TRACE.
298e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 63 65  /* Opcode: Trace
298f0 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
29900 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69 73 20  * If tracing is 
29910 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68 65 20  enabled (by the 
29920 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29  sqlite3_trace())
29930 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e   interface, then
29940 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74  .** the UTF-8 st
29950 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69  ring contained i
29960 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65 64 20  n P4 is emitted 
29970 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63 61 6c  on the trace cal
29980 6c 62 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f  lback..*/.case O
29990 50 5f 54 72 61 63 65 3a 20 7b 0a 20 20 63 68 61  P_Trace: {.  cha
299a0 72 20 2a 7a 54 72 61 63 65 20 3d 20 28 70 4f 70  r *zTrace = (pOp
299b0 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34  ->p4.z ? pOp->p4
299c0 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20  .z : p->zSql);. 
299d0 20 69 66 28 20 7a 54 72 61 63 65 20 29 7b 0a 20   if( zTrace ){. 
299e0 20 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61 63     if( db->xTrac
299f0 65 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78  e ){.      db->x
29a00 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65  Trace(db->pTrace
29a10 41 72 67 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20  Arg, zTrace);.  
29a20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54    }.#ifdef SQLIT
29a30 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
29a40 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  (db->flags & SQL
29a50 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30  ITE_SqlTrace)!=0
29a60 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
29a70 33 44 65 62 75 67 50 72 69 6e 74 66 28 22 53 51  3DebugPrintf("SQ
29a80 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20  L-trace: %s\n", 
29a90 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 23  zTrace);.    }.#
29aa0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
29ab0 44 45 42 55 47 20 2a 2f 0a 20 20 7d 0a 20 20 62  DEBUG */.  }.  b
29ac0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
29ad0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70  ./* Opcode: Noop
29ae0 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
29af0 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68   Do nothing.  Th
29b00 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
29b10 73 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61  s often useful a
29b20 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74  s a jump.** dest
29b30 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a  ination..*/./*.*
29b40 2a 20 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c  * The magic Expl
29b50 61 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f  ain opcode are o
29b60 6e 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68 65  nly inserted whe
29b70 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68  n explain==2 (wh
29b80 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79  ich.** is to say
29b90 20 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49   when the EXPLAI
29ba0 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e  N QUERY PLAN syn
29bb0 74 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a  tax is used.).**
29bc0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63   This opcode rec
29bd0 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ords information
29be0 20 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69   from the optimi
29bf0 7a 65 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a  zer.  It is the.
29c00 2a 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 61  ** the same as a
29c10 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70   no-op.  This op
29c20 63 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65 61  codesnever appea
29c30 72 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20  rs in a real VM 
29c40 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61  program..*/.defa
29c50 75 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ult: {          
29c60 2f 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c  /* This is reall
29c70 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50  y OP_Noop and OP
29c80 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 62 72  _Explain */.  br
29c90 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a  eak;.}../*******
29ca0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29cb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29cc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29cd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29ce0 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61  ******.** The ca
29cf0 73 65 73 20 6f 66 20 74 68 65 20 73 77 69 74 63  ses of the switc
29d00 68 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76  h statement abov
29d10 65 20 74 68 69 73 20 6c 69 6e 65 20 73 68 6f 75  e this line shou
29d20 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74  ld all be indent
29d30 65 64 0a 2a 2a 20 62 79 20 36 20 73 70 61 63 65  ed.** by 6 space
29d40 73 2e 20 20 42 75 74 20 74 68 65 20 6c 65 66 74  s.  But the left
29d50 2d 6d 6f 73 74 20 36 20 73 70 61 63 65 73 20 68  -most 6 spaces h
29d60 61 76 65 20 62 65 65 6e 20 72 65 6d 6f 76 65 64  ave been removed
29d70 20 74 6f 20 69 6d 70 72 6f 76 65 20 74 68 65 0a   to improve the.
29d80 2a 2a 20 72 65 61 64 61 62 69 6c 69 74 79 2e 20  ** readability. 
29d90 20 46 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74   From this point
29da0 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f   on down, the no
29db0 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e  rmal indentation
29dc0 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65   rules are.** re
29dd0 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a  stored..********
29de0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29df0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29e00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29e10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29e20 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69  *****/.    }..#i
29e30 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
29e40 45 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75 36  E.    {.      u6
29e50 34 20 65 6c 61 70 73 65 64 20 3d 20 73 71 6c 69  4 elapsed = sqli
29e60 74 65 33 48 77 74 69 6d 65 28 29 20 2d 20 73 74  te3Hwtime() - st
29e70 61 72 74 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e  art;.      pOp->
29e80 63 79 63 6c 65 73 20 2b 3d 20 65 6c 61 70 73 65  cycles += elapse
29e90 64 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e  d;.      pOp->cn
29ea0 74 2b 2b 3b 0a 23 69 66 20 30 0a 20 20 20 20 20  t++;.#if 0.     
29eb0 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 6f 75     fprintf(stdou
29ec0 74 2c 20 22 25 31 30 6c 6c 75 20 22 2c 20 65 6c  t, "%10llu ", el
29ed0 61 70 73 65 64 29 3b 0a 20 20 20 20 20 20 20 20  apsed);.        
29ee0 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
29ef0 4f 70 28 73 74 64 6f 75 74 2c 20 6f 72 69 67 50  Op(stdout, origP
29f00 63 2c 20 26 70 2d 3e 61 4f 70 5b 6f 72 69 67 50  c, &p->aOp[origP
29f10 63 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  c]);.#endif.    
29f20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
29f30 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
29f40 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67  ode adds nothing
29f50 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66   to the actual f
29f60 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20  unctionality.   
29f70 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72   ** of the progr
29f80 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  am.  It is only 
29f90 68 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67  here for testing
29fa0 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a   and debugging..
29fb0 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74      ** On the ot
29fc0 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65  her hand, it doe
29fd0 73 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65  s burn CPU cycle
29fe0 73 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 72  s every time thr
29ff0 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20  ough.    ** the 
2a000 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20  evaluator loop. 
2a010 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65   So we can leave
2a020 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45   it out when NDE
2a030 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
2a040 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e      */.#ifndef N
2a050 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74  DEBUG.    assert
2a060 28 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70  ( pc>=-1 && pc<p
2a070 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66  ->nOp );..#ifdef
2a080 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2a090 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65 20 29    if( p->trace )
2a0a0 7b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  {.      if( rc!=
2a0b0 30 20 29 20 66 70 72 69 6e 74 66 28 70 2d 3e 74  0 ) fprintf(p->t
2a0c0 72 61 63 65 2c 22 72 63 3d 25 64 5c 6e 22 2c 72  race,"rc=%d\n",r
2a0d0 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70  c);.      if( op
2a0e0 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
2a0f0 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45  _OUT2_PRERELEASE
2a100 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69   ){.        regi
2a110 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61  sterTrace(p->tra
2a120 63 65 2c 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ce, pOp->p2, pOu
2a130 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  t);.      }.    
2a140 20 20 69 66 28 20 6f 70 50 72 6f 70 65 72 74 79    if( opProperty
2a150 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b   & OPFLG_OUT3 ){
2a160 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65  .        registe
2a170 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c  rTrace(p->trace,
2a180 20 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b   pOp->p3, pOut);
2a190 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
2a1a0 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45  endif  /* SQLITE
2a1b0 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66  _DEBUG */.#endif
2a1c0 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20    /* NDEBUG */. 
2a1d0 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f   }  /* The end o
2a1e0 66 20 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f  f the for(;;) lo
2a1f0 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72  op the loops thr
2a200 6f 75 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a  ough opcodes */.
2a210 0a 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63  .  /* If we reac
2a220 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74  h this point, it
2a230 20 6d 65 61 6e 73 20 74 68 61 74 20 65 78 65 63   means that exec
2a240 75 74 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65  ution is finishe
2a250 64 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65  d with.  ** an e
2a260 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e  rror of some kin
2a270 64 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72  d..  */.vdbe_err
2a280 6f 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72  or_halt:.  asser
2a290 74 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63  t( rc );.  p->rc
2a2a0 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33   = rc;.  sqlite3
2a2b0 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 69  VdbeHalt(p);.  i
2a2c0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f  f( rc==SQLITE_IO
2a2d0 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e  ERR_NOMEM ) db->
2a2e0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
2a2f0 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
2a300 45 52 52 4f 52 3b 0a 0a 20 20 2f 2a 20 54 68 69  ERROR;..  /* Thi
2a310 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61  s is the only wa
2a320 79 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72  y out of this pr
2a330 6f 63 65 64 75 72 65 2e 20 20 57 65 20 68 61 76  ocedure.  We hav
2a340 65 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73  e to.  ** releas
2a350 65 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e  e the mutexes on
2a360 20 62 74 72 65 65 73 20 74 68 61 74 20 77 65 72   btrees that wer
2a370 65 20 61 63 71 75 69 72 65 64 20 61 74 20 74 68  e acquired at th
2a380 65 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76  e.  ** top. */.v
2a390 64 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 73 71  dbe_return:.  sq
2a3a0 6c 69 74 65 33 42 74 72 65 65 4d 75 74 65 78 41  lite3BtreeMutexA
2a3b0 72 72 61 79 4c 65 61 76 65 28 26 70 2d 3e 61 4d  rrayLeave(&p->aM
2a3c0 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20  utex);.  return 
2a3d0 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  rc;..  /* Jump t
2a3e0 6f 20 68 65 72 65 20 69 66 20 61 20 73 74 72 69  o here if a stri
2a3f0 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65  ng or blob large
2a400 72 20 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41  r than SQLITE_MA
2a410 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73  X_LENGTH.  ** is
2a420 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20   encountered..  
2a430 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71  */.too_big:.  sq
2a440 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2a450 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2a460 22 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20  "string or blob 
2a470 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72 63 20  too big");.  rc 
2a480 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b  = SQLITE_TOOBIG;
2a490 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
2a4a0 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a  or_halt;..  /* J
2a4b0 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61  ump to here if a
2a4c0 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e   malloc() fails.
2a4d0 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20  .  */.no_mem:.  
2a4e0 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
2a4f0 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 53   = 1;.  sqlite3S
2a500 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2a510 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f  rMsg, db, "out o
2a520 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63  f memory");.  rc
2a530 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
2a540 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
2a550 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a  or_halt;..  /* J
2a560 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20  ump to here for 
2a570 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  an SQLITE_MISUSE
2a580 20 65 72 72 6f 72 2e 0a 20 20 2a 2f 0a 61 62 6f   error..  */.abo
2a590 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
2a5a0 3a 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  :.  rc = SQLITE_
2a5b0 4d 49 53 55 53 45 3b 0a 20 20 2f 2a 20 46 61 6c  MISUSE;.  /* Fal
2a5c0 6c 20 74 68 72 75 20 69 6e 74 6f 20 61 62 6f 72  l thru into abor
2a5d0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 20 2a  t_due_to_error *
2a5e0 2f 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  /..  /* Jump to 
2a5f0 68 65 72 65 20 66 6f 72 20 61 6e 79 20 6f 74 68  here for any oth
2a600 65 72 20 6b 69 6e 64 20 6f 66 20 66 61 74 61 6c  er kind of fatal
2a610 20 65 72 72 6f 72 2e 20 20 54 68 65 20 22 72 63   error.  The "rc
2a620 22 20 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a 20  " variable.  ** 
2a630 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65 20  should hold the 
2a640 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20 20  error number..  
2a650 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  */.abort_due_to_
2a660 65 72 72 6f 72 3a 0a 20 20 61 73 73 65 72 74 28  error:.  assert(
2a670 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 29   p->zErrMsg==0 )
2a680 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c  ;.  if( db->mall
2a690 6f 63 46 61 69 6c 65 64 20 29 20 72 63 20 3d 20  ocFailed ) rc = 
2a6a0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
2a6b0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 49  if( rc!=SQLITE_I
2a6c0 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  OERR_NOMEM ){.  
2a6d0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2a6e0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2a6f0 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
2a700 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20  3ErrStr(rc));.  
2a710 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  }.  goto vdbe_er
2a720 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20  ror_halt;..  /* 
2a730 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20  Jump to here if 
2a740 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  the sqlite3_inte
2a750 72 72 75 70 74 28 29 20 41 50 49 20 73 65 74 73  rrupt() API sets
2a760 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 0a 20   the interrupt. 
2a770 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61   ** flag..  */.a
2a780 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
2a790 72 72 75 70 74 3a 0a 20 20 61 73 73 65 72 74 28  rrupt:.  assert(
2a7a0 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72   db->u1.isInterr
2a7b0 75 70 74 65 64 20 29 3b 0a 20 20 72 63 20 3d 20  upted );.  rc = 
2a7c0 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
2a7d0 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a  ;.  p->rc = rc;.
2a7e0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2a7f0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2a800 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
2a810 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20  3ErrStr(rc));.  
2a820 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
2a830 68 61 6c 74 3b 0a 7d 0a                          halt;.}.