/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact c9499f1824049cfef00a6146ef832b742f477920:


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 37 37 39 20 32 30 30 38  e.c,v 1.779 2008
0850: 2f 30 39 2f 32 32 20 30 36 3a 31 33 3a 33 32 20  /09/22 06:13:32 
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 3c 63 74 79 70 65 2e 68 3e 0a 23  lude <ctype.h>.#
08a0: 69 6e 63 6c 75 64 65 20 22 76 64 62 65 49 6e 74  include "vdbeInt
08b0: 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .h"../*.** The f
08c0: 6f 6c 6c 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20  ollowing global 
08d0: 76 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72  variable is incr
08e0: 65 6d 65 6e 74 65 64 20 65 76 65 72 79 20 74 69  emented every ti
08f0: 6d 65 20 61 20 63 75 72 73 6f 72 0a 2a 2a 20 6d  me a cursor.** m
0900: 6f 76 65 73 2c 20 65 69 74 68 65 72 20 62 79 20  oves, either by 
0910: 74 68 65 20 4f 50 5f 4d 6f 76 65 58 58 2c 20 4f  the OP_MoveXX, O
0920: 50 5f 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 50 72  P_Next, or OP_Pr
0930: 65 76 20 6f 70 63 6f 64 65 73 2e 20 20 54 68 65  ev opcodes.  The
0940: 20 74 65 73 74 0a 2a 2a 20 70 72 6f 63 65 64 75   test.** procedu
0950: 72 65 73 20 75 73 65 20 74 68 69 73 20 69 6e 66  res use this inf
0960: 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65  ormation to make
0970: 20 73 75 72 65 20 74 68 61 74 20 69 6e 64 69 63   sure that indic
0980: 65 73 20 61 72 65 0a 2a 2a 20 77 6f 72 6b 69 6e  es are.** workin
0990: 67 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 54 68  g correctly.  Th
09a0: 69 73 20 76 61 72 69 61 62 6c 65 20 68 61 73 20  is variable has 
09b0: 6e 6f 20 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65  no function othe
09c0: 72 20 74 68 61 6e 20 74 6f 0a 2a 2a 20 68 65 6c  r than to.** hel
09d0: 70 20 76 65 72 69 66 79 20 74 68 65 20 63 6f 72  p verify the cor
09e0: 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f  rect operation o
09f0: 66 20 74 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a  f the library..*
0a00: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0a10: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
0a20: 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 20 3d 20  _search_count = 
0a30: 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  0;.#endif../*.**
0a40: 20 57 68 65 6e 20 74 68 69 73 20 67 6c 6f 62 61   When this globa
0a50: 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 70 6f  l variable is po
0a60: 73 69 74 69 76 65 2c 20 69 74 20 67 65 74 73 20  sitive, it gets 
0a70: 64 65 63 72 65 6d 65 6e 74 65 64 20 6f 6e 63 65  decremented once
0a80: 20 62 65 66 6f 72 65 0a 2a 2a 20 65 61 63 68 20   before.** each 
0a90: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74  instruction in t
0aa0: 68 65 20 56 44 42 45 2e 20 20 57 68 65 6e 20 72  he VDBE.  When r
0ab0: 65 61 63 68 65 73 20 7a 65 72 6f 2c 20 74 68 65  eaches zero, the
0ac0: 20 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65   u1.isInterrupte
0ad0: 64 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68  d.** field of th
0ae0: 65 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74  e sqlite3 struct
0af0: 75 72 65 20 69 73 20 73 65 74 20 69 6e 20 6f 72  ure is set in or
0b00: 64 65 72 20 74 6f 20 73 69 6d 75 6c 61 74 65 20  der to simulate 
0b10: 61 6e 64 20 69 6e 74 65 72 72 75 70 74 2e 0a 2a  and interrupt..*
0b20: 2a 0a 2a 2a 20 54 68 69 73 20 66 61 63 69 6c 69  *.** This facili
0b30: 74 79 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  ty is used for t
0b40: 65 73 74 69 6e 67 20 70 75 72 70 6f 73 65 73 20  esting purposes 
0b50: 6f 6e 6c 79 2e 20 20 49 74 20 64 6f 65 73 20 6e  only.  It does n
0b60: 6f 74 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 69  ot function.** i
0b70: 6e 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 62 75  n an ordinary bu
0b80: 69 6c 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ild..*/.#ifdef S
0b90: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0ba0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
0bb0: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0bc0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0bd0: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0be0: 6c 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  le is incremente
0bf0: 64 20 65 61 63 68 20 74 79 70 65 20 74 68 65 20  d each type the 
0c00: 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 0a 2a  OP_Sort opcode.*
0c10: 2a 20 69 73 20 65 78 65 63 75 74 65 64 2e 20 20  * is executed.  
0c20: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0c30: 72 65 73 20 75 73 65 20 74 68 69 73 20 69 6e 66  res use this inf
0c40: 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65  ormation to make
0c50: 20 73 75 72 65 20 74 68 61 74 0a 2a 2a 20 73 6f   sure that.** so
0c60: 72 74 69 6e 67 20 69 73 20 6f 63 63 75 72 72 69  rting is occurri
0c70: 6e 67 20 6f 72 20 6e 6f 74 20 6f 63 63 75 72 72  ng or not occurr
0c80: 69 6e 67 20 61 74 20 61 70 70 72 6f 70 72 69 61  ing at appropria
0c90: 74 65 20 74 69 6d 65 73 2e 20 20 20 54 68 69 73  te times.   This
0ca0: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 68 61 73   variable.** has
0cb0: 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20 6f 74 68   no function oth
0cc0: 65 72 20 74 68 61 6e 20 74 6f 20 68 65 6c 70 20  er than to help 
0cd0: 76 65 72 69 66 79 20 74 68 65 20 63 6f 72 72 65  verify the corre
0ce0: 63 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20  ct operation of 
0cf0: 74 68 65 0a 2a 2a 20 6c 69 62 72 61 72 79 2e 0a  the.** library..
0d00: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
0d10: 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65  _TEST.int sqlite
0d20: 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 20 3d 20 30  3_sort_count = 0
0d30: 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
0d40: 54 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20  The next global 
0d50: 76 61 72 69 61 62 6c 65 20 72 65 63 6f 72 64 73  variable records
0d60: 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
0d70: 20 6c 61 72 67 65 73 74 20 4d 45 4d 5f 42 6c 6f   largest MEM_Blo
0d80: 62 0a 2a 2a 20 6f 72 20 4d 45 4d 5f 53 74 72 20  b.** or MEM_Str 
0d90: 74 68 61 74 20 68 61 73 20 62 65 65 6e 20 75 73  that has been us
0da0: 65 64 20 62 79 20 61 20 56 44 42 45 20 6f 70 63  ed by a VDBE opc
0db0: 6f 64 65 2e 20 20 54 68 65 20 74 65 73 74 20 70  ode.  The test p
0dc0: 72 6f 63 65 64 75 72 65 73 0a 2a 2a 20 75 73 65  rocedures.** use
0dd0: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0de0: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0df0: 68 61 74 20 74 68 65 20 7a 65 72 6f 2d 62 6c 6f  hat the zero-blo
0e00: 62 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a  b functionality.
0e10: 2a 2a 20 69 73 20 77 6f 72 6b 69 6e 67 20 63 6f  ** is working co
0e20: 72 72 65 63 74 6c 79 2e 20 20 20 54 68 69 73 20  rrectly.   This 
0e30: 76 61 72 69 61 62 6c 65 20 68 61 73 20 6e 6f 20  variable has no 
0e40: 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74  function other t
0e50: 68 61 6e 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76  han to.** help v
0e60: 65 72 69 66 79 20 74 68 65 20 63 6f 72 72 65 63  erify the correc
0e70: 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  t operation of t
0e80: 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23  he library..*/.#
0e90: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
0ea0: 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 61  T.int sqlite3_ma
0eb0: 78 5f 62 6c 6f 62 73 69 7a 65 20 3d 20 30 3b 0a  x_blobsize = 0;.
0ec0: 73 74 61 74 69 63 20 76 6f 69 64 20 75 70 64 61  static void upda
0ed0: 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 4d 65  teMaxBlobsize(Me
0ee0: 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 28 70 2d  m *p){.  if( (p-
0ef0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  >flags & (MEM_St
0f00: 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 21 3d 30 20  r|MEM_Blob))!=0 
0f10: 26 26 20 70 2d 3e 6e 3e 73 71 6c 69 74 65 33 5f  && p->n>sqlite3_
0f20: 6d 61 78 5f 62 6c 6f 62 73 69 7a 65 20 29 7b 0a  max_blobsize ){.
0f30: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f      sqlite3_max_
0f40: 62 6c 6f 62 73 69 7a 65 20 3d 20 70 2d 3e 6e 3b  blobsize = p->n;
0f50: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  .  }.}.#endif../
0f60: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0f70: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0f80: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0f90: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0fa0: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0fb0: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0fc0: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0fd0: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0fe0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0ff0: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
1000: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
1010: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
1020: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
1030: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
1040: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
1050: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
1060: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
1070: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
1080: 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68  /*.** Convert th
1090: 65 20 67 69 76 65 6e 20 72 65 67 69 73 74 65 72  e given register
10a0: 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69   into a string i
10b0: 66 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a  f it isn't one.*
10c0: 2a 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72  * already. Retur
10d0: 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20  n non-zero if a 
10e0: 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a  malloc() fails..
10f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e  */.#define Strin
1100: 67 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20  gify(P, enc) \. 
1110: 20 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73    if(((P)->flags
1120: 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c  &(MEM_Str|MEM_Bl
1130: 6f 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74  ob))==0 && sqlit
1140: 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69  e3VdbeMemStringi
1150: 66 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20  fy(P,enc)) \.   
1160: 20 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b    { goto no_mem;
1170: 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68   }../*.** An eph
1180: 65 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61  emeral string va
1190: 6c 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62  lue (signified b
11a0: 79 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20  y the MEM_Ephem 
11b0: 66 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a  flag) contains.*
11c0: 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  * a pointer to a
11d0: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
11e0: 6f 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68  ocated string wh
11f0: 65 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65  ere some other e
1200: 6e 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70  ntity.** is resp
1210: 6f 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c  onsible for deal
1220: 6c 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74  locating that st
1230: 72 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74  ring.  Because t
1240: 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64  he register.** d
1250: 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20  oes not control 
1260: 74 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d  the string, it m
1270: 69 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20  ight be deleted 
1280: 77 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69  without the regi
1290: 73 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20  ster.** knowing 
12a0: 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72  it..**.** This r
12b0: 6f 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20  outine converts 
12c0: 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72  an ephemeral str
12d0: 69 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d  ing into a dynam
12e0: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
12f0: 0a 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20  .** string that 
1300: 74 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73  the register its
1310: 65 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49  elf controls.  I
1320: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
1330: 74 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e  t.** converts an
1340: 20 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e   MEM_Ephem strin
1350: 67 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79  g into an MEM_Dy
1360: 6e 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65  n string..*/.#de
1370: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
1380: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
1390: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
13a0: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
13b0: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
13c0: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
13d0: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
13e0: 6d 65 6d 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c  mem;}../*.** Cal
13f0: 6c 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  l sqlite3VdbeMem
1400: 45 78 70 61 6e 64 42 6c 6f 62 28 29 20 6f 6e 20  ExpandBlob() on 
1410: 74 68 65 20 73 75 70 70 6c 69 65 64 20 76 61 6c  the supplied val
1420: 75 65 20 28 74 79 70 65 20 4d 65 6d 2a 29 0a 2a  ue (type Mem*).*
1430: 2a 20 50 20 69 66 20 72 65 71 75 69 72 65 64 2e  * P if required.
1440: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 61  .*/.#define Expa
1450: 6e 64 42 6c 6f 62 28 50 29 20 28 28 28 50 29 2d  ndBlob(P) (((P)-
1460: 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 29  >flags&MEM_Zero)
1470: 3f 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45  ?sqlite3VdbeMemE
1480: 78 70 61 6e 64 42 6c 6f 62 28 50 29 3a 30 29 0a  xpandBlob(P):0).
1490: 0a 2f 2a 0a 2a 2a 20 41 72 67 75 6d 65 6e 74 20  ./*.** Argument 
14a0: 70 4d 65 6d 20 70 6f 69 6e 74 73 20 61 74 20 61  pMem points at a
14b0: 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 77   register that w
14c0: 69 6c 6c 20 62 65 20 70 61 73 73 65 64 20 74 6f  ill be passed to
14d0: 20 61 0a 2a 2a 20 75 73 65 72 2d 64 65 66 69 6e   a.** user-defin
14e0: 65 64 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 72  ed function or r
14f0: 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75  eturned to the u
1500: 73 65 72 20 61 73 20 74 68 65 20 72 65 73 75 6c  ser as the resul
1510: 74 20 6f 66 20 61 20 71 75 65 72 79 2e 0a 2a 2a  t of a query..**
1520: 20 54 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75   The second argu
1530: 6d 65 6e 74 2c 20 27 64 62 5f 65 6e 63 27 20 69  ment, 'db_enc' i
1540: 73 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64  s the text encod
1550: 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 65 20  ing used by the 
1560: 76 64 62 65 20 66 6f 72 0a 2a 2a 20 72 65 67 69  vdbe for.** regi
1570: 73 74 65 72 20 76 61 72 69 61 62 6c 65 73 2e 20  ster variables. 
1580: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65   This routine se
1590: 74 73 20 74 68 65 20 70 4d 65 6d 2d 3e 65 6e 63  ts the pMem->enc
15a0: 20 61 6e 64 20 70 4d 65 6d 2d 3e 74 79 70 65 0a   and pMem->type.
15b0: 2a 2a 20 76 61 72 69 61 62 6c 65 73 20 75 73 65  ** variables use
15c0: 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33  d by the sqlite3
15d0: 5f 76 61 6c 75 65 5f 2a 28 29 20 72 6f 75 74 69  _value_*() routi
15e0: 6e 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  nes..*/.#define 
15f0: 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 41 2c  storeTypeInfo(A,
1600: 42 29 20 5f 73 74 6f 72 65 54 79 70 65 49 6e 66  B) _storeTypeInf
1610: 6f 28 41 29 0a 73 74 61 74 69 63 20 76 6f 69 64  o(A).static void
1620: 20 5f 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28   _storeTypeInfo(
1630: 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e  Mem *pMem){.  in
1640: 74 20 66 6c 61 67 73 20 3d 20 70 4d 65 6d 2d 3e  t flags = pMem->
1650: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 66 6c 61  flags;.  if( fla
1660: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
1670: 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20  .    pMem->type 
1680: 3d 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a 20  = SQLITE_NULL;. 
1690: 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c   }.  else if( fl
16a0: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b  ags & MEM_Int ){
16b0: 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20  .    pMem->type 
16c0: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52  = SQLITE_INTEGER
16d0: 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28  ;.  }.  else if(
16e0: 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61   flags & MEM_Rea
16f0: 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74  l ){.    pMem->t
1700: 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 46 4c 4f  ype = SQLITE_FLO
1710: 41 54 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69  AT;.  }.  else i
1720: 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  f( flags & MEM_S
1730: 74 72 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e  tr ){.    pMem->
1740: 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 54 45  type = SQLITE_TE
1750: 58 54 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  XT;.  }else{.   
1760: 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51   pMem->type = SQ
1770: 4c 49 54 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a 7d  LITE_BLOB;.  }.}
1780: 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 70 65 72 74 69  ../*.** Properti
1790: 65 73 20 6f 66 20 6f 70 63 6f 64 65 73 2e 20 20  es of opcodes.  
17a0: 54 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41  The OPFLG_INITIA
17b0: 4c 49 5a 45 52 20 6d 61 63 72 6f 20 69 73 0a 2a  LIZER macro is.*
17c0: 2a 20 63 72 65 61 74 65 64 20 62 79 20 6d 6b 6f  * created by mko
17d0: 70 63 6f 64 65 68 2e 61 77 6b 20 64 75 72 69 6e  pcodeh.awk durin
17e0: 67 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 2e 20 20  g compilation.  
17f0: 44 61 74 61 20 69 73 20 6f 62 74 61 69 6e 65 64  Data is obtained
1800: 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 63 6f 6d  .** from the com
1810: 6d 65 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  ments following 
1820: 74 68 65 20 22 63 61 73 65 20 4f 50 5f 78 78 78  the "case OP_xxx
1830: 78 3a 22 20 73 74 61 74 65 6d 65 6e 74 73 20 69  x:" statements i
1840: 6e 0a 2a 2a 20 74 68 69 73 20 66 69 6c 65 2e 20  n.** this file. 
1850: 20 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73   .*/.static cons
1860: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
1870: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  opcodeProperty[]
1880: 20 3d 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c   = OPFLG_INITIAL
1890: 49 5a 45 52 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  IZER;../*.** Ret
18a0: 75 72 6e 20 74 72 75 65 20 69 66 20 61 6e 20 6f  urn true if an o
18b0: 70 63 6f 64 65 20 68 61 73 20 61 6e 79 20 6f 66  pcode has any of
18c0: 20 74 68 65 20 4f 50 46 4c 47 5f 78 78 78 20 70   the OPFLG_xxx p
18d0: 72 6f 70 65 72 74 69 65 73 0a 2a 2a 20 73 70 65  roperties.** spe
18e0: 63 69 66 69 65 64 20 62 79 20 6d 61 73 6b 2e 0a  cified by mask..
18f0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  */.int sqlite3Vd
1900: 62 65 4f 70 63 6f 64 65 48 61 73 50 72 6f 70 65  beOpcodeHasPrope
1910: 72 74 79 28 69 6e 74 20 6f 70 63 6f 64 65 2c 20  rty(int opcode, 
1920: 69 6e 74 20 6d 61 73 6b 29 7b 0a 20 20 61 73 73  int mask){.  ass
1930: 65 72 74 28 20 6f 70 63 6f 64 65 3e 30 20 26 26  ert( opcode>0 &&
1940: 20 6f 70 63 6f 64 65 3c 73 69 7a 65 6f 66 28 6f   opcode<sizeof(o
1950: 70 63 6f 64 65 50 72 6f 70 65 72 74 79 29 20 29  pcodeProperty) )
1960: 3b 0a 20 20 72 65 74 75 72 6e 20 28 6f 70 63 6f  ;.  return (opco
1970: 64 65 50 72 6f 70 65 72 74 79 5b 6f 70 63 6f 64  deProperty[opcod
1980: 65 5d 26 6d 61 73 6b 29 21 3d 30 3b 0a 7d 0a 0a  e]&mask)!=0;.}..
1990: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 63  /*.** Allocate c
19a0: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
19b0: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
19c0: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
19d0: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
19e0: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
19f0: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 43  ory..*/.static C
1a00: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
1a10: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
1a20: 2c 20 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 0a  , .  int iCur, .
1a30: 20 20 4f 70 20 2a 70 4f 70 2c 0a 20 20 69 6e 74    Op *pOp,.  int
1a40: 20 69 44 62 2c 20 0a 20 20 69 6e 74 20 69 73 42   iDb, .  int isB
1a50: 74 72 65 65 43 75 72 73 6f 72 0a 29 7b 0a 20 20  treeCursor.){.  
1a60: 2f 2a 20 46 69 6e 64 20 74 68 65 20 6d 65 6d 6f  /* Find the memo
1a70: 72 79 20 63 65 6c 6c 20 74 68 61 74 20 77 69 6c  ry cell that wil
1a80: 6c 20 62 65 20 75 73 65 64 20 74 6f 20 73 74 6f  l be used to sto
1a90: 72 65 20 74 68 65 20 62 6c 6f 62 20 6f 66 20 6d  re the blob of m
1aa0: 65 6d 6f 72 79 0a 20 20 2a 2a 20 72 65 71 75 69  emory.  ** requi
1ab0: 72 65 64 20 66 6f 72 20 74 68 69 73 20 43 75 72  red for this Cur
1ac0: 73 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49  sor structure. I
1ad0: 74 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20  t is convenient 
1ae0: 74 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76  to use a .  ** v
1af0: 64 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  dbe memory cell 
1b00: 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65  to manage the me
1b10: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1b20: 72 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20  required for a. 
1b30: 20 2a 2a 20 43 75 72 73 6f 72 20 73 74 72 75 63   ** Cursor struc
1b40: 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c  ture for the fol
1b50: 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a  lowing reasons:.
1b60: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f    **.  **   * So
1b70: 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e  metimes cursor n
1b80: 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20  umbers are used 
1b90: 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20  for a couple of 
1ba0: 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20  different.  **  
1bb0: 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61     purposes in a
1bc0: 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54   vdbe program. T
1bd0: 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73 65  he different use
1be0: 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a  s might require.
1bf0: 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65    **     differe
1c00: 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74  nt sized allocat
1c10: 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c  ions. Memory cel
1c20: 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61  ls provide growa
1c30: 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c  ble.  **     all
1c40: 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  ocations..  **. 
1c50: 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69   **   * When usi
1c60: 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59  ng ENABLE_MEMORY
1c70: 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d  _MANAGEMENT, mem
1c80: 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73  ory cell buffers
1c90: 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65   can.  **     be
1ca0: 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69   freed lazily vi
1cb0: 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65  a the sqlite3_re
1cc0: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41  lease_memory() A
1cd0: 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20  PI. This.  **   
1ce0: 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20    minimizes the 
1cf0: 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63  number of malloc
1d00: 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74   calls made by t
1d10: 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a  he system..  **.
1d20: 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c    ** Memory cell
1d30: 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61 72  s for cursors ar
1d40: 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20 74  e allocated at t
1d50: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61 64  he top of the ad
1d60: 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63 65  dress.  ** space
1d70: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70  . Memory cell (p
1d80: 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f  ->nMem) correspo
1d90: 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30 2e  nds to cursor 0.
1da0: 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20   Space for.  ** 
1db0: 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e 61  cursor 1 is mana
1dc0: 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63 65  ged by memory ce
1dd0: 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20  ll (p->nMem-1), 
1de0: 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20  etc..  */.  Mem 
1df0: 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d  *pMem = &p->aMem
1e00: 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a  [p->nMem-iCur];.
1e10: 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20  .  int nByte;.  
1e20: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
1e30: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 6f 70 63  .  /* If the opc
1e40: 6f 64 65 20 6f 66 20 70 4f 70 20 69 73 20 4f 50  ode of pOp is OP
1e50: 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 2c 20  _SetNumColumns, 
1e60: 74 68 65 6e 20 70 4f 70 2d 3e 70 32 20 63 6f 6e  then pOp->p2 con
1e70: 74 61 69 6e 73 0a 20 20 2a 2a 20 74 68 65 20 6e  tains.  ** the n
1e80: 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
1e90: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 63  in the records c
1ea0: 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the 
1eb0: 74 61 62 6c 65 20 6f 72 0a 20 20 2a 2a 20 69 6e  table or.  ** in
1ec0: 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
1ed0: 2e 20 55 73 65 20 74 68 69 73 20 74 6f 20 72 65  . Use this to re
1ee0: 73 65 72 76 65 20 73 70 61 63 65 20 66 6f 72 20  serve space for 
1ef0: 74 68 65 20 0a 20 20 2a 2a 20 43 75 72 73 6f 72  the .  ** Cursor
1f00: 2e 61 54 79 70 65 5b 5d 20 61 72 72 61 79 2e 0a  .aType[] array..
1f10: 20 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c    */.  int nFiel
1f20: 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70  d = 0;.  if( pOp
1f30: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 74  ->opcode==OP_Set
1f40: 4e 75 6d 43 6f 6c 75 6d 6e 73 20 7c 7c 20 70 4f  NumColumns || pO
1f50: 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1f60: 65 6e 45 70 68 65 6d 65 72 61 6c 20 29 7b 0a 20  enEphemeral ){. 
1f70: 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d     nField = pOp-
1f80: 3e 70 32 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65  >p2;.  }.  nByte
1f90: 20 3d 20 0a 20 20 20 20 20 20 73 69 7a 65 6f 66   = .      sizeof
1fa0: 28 43 75 72 73 6f 72 29 20 2b 20 0a 20 20 20 20  (Cursor) + .    
1fb0: 20 20 28 69 73 42 74 72 65 65 43 75 72 73 6f 72    (isBtreeCursor
1fc0: 3f 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72  ?sqlite3BtreeCur
1fd0: 73 6f 72 53 69 7a 65 28 29 3a 30 29 20 2b 20 0a  sorSize():0) + .
1fe0: 20 20 20 20 20 20 32 2a 6e 46 69 65 6c 64 2a 73        2*nField*s
1ff0: 69 7a 65 6f 66 28 75 33 32 29 3b 0a 0a 20 20 61  izeof(u32);..  a
2000: 73 73 65 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e  ssert( iCur<p->n
2010: 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20  Cursor );.  if( 
2020: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 29  p->apCsr[iCur] )
2030: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2040: 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70  eFreeCursor(p, p
2050: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a  ->apCsr[iCur]);.
2060: 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75      p->apCsr[iCu
2070: 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  r] = 0;.  }.  if
2080: 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c  ( SQLITE_OK==sql
2090: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
20a0: 70 4d 65 6d 2c 20 6e 42 79 74 65 2c 20 30 29 20  pMem, nByte, 0) 
20b0: 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b  ){.    p->apCsr[
20c0: 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20 28 43  iCur] = pCx = (C
20d0: 75 72 73 6f 72 20 2a 29 70 4d 65 6d 2d 3e 7a 3b  ursor *)pMem->z;
20e0: 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 4d 65 6d  .    memset(pMem
20f0: 2d 3e 7a 2c 20 30 2c 20 6e 42 79 74 65 29 3b 0a  ->z, 0, nByte);.
2100: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
2110: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
2120: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
2130: 20 20 69 66 28 20 6e 46 69 65 6c 64 20 29 7b 0a    if( nField ){.
2140: 20 20 20 20 20 20 70 43 78 2d 3e 61 54 79 70 65        pCx->aType
2150: 20 3d 20 28 75 33 32 20 2a 29 26 70 4d 65 6d 2d   = (u32 *)&pMem-
2160: 3e 7a 5b 73 69 7a 65 6f 66 28 43 75 72 73 6f 72  >z[sizeof(Cursor
2170: 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  )];.    }.    if
2180: 28 20 69 73 42 74 72 65 65 43 75 72 73 6f 72 20  ( isBtreeCursor 
2190: 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 70 43  ){.      pCx->pC
21a0: 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72 73 6f  ursor = (BtCurso
21b0: 72 20 2a 29 26 70 4d 65 6d 2d 3e 7a 5b 73 69 7a  r *)&pMem->z[siz
21c0: 65 6f 66 28 43 75 72 73 6f 72 29 2b 32 2a 6e 46  eof(Cursor)+2*nF
21d0: 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29  ield*sizeof(u32)
21e0: 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  ];.    }.  }.  r
21f0: 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a  eturn pCx;.}../*
2200: 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65  .** Try to conve
2210: 72 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20  rt a value into 
2220: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
2230: 65 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63  entation if we c
2240: 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68  an.** do so with
2250: 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f  out loss of info
2260: 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68  rmation.  In oth
2270: 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65  er words, if the
2280: 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73   string.** looks
2290: 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20   like a number, 
22a0: 63 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20  convert it into 
22b0: 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74  a number.  If it
22c0: 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f   does not.** loo
22d0: 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c  k like a number,
22e0: 20 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e   leave it alone.
22f0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
2300: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
2310: 6e 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b  nity(Mem *pRec){
2320: 0a 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c  .  if( (pRec->fl
2330: 61 67 73 20 26 20 28 4d 45 4d 5f 52 65 61 6c 7c  ags & (MEM_Real|
2340: 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30 20 29 7b 0a  MEM_Int))==0 ){.
2350: 20 20 20 20 69 6e 74 20 72 65 61 6c 6e 75 6d 3b      int realnum;
2360: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2370: 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28  MemNulTerminate(
2380: 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28 20 28  pRec);.    if( (
2390: 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pRec->flags&MEM_
23a0: 53 74 72 29 0a 20 20 20 20 20 20 20 20 20 26 26  Str).         &&
23b0: 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 62 65 72   sqlite3IsNumber
23c0: 28 70 52 65 63 2d 3e 7a 2c 20 26 72 65 61 6c 6e  (pRec->z, &realn
23d0: 75 6d 2c 20 70 52 65 63 2d 3e 65 6e 63 29 20 29  um, pRec->enc) )
23e0: 7b 0a 20 20 20 20 20 20 69 36 34 20 76 61 6c 75  {.      i64 valu
23f0: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
2400: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
2410: 6e 67 28 70 52 65 63 2c 20 53 51 4c 49 54 45 5f  ng(pRec, SQLITE_
2420: 55 54 46 38 29 3b 0a 20 20 20 20 20 20 69 66 28  UTF8);.      if(
2430: 20 21 72 65 61 6c 6e 75 6d 20 26 26 20 73 71 6c   !realnum && sql
2440: 69 74 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d  ite3Atoi64(pRec-
2450: 3e 7a 2c 20 26 76 61 6c 75 65 29 20 29 7b 0a 20  >z, &value) ){. 
2460: 20 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e 69         pRec->u.i
2470: 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20   = value;.      
2480: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
2490: 28 70 52 65 63 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pRec, MEM_Int);
24a0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
24b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
24c0: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 52 65 63  eMemRealify(pRec
24d0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
24e0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  .  }.}../*.** Pr
24f0: 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65  ocessing is dete
2500: 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66  rmine by the aff
2510: 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a  inity parameter:
2520: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
2530: 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51  F_INTEGER:.** SQ
2540: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a  LITE_AFF_REAL:.*
2550: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  * SQLITE_AFF_NUM
2560: 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20  ERIC:.**    Try 
2570: 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20  to convert pRec 
2580: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
2590: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20  presentation or 
25a0: 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e  a .**    floatin
25b0: 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e  g-point represen
25c0: 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74  tation if an int
25d0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
25e0: 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74  ion.**    is not
25f0: 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65   possible.  Note
2600: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65   that the intege
2610: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
2620: 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73   is.**    always
2630: 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e   preferred, even
2640: 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79   if the affinity
2650: 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73   is REAL, becaus
2660: 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67  e.**    an integ
2670: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
2680: 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20  n is more space 
2690: 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73  efficient on dis
26a0: 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  k..**.** SQLITE_
26b0: 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20  AFF_TEXT:.**    
26c0: 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  Convert pRec to 
26d0: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
26e0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  ation..**.** SQL
26f0: 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a  ITE_AFF_NONE:.**
2700: 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63      No-op.  pRec
2710: 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
2720: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
2730: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 4d  plyAffinity(.  M
2740: 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20 20  em *pRec,       
2750: 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 20     /* The value 
2760: 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74  to apply affinit
2770: 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61  y to */.  char a
2780: 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a  ffinity,      /*
2790: 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
27a0: 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
27b0: 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20 20   u8 enc         
27c0: 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73       /* Use this
27d0: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   text encoding *
27e0: 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e  /.){.  if( affin
27f0: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2800: 54 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f  TEXT ){.    /* O
2810: 6e 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20  nly attempt the 
2820: 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45  conversion to TE
2830: 58 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61  XT if there is a
2840: 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61  n integer or rea
2850: 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65  l.    ** represe
2860: 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e  ntation (blob an
2870: 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65  d NULL do not ge
2880: 74 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74  t converted) but
2890: 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a   no string.    *
28a0: 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  * representation
28b0: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
28c0: 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73   0==(pRec->flags
28d0: 26 4d 45 4d 5f 53 74 72 29 20 26 26 20 28 70 52  &MEM_Str) && (pR
28e0: 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52  ec->flags&(MEM_R
28f0: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b  eal|MEM_Int)) ){
2900: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
2910: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
2920: 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20 20 20 7d  Rec, enc);.    }
2930: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
2940: 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d   &= ~(MEM_Real|M
2950: 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65  EM_Int);.  }else
2960: 20 69 66 28 20 61 66 66 69 6e 69 74 79 21 3d 53   if( affinity!=S
2970: 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29  QLITE_AFF_NONE )
2980: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 66  {.    assert( af
2990: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
29a0: 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61 66  FF_INTEGER || af
29b0: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
29c0: 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20 20  FF_REAL.        
29d0: 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74 79       || affinity
29e0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
29f0: 45 52 49 43 20 29 3b 0a 20 20 20 20 61 70 70 6c  ERIC );.    appl
2a00: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2a10: 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28 20  (pRec);.    if( 
2a20: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2a30: 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20 20  M_Real ){.      
2a40: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67  sqlite3VdbeInteg
2a50: 65 72 41 66 66 69 6e 69 74 79 28 70 52 65 63 29  erAffinity(pRec)
2a60: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f  ;.    }.  }.}../
2a70: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2a80: 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ert the type of 
2a90: 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  a function argum
2aa0: 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20  ent or a result 
2ab0: 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61  column.** into a
2ac0: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2ad0: 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69  ntation.  Use ei
2ae0: 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20  ther INTEGER or 
2af0: 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a  REAL whichever.*
2b00: 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  * is appropriate
2b10: 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74  .  But only do t
2b20: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66  he conversion if
2b30: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2b40: 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20  without.** loss 
2b50: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  of information a
2b60: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65  nd return the re
2b70: 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68  vised type of th
2b80: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a  e argument..**.*
2b90: 2a 20 54 68 69 73 20 69 73 20 61 6e 20 45 58 50  * This is an EXP
2ba0: 45 52 49 4d 45 4e 54 41 4c 20 61 70 69 20 61 6e  ERIMENTAL api an
2bb0: 64 20 69 73 20 73 75 62 6a 65 63 74 20 74 6f 20  d is subject to 
2bc0: 63 68 61 6e 67 65 20 6f 72 20 72 65 6d 6f 76 61  change or remova
2bd0: 6c 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  l..*/.int sqlite
2be0: 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f  3_value_numeric_
2bf0: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  type(sqlite3_val
2c00: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d  ue *pVal){.  Mem
2c10: 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70   *pMem = (Mem*)p
2c20: 56 61 6c 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65  Val;.  applyNume
2c30: 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65 6d  ricAffinity(pMem
2c40: 29 3b 0a 20 20 73 74 6f 72 65 54 79 70 65 49 6e  );.  storeTypeIn
2c50: 66 6f 28 70 4d 65 6d 2c 20 30 29 3b 0a 20 20 72  fo(pMem, 0);.  r
2c60: 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65  eturn pMem->type
2c70: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
2c80: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
2c90: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
2ca0: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
2cb0: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
2cc0: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
2cd0: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
2ce0: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
2cf0: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
2d00: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
2d10: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
2d20: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
2d30: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
2d40: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
2d50: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
2d60: 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  enc);.}..#ifdef 
2d70: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
2d80: 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20  ** Write a nice 
2d90: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
2da0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e  ation of the con
2db0: 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d  tents of cell pM
2dc0: 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65  em.** into buffe
2dd0: 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e  r zBuf, length n
2de0: 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  Buf..*/.void sql
2df0: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
2e00: 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d  yPrint(Mem *pMem
2e10: 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20  , char *zBuf){. 
2e20: 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42   char *zCsr = zB
2e30: 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d  uf;.  int f = pM
2e40: 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74  em->flags;..  st
2e50: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
2e60: 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b  *const encnames[
2e70: 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29  ] = {"(X)", "(8)
2e80: 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31  ", "(16LE)", "(1
2e90: 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66  6BE)"};..  if( f
2ea0: 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20  &MEM_Blob ){.   
2eb0: 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72   int i;.    char
2ec0: 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20   c;.    if( f & 
2ed0: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20  MEM_Dyn ){.     
2ee0: 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20   c = 'z';.      
2ef0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2f00: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
2f10: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
2f20: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
2f30: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
2f40: 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20   c = 't';.      
2f50: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2f60: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
2f70: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
2f80: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
2f90: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  hem ){.      c =
2fa0: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
2fb0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
2fc0: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
2fd0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
2fe0: 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20        c = 's';. 
2ff0: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
3000: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3010: 7a 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a  zCsr, "%c", c);.
3020: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 74 72 6c      zCsr += strl
3030: 65 6e 28 7a 43 73 72 29 3b 0a 20 20 20 20 73 71  en(zCsr);.    sq
3040: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3050: 30 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c  00, zCsr, "%d[",
3060: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a   pMem->n);.    z
3070: 43 73 72 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 43  Csr += strlen(zC
3080: 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  sr);.    for(i=0
3090: 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d  ; i<16 && i<pMem
30a0: 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ->n; i++){.     
30b0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
30c0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30  f(100, zCsr, "%0
30d0: 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d  2X", ((int)pMem-
30e0: 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a  >z[i] & 0xFF));.
30f0: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 74        zCsr += st
3100: 72 6c 65 6e 28 7a 43 73 72 29 3b 0a 20 20 20 20  rlen(zCsr);.    
3110: 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  }.    for(i=0; i
3120: 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e  <16 && i<pMem->n
3130: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68  ; i++){.      ch
3140: 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69  ar z = pMem->z[i
3150: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33  ];.      if( z<3
3160: 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43  2 || z>126 ) *zC
3170: 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20  sr++ = '.';.    
3180: 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d    else *zCsr++ =
3190: 20 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73   z;.    }..    s
31a0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
31b0: 31 30 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22  100, zCsr, "]%s"
31c0: 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d  , encnames[pMem-
31d0: 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72  >enc]);.    zCsr
31e0: 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 43 73 72 29   += strlen(zCsr)
31f0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
3200: 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
3210: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
3220: 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 6c 6c  (100, zCsr,"+%ll
3230: 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 69 29 3b 0a  dz",pMem->u.i);.
3240: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 74        zCsr += st
3250: 72 6c 65 6e 28 7a 43 73 72 29 3b 0a 20 20 20 20  rlen(zCsr);.    
3260: 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c  }.    *zCsr = '\
3270: 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  0';.  }else if( 
3280: 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  f & MEM_Str ){. 
3290: 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20     int j, k;.   
32a0: 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a   zBuf[0] = ' ';.
32b0: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
32c0: 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75  Dyn ){.      zBu
32d0: 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20  f[1] = 'z';.    
32e0: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
32f0: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45  MEM_Static|MEM_E
3300: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
3310: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
3320: 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20  EM_Static ){.   
3330: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27     zBuf[1] = 't'
3340: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3350: 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45  (f & (MEM_Dyn|ME
3360: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
3370: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
3380: 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20  & MEM_Ephem ){. 
3390: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
33a0: 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e';.      assert
33b0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
33c0: 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20  ic|MEM_Dyn))==0 
33d0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
33e0: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73      zBuf[1] = 's
33f0: 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d  ';.    }.    k =
3400: 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   2;.    sqlite3_
3410: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a  snprintf(100, &z
3420: 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d  Buf[k], "%d", pM
3430: 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d  em->n);.    k +=
3440: 20 73 74 72 6c 65 6e 28 26 7a 42 75 66 5b 6b 5d   strlen(&zBuf[k]
3450: 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d  );.    zBuf[k++]
3460: 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28   = '[';.    for(
3470: 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70  j=0; j<15 && j<p
3480: 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20  Mem->n; j++){.  
3490: 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d      u8 c = pMem-
34a0: 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28  >z[j];.      if(
34b0: 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30 78   c>=0x20 && c<0x
34c0: 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 42  7f ){.        zB
34d0: 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20  uf[k++] = c;.   
34e0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
34f0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e    zBuf[k++] = '.
3500: 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ';.      }.    }
3510: 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d  .    zBuf[k++] =
3520: 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74 65   ']';.    sqlite
3530: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 26  3_snprintf(100,&
3540: 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65  zBuf[k], encname
3550: 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20  s[pMem->enc]);. 
3560: 20 20 20 6b 20 2b 3d 20 73 74 72 6c 65 6e 28 26     k += strlen(&
3570: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3580: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
3590: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
35a0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
35b0: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
35c0: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
35d0: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
35e0: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
35f0: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
3600: 50 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75 74 2c  Print(FILE *out,
3610: 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20   Mem *p){.  if( 
3620: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  p->flags & MEM_N
3630: 75 6c 6c 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  ull ){.    fprin
3640: 74 66 28 6f 75 74 2c 20 22 20 4e 55 4c 4c 22 29  tf(out, " NULL")
3650: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70  ;.  }else if( (p
3660: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
3670: 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d  nt|MEM_Str))==(M
3680: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20  EM_Int|MEM_Str) 
3690: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
36a0: 75 74 2c 20 22 20 73 69 3a 25 6c 6c 64 22 2c 20  ut, " si:%lld", 
36b0: 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65  p->u.i);.  }else
36c0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
36d0: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 66  MEM_Int ){.    f
36e0: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 69 3a  printf(out, " i:
36f0: 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a  %lld", p->u.i);.
3700: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3710: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
3720: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
3730: 75 74 2c 20 22 20 72 3a 25 67 22 2c 20 70 2d 3e  ut, " r:%g", p->
3740: 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  r);.  }else{.   
3750: 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b   char zBuf[200];
3760: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
3770: 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70  MemPrettyPrint(p
3780: 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 66 70 72  , zBuf);.    fpr
3790: 69 6e 74 66 28 6f 75 74 2c 20 22 20 22 29 3b 0a  intf(out, " ");.
37a0: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
37b0: 20 22 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20   "%s", zBuf);.  
37c0: 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  }.}.static void 
37d0: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 46 49  registerTrace(FI
37e0: 4c 45 20 2a 6f 75 74 2c 20 69 6e 74 20 69 52 65  LE *out, int iRe
37f0: 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 66 70  g, Mem *p){.  fp
3800: 72 69 6e 74 66 28 6f 75 74 2c 20 22 52 45 47 5b  rintf(out, "REG[
3810: 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a  %d] = ", iReg);.
3820: 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28    memTracePrint(
3830: 6f 75 74 2c 20 70 29 3b 0a 20 20 66 70 72 69 6e  out, p);.  fprin
3840: 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 7d  tf(out, "\n");.}
3850: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
3860: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20  SQLITE_DEBUG.#  
3870: 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f  define REGISTER_
3880: 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 70 2d  TRACE(R,M) if(p-
3890: 3e 74 72 61 63 65 29 72 65 67 69 73 74 65 72 54  >trace)registerT
38a0: 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 52 2c  race(p->trace,R,
38b0: 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  M).#else.#  defi
38c0: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
38d0: 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a  E(R,M).#endif...
38e0: 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
38f0: 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69  ILE../* .** hwti
3900: 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e  me.h contains in
3910: 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63  line assembler c
3920: 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e  ode for implemen
3930: 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65  ting .** high-pe
3940: 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67  rformance timing
3950: 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69   routines..*/.#i
3960: 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68  nclude "hwtime.h
3970: 22 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  "..#endif../*.**
3980: 20 54 68 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49   The CHECK_FOR_I
3990: 4e 54 45 52 52 55 50 54 20 6d 61 63 72 6f 20 64  NTERRUPT macro d
39a0: 65 66 69 6e 65 64 20 68 65 72 65 20 6c 6f 6f 6b  efined here look
39b0: 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 0a  s to see if the.
39c0: 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  ** sqlite3_inter
39d0: 72 75 70 74 28 29 20 72 6f 75 74 69 6e 65 20 68  rupt() routine h
39e0: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 2e 20  as been called. 
39f0: 20 49 66 20 69 74 20 68 61 73 20 62 65 65 6e 2c   If it has been,
3a00: 20 74 68 65 6e 0a 2a 2a 20 70 72 6f 63 65 73 73   then.** process
3a10: 69 6e 67 20 6f 66 20 74 68 65 20 56 44 42 45 20  ing of the VDBE 
3a20: 70 72 6f 67 72 61 6d 20 69 73 20 69 6e 74 65 72  program is inter
3a30: 72 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  rupted..**.** Th
3a40: 69 73 20 6d 61 63 72 6f 20 61 64 64 65 64 20 74  is macro added t
3a50: 6f 20 65 76 65 72 79 20 69 6e 73 74 72 75 63 74  o every instruct
3a60: 69 6f 6e 20 74 68 61 74 20 64 6f 65 73 20 61 20  ion that does a 
3a70: 6a 75 6d 70 20 69 6e 20 6f 72 64 65 72 20 74 6f  jump in order to
3a80: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20  .** implement a 
3a90: 6c 6f 6f 70 2e 20 20 54 68 69 73 20 74 65 73 74  loop.  This test
3aa0: 20 75 73 65 64 20 74 6f 20 62 65 20 6f 6e 20 65   used to be on e
3ab0: 76 65 72 79 20 73 69 6e 67 6c 65 20 69 6e 73 74  very single inst
3ac0: 72 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62 75 74 20  ruction,.** but 
3ad0: 74 68 61 74 20 6d 65 61 6e 74 20 77 65 20 6d 6f  that meant we mo
3ae0: 72 65 20 74 65 73 74 69 6e 67 20 74 68 61 74 20  re testing that 
3af0: 77 65 20 6e 65 65 64 65 64 2e 20 20 42 79 20 6f  we needed.  By o
3b00: 6e 6c 79 20 74 65 73 74 69 6e 67 20 74 68 65 0a  nly testing the.
3b10: 2a 2a 20 66 6c 61 67 20 6f 6e 20 6a 75 6d 70 20  ** flag on jump 
3b20: 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c 20 77 65  instructions, we
3b30: 20 67 65 74 20 61 20 28 73 6d 61 6c 6c 29 20 73   get a (small) s
3b40: 70 65 65 64 20 69 6d 70 72 6f 76 65 6d 65 6e 74  peed improvement
3b50: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 48 45  ..*/.#define CHE
3b60: 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54  CK_FOR_INTERRUPT
3b70: 20 5c 0a 20 20 20 69 66 28 20 64 62 2d 3e 75 31   \.   if( db->u1
3b80: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
3b90: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
3ba0: 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 0a 23  to_interrupt;..#
3bb0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3bc0: 55 47 0a 73 74 61 74 69 63 20 69 6e 74 20 66 69  UG.static int fi
3bd0: 6c 65 45 78 69 73 74 73 28 73 71 6c 69 74 65 33  leExists(sqlite3
3be0: 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72   *db, const char
3bf0: 20 2a 7a 46 69 6c 65 29 7b 0a 20 20 69 6e 74 20   *zFile){.  int 
3c00: 72 65 73 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72  res = 0;.  int r
3c10: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23  c = SQLITE_OK;.#
3c20: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
3c30: 54 0a 20 20 2f 2a 20 49 66 20 77 65 20 61 72 65  T.  /* If we are
3c40: 20 63 75 72 72 65 6e 74 6c 79 20 74 65 73 74 69   currently testi
3c50: 6e 67 20 49 4f 20 65 72 72 6f 72 73 2c 20 74 68  ng IO errors, th
3c60: 65 6e 20 64 6f 20 6e 6f 74 20 63 61 6c 6c 20 4f  en do not call O
3c70: 73 41 63 63 65 73 73 28 29 20 74 6f 0a 20 20 2a  sAccess() to.  *
3c80: 2a 20 74 65 73 74 20 66 6f 72 20 74 68 65 20 70  * test for the p
3c90: 72 65 73 65 6e 63 65 20 6f 66 20 7a 46 69 6c 65  resence of zFile
3ca0: 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73  . This is becaus
3cb0: 65 20 61 6e 79 20 49 4f 20 65 72 72 6f 72 20 74  e any IO error t
3cc0: 68 61 74 0a 20 20 2a 2a 20 6f 63 63 75 72 73 20  hat.  ** occurs 
3cd0: 68 65 72 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  here will not be
3ce0: 20 72 65 70 6f 72 74 65 64 2c 20 63 61 75 73 69   reported, causi
3cf0: 6e 67 20 74 68 65 20 74 65 73 74 20 74 6f 20 66  ng the test to f
3d00: 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 65 78 74 65  ail..  */.  exte
3d10: 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 69  rn int sqlite3_i
3d20: 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69 6e 67 3b  o_error_pending;
3d30: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69  .  if( sqlite3_i
3d40: 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69 6e 67 3c  o_error_pending<
3d50: 3d 30 20 29 0a 23 65 6e 64 69 66 0a 20 20 20 20  =0 ).#endif.    
3d60: 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63  rc = sqlite3OsAc
3d70: 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a  cess(db->pVfs, z
3d80: 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 41 43 43  File, SQLITE_ACC
3d90: 45 53 53 5f 45 58 49 53 54 53 2c 20 26 72 65 73  ESS_EXISTS, &res
3da0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 72 65 73  );.  return (res
3db0: 20 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   && rc==SQLITE_O
3dc0: 4b 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  K);.}.#endif../*
3dd0: 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d  .** Execute as m
3de0: 75 63 68 20 6f 66 20 61 20 56 44 42 45 20 70 72  uch of a VDBE pr
3df0: 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61 6e 20  ogram as we can 
3e00: 74 68 65 6e 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a  then return..**.
3e10: 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61  ** sqlite3VdbeMa
3e20: 6b 65 52 65 61 64 79 28 29 20 6d 75 73 74 20 62  keReady() must b
3e30: 65 20 63 61 6c 6c 65 64 20 62 65 66 6f 72 65 20  e called before 
3e40: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 20  this routine in 
3e50: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73  order to.** clos
3e60: 65 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69  e the program wi
3e70: 74 68 20 61 20 66 69 6e 61 6c 20 4f 50 5f 48 61  th a final OP_Ha
3e80: 6c 74 20 61 6e 64 20 74 6f 20 73 65 74 20 75 70  lt and to set up
3e90: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 73 0a 2a   the callbacks.*
3ea0: 2a 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20  * and the error 
3eb0: 6d 65 73 73 61 67 65 20 70 6f 69 6e 74 65 72 2e  message pointer.
3ec0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20  .**.** Whenever 
3ed0: 61 20 72 6f 77 20 6f 72 20 72 65 73 75 6c 74 20  a row or result 
3ee0: 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c  data is availabl
3ef0: 65 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  e, this routine 
3f00: 77 69 6c 6c 20 65 69 74 68 65 72 0a 2a 2a 20 69  will either.** i
3f10: 6e 76 6f 6b 65 20 74 68 65 20 72 65 73 75 6c 74  nvoke the result
3f20: 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68   callback (if th
3f30: 65 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 72  ere is one) or r
3f40: 65 74 75 72 6e 20 77 69 74 68 0a 2a 2a 20 53 51  eturn with.** SQ
3f50: 4c 49 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20  LITE_ROW..**.** 
3f60: 49 66 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73  If an attempt is
3f70: 20 6d 61 64 65 20 74 6f 20 6f 70 65 6e 20 61 20   made to open a 
3f80: 6c 6f 63 6b 65 64 20 64 61 74 61 62 61 73 65 2c  locked database,
3f90: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
3fa0: 6e 65 0a 2a 2a 20 77 69 6c 6c 20 65 69 74 68 65  ne.** will eithe
3fb0: 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 62 75 73  r invoke the bus
3fc0: 79 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74  y callback (if t
3fd0: 68 65 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20  here is one) or 
3fe0: 69 74 20 77 69 6c 6c 0a 2a 2a 20 72 65 74 75 72  it will.** retur
3ff0: 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 2e 0a 2a  n SQLITE_BUSY..*
4000: 2a 0a 2a 2a 20 49 66 20 61 6e 20 65 72 72 6f 72  *.** If an error
4010: 20 6f 63 63 75 72 73 2c 20 61 6e 20 65 72 72 6f   occurs, an erro
4020: 72 20 6d 65 73 73 61 67 65 20 69 73 20 77 72 69  r message is wri
4030: 74 74 65 6e 20 74 6f 20 6d 65 6d 6f 72 79 20 6f  tten to memory o
4040: 62 74 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20  btained.** from 
4050: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29  sqlite3_malloc()
4060: 20 61 6e 64 20 70 2d 3e 7a 45 72 72 4d 73 67 20   and p->zErrMsg 
4070: 69 73 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74  is made to point
4080: 20 74 6f 20 74 68 61 74 20 6d 65 6d 6f 72 79 2e   to that memory.
4090: 0a 2a 2a 20 54 68 65 20 65 72 72 6f 72 20 63 6f  .** The error co
40a0: 64 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  de is stored in 
40b0: 70 2d 3e 72 63 20 61 6e 64 20 74 68 69 73 20 72  p->rc and this r
40c0: 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 53  outine returns S
40d0: 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a  QLITE_ERROR..**.
40e0: 2a 2a 20 49 66 20 74 68 65 20 63 61 6c 6c 62 61  ** If the callba
40f0: 63 6b 20 65 76 65 72 20 72 65 74 75 72 6e 73 20  ck ever returns 
4100: 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
4110: 68 65 20 70 72 6f 67 72 61 6d 20 65 78 69 74 73  he program exits
4120: 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  .** immediately.
4130: 20 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20    There will be 
4140: 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  no error message
4150: 20 62 75 74 20 74 68 65 20 70 2d 3e 72 63 20 66   but the p->rc f
4160: 69 65 6c 64 20 69 73 0a 2a 2a 20 73 65 74 20 74  ield is.** set t
4170: 6f 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 20 61  o SQLITE_ABORT a
4180: 6e 64 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  nd this routine 
4190: 77 69 6c 6c 20 72 65 74 75 72 6e 20 53 51 4c 49  will return SQLI
41a0: 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20  TE_ERROR..**.** 
41b0: 41 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  A memory allocat
41c0: 69 6f 6e 20 65 72 72 6f 72 20 63 61 75 73 65 73  ion error causes
41d0: 20 70 2d 3e 72 63 20 74 6f 20 62 65 20 73 65 74   p->rc to be set
41e0: 20 74 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d   to SQLITE_NOMEM
41f0: 20 61 6e 64 20 74 68 69 73 0a 2a 2a 20 72 6f 75   and this.** rou
4200: 74 69 6e 65 20 74 6f 20 72 65 74 75 72 6e 20 53  tine to return S
4210: 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a  QLITE_ERROR..**.
4220: 2a 2a 20 4f 74 68 65 72 20 66 61 74 61 6c 20 65  ** Other fatal e
4230: 72 72 6f 72 73 20 72 65 74 75 72 6e 20 53 51 4c  rrors return SQL
4240: 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a  ITE_ERROR..**.**
4250: 20 41 66 74 65 72 20 74 68 69 73 20 72 6f 75 74   After this rout
4260: 69 6e 65 20 68 61 73 20 66 69 6e 69 73 68 65 64  ine has finished
4270: 2c 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e  , sqlite3VdbeFin
4280: 61 6c 69 7a 65 28 29 20 73 68 6f 75 6c 64 20 62  alize() should b
4290: 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6c 65  e.** used to cle
42a0: 61 6e 20 75 70 20 74 68 65 20 6d 65 73 73 20 74  an up the mess t
42b0: 68 61 74 20 77 61 73 20 6c 65 66 74 20 62 65 68  hat was left beh
42c0: 69 6e 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ind..*/.int sqli
42d0: 74 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56  te3VdbeExec(.  V
42e0: 64 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20  dbe *p          
42f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
4300: 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e   VDBE */.){.  in
4310: 74 20 70 63 3b 20 20 20 20 20 20 20 20 20 20 20  t pc;           
4320: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
4330: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
4340: 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20  */.  Op *pOp;   
4350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4360: 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61  /* Current opera
4370: 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63  tion */.  int rc
4380: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20   = SQLITE_OK;   
4390: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
43a0: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c   return */.  sql
43b0: 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62  ite3 *db = p->db
43c0: 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64  ;       /* The d
43d0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20  atabase */.  u8 
43e0: 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64  encoding = ENC(d
43f0: 62 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64  b);     /* The d
4400: 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67  atabase encoding
4410: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 2c   */.  Mem *pIn1,
4420: 20 2a 70 49 6e 32 2c 20 2a 70 49 6e 33 3b 20 20   *pIn2, *pIn3;  
4430: 20 2f 2a 20 49 6e 70 75 74 20 6f 70 65 72 61 6e   /* Input operan
4440: 64 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75  ds */.  Mem *pOu
4450: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
4460: 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65     /* Output ope
4470: 72 61 6e 64 20 2a 2f 0a 20 20 75 38 20 6f 70 50  rand */.  u8 opP
4480: 72 6f 70 65 72 74 79 3b 0a 20 20 69 6e 74 20 69  roperty;.  int i
4490: 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20  Compare = 0;    
44a0: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
44b0: 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61  of last OP_Compa
44c0: 72 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  re operation */.
44d0: 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20    int *aPermute 
44e0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
44f0: 50 65 72 6d 75 61 74 69 6f 6e 20 6f 66 20 63 6f  Permuation of co
4500: 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d  lumns for OP_Com
4510: 70 61 72 65 20 2a 2f 0a 23 69 66 64 65 66 20 56  pare */.#ifdef V
4520: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36  DBE_PROFILE.  u6
4530: 34 20 73 74 61 72 74 3b 20 20 20 20 20 20 20 20  4 start;        
4540: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55 20           /* CPU 
4550: 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20 73  clock count at s
4560: 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a  tart of opcode *
4570: 2f 0a 20 20 69 6e 74 20 6f 72 69 67 50 63 3b 20  /.  int origPc; 
4580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4590: 2a 20 50 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  * Program counte
45a0: 72 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70  r at start of op
45b0: 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  code */.#endif.#
45c0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
45d0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
45e0: 42 41 43 4b 0a 20 20 69 6e 74 20 6e 50 72 6f 67  BACK.  int nProg
45f0: 72 65 73 73 4f 70 73 20 3d 20 30 3b 20 20 20 20  ressOps = 0;    
4600: 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 65 78 65    /* Opcodes exe
4610: 63 75 74 65 64 20 73 69 6e 63 65 20 70 72 6f 67  cuted since prog
4620: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ress callback. *
4630: 2f 0a 23 65 6e 64 69 66 0a 20 20 55 6e 70 61 63  /.#endif.  Unpac
4640: 6b 65 64 52 65 63 6f 72 64 20 61 54 65 6d 70 52  kedRecord aTempR
4650: 65 63 5b 31 36 5d 3b 20 2f 2a 20 53 70 61 63 65  ec[16]; /* Space
4660: 20 74 6f 20 68 6f 6c 64 20 61 20 74 72 61 6e 73   to hold a trans
4670: 69 65 6e 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ient UnpackedRec
4680: 6f 72 64 20 2a 2f 0a 0a 0a 20 20 61 73 73 65 72  ord */...  asser
4690: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
46a0: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
46b0: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
46c0: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
46d0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  */.  assert( db-
46e0: 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d  >magic==SQLITE_M
46f0: 41 47 49 43 5f 42 55 53 59 20 29 3b 0a 20 20 73  AGIC_BUSY );.  s
4700: 71 6c 69 74 65 33 42 74 72 65 65 4d 75 74 65 78  qlite3BtreeMutex
4710: 41 72 72 61 79 45 6e 74 65 72 28 26 70 2d 3e 61  ArrayEnter(&p->a
4720: 4d 75 74 65 78 29 3b 0a 20 20 69 66 28 20 70 2d  Mutex);.  if( p-
4730: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45  >rc==SQLITE_NOME
4740: 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  M ){.    /* This
4750: 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61   happens if a ma
4760: 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20  lloc() inside a 
4770: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f  call to sqlite3_
4780: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72  column_text() or
4790: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  .    ** sqlite3_
47a0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20  column_text16() 
47b0: 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20  failed.  */.    
47c0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
47d0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63  .  assert( p->rc
47e0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70  ==SQLITE_OK || p
47f0: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ->rc==SQLITE_BUS
4800: 59 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53  Y );.  p->rc = S
4810: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65  QLITE_OK;.  asse
4820: 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d  rt( p->explain==
4830: 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c  0 );.  p->pResul
4840: 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e  tSet = 0;.  db->
4850: 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73  busyHandler.nBus
4860: 79 20 3d 20 30 3b 0a 20 20 43 48 45 43 4b 5f 46  y = 0;.  CHECK_F
4870: 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
4880: 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
4890: 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 64 65 66  ceSql(p);.#ifdef
48a0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
48b0: 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
48c0: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66  gnMalloc();.  if
48d0: 28 20 70 2d 3e 70 63 3d 3d 30 20 0a 20 20 20 26  ( p->pc==0 .   &
48e0: 26 20 28 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73  & ((p->db->flags
48f0: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69   & SQLITE_VdbeLi
4900: 73 74 69 6e 67 29 20 7c 7c 20 66 69 6c 65 45 78  sting) || fileEx
4910: 69 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f 65  ists(db, "vdbe_e
4920: 78 70 6c 61 69 6e 22 29 29 0a 20 20 29 7b 0a 20  xplain")).  ){. 
4930: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 72     int i;.    pr
4940: 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67 72  intf("VDBE Progr
4950: 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b  am Listing:\n");
4960: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4970: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4980: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e   for(i=0; i<p->n
4990: 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Op; i++){.      
49a0: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
49b0: 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 70  Op(stdout, i, &p
49c0: 2d 3e 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 7d  ->aOp[i]);.    }
49d0: 0a 20 20 7d 0a 20 20 69 66 28 20 66 69 6c 65 45  .  }.  if( fileE
49e0: 78 69 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f  xists(db, "vdbe_
49f0: 74 72 61 63 65 22 29 20 29 7b 0a 20 20 20 20 70  trace") ){.    p
4a00: 2d 3e 74 72 61 63 65 20 3d 20 73 74 64 6f 75 74  ->trace = stdout
4a10: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45  ;.  }.  sqlite3E
4a20: 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  ndBenignMalloc()
4a30: 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70  ;.#endif.  for(p
4a40: 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c  c=p->pc; rc==SQL
4a50: 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20  ITE_OK; pc++){. 
4a60: 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 30     assert( pc>=0
4a70: 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b   && pc<p->nOp );
4a80: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  .    if( db->mal
4a90: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
4aa0: 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20   no_mem;.#ifdef 
4ab0: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
4ac0: 20 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a 20 20   origPc = pc;.  
4ad0: 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65    start = sqlite
4ae0: 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69  3Hwtime();.#endi
4af0: 66 0a 20 20 20 20 70 4f 70 20 3d 20 26 70 2d 3e  f.    pOp = &p->
4b00: 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a  aOp[pc];..    /*
4b10: 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63   Only allow trac
4b20: 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45  ing if SQLITE_DE
4b30: 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
4b40: 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51      */.#ifdef SQ
4b50: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
4b60: 66 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20  f( p->trace ){. 
4b70: 20 20 20 20 20 69 66 28 20 70 63 3d 3d 30 20 29       if( pc==0 )
4b80: 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66  {.        printf
4b90: 28 22 56 44 42 45 20 45 78 65 63 75 74 69 6f 6e  ("VDBE Execution
4ba0: 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20   Trace:\n");.   
4bb0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4bc0: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4bd0: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
4be0: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 70 2d  e3VdbePrintOp(p-
4bf0: 3e 74 72 61 63 65 2c 20 70 63 2c 20 70 4f 70 29  >trace, pc, pOp)
4c00: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
4c10: 70 2d 3e 74 72 61 63 65 3d 3d 30 20 26 26 20 70  p->trace==0 && p
4c20: 63 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  c==0 ){.      sq
4c30: 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
4c40: 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 20 20 20 20  Malloc();.      
4c50: 69 66 28 20 66 69 6c 65 45 78 69 73 74 73 28 64  if( fileExists(d
4c60: 62 2c 20 22 76 64 62 65 5f 73 71 6c 74 72 61 63  b, "vdbe_sqltrac
4c70: 65 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73  e") ){.        s
4c80: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53  qlite3VdbePrintS
4c90: 71 6c 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ql(p);.      }. 
4ca0: 20 20 20 20 20 73 71 6c 69 74 65 33 45 6e 64 42       sqlite3EndB
4cb0: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20  enignMalloc();. 
4cc0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
4cd0: 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b    ..    /* Check
4ce0: 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65   to see if we ne
4cf0: 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61  ed to simulate a
4d00: 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68  n interrupt.  Th
4d10: 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a  is only happens.
4d20: 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76      ** if we hav
4d30: 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74  e a special test
4d40: 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23   build..    */.#
4d50: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
4d60: 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  T.    if( sqlite
4d70: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
4d80: 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  t>0 ){.      sql
4d90: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
4da0: 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66  ount--;.      if
4db0: 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ( sqlite3_interr
4dc0: 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a  upt_count==0 ){.
4dd0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
4de0: 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20  interrupt(db);. 
4df0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
4e00: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
4e10: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
4e20: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 20 20 2f  S_CALLBACK.    /
4e30: 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72  * Call the progr
4e40: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20  ess callback if 
4e50: 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  it is configured
4e60: 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65   and the require
4e70: 64 20 6e 75 6d 62 65 72 0a 20 20 20 20 2a 2a 20  d number.    ** 
4e80: 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65  of VDBE ops have
4e90: 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28   been executed (
4ea0: 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69  either since thi
4eb0: 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a  s invocation of.
4ec0: 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64      ** sqlite3Vd
4ed0: 62 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63  beExec() or sinc
4ee0: 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20  e last time the 
4ef0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
4f00: 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20  k was called).. 
4f10: 20 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f     ** If the pro
4f20: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72  gress callback r
4f30: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  eturns non-zero,
4f40: 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61   exit the virtua
4f50: 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20  l machine with. 
4f60: 20 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63     ** a return c
4f70: 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  ode SQLITE_ABORT
4f80: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
4f90: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29   db->xProgress )
4fa0: 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  {.      if( db->
4fb0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3d 3d 6e 50  nProgressOps==nP
4fc0: 72 6f 67 72 65 73 73 4f 70 73 20 29 7b 0a 20 20  rogressOps ){.  
4fd0: 20 20 20 20 20 20 69 6e 74 20 70 72 63 3b 0a 20        int prc;. 
4fe0: 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
4ff0: 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
5000: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
5010: 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20  _to_misuse;.    
5020: 20 20 20 20 70 72 63 20 3d 64 62 2d 3e 78 50 72      prc =db->xPr
5030: 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67  ogress(db->pProg
5040: 72 65 73 73 41 72 67 29 3b 0a 20 20 20 20 20 20  ressArg);.      
5050: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
5060: 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f  etyOn(db) ) goto
5070: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
5080: 73 75 73 65 3b 0a 20 20 20 20 20 20 20 20 69 66  suse;.        if
5090: 28 20 70 72 63 21 3d 30 20 29 7b 0a 20 20 20 20  ( prc!=0 ){.    
50a0: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
50b0: 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20  E_INTERRUPT;.   
50c0: 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
50d0: 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20  _error_halt;.   
50e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e       }.        n
50f0: 50 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b  ProgressOps = 0;
5100: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e  .      }.      n
5110: 50 72 6f 67 72 65 73 73 4f 70 73 2b 2b 3b 0a 20  ProgressOps++;. 
5120: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
5130: 20 2f 2a 20 44 6f 20 63 6f 6d 6d 6f 6e 20 73 65   /* Do common se
5140: 74 75 70 20 70 72 6f 63 65 73 73 69 6e 67 20 66  tup processing f
5150: 6f 72 20 61 6e 79 20 6f 70 63 6f 64 65 20 74 68  or any opcode th
5160: 61 74 20 69 73 20 6d 61 72 6b 65 64 0a 20 20 20  at is marked.   
5170: 20 2a 2a 20 77 69 74 68 20 74 68 65 20 22 6f 75   ** with the "ou
5180: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 22 20 74  t2-prerelease" t
5190: 61 67 2e 20 20 53 75 63 68 20 6f 70 63 6f 64 65  ag.  Such opcode
51a0: 73 20 68 61 76 65 20 61 20 73 69 6e 67 6c 65 0a  s have a single.
51b0: 20 20 20 20 2a 2a 20 6f 75 74 70 75 74 20 77 68      ** output wh
51c0: 69 63 68 20 69 73 20 73 70 65 63 69 66 69 65 64  ich is specified
51d0: 20 62 79 20 74 68 65 20 50 32 20 70 61 72 61 6d   by the P2 param
51e0: 65 74 65 72 2e 20 20 54 68 65 20 50 32 20 72 65  eter.  The P2 re
51f0: 67 69 73 74 65 72 0a 20 20 20 20 2a 2a 20 69 73  gister.    ** is
5200: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
5210: 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20  a NULL..    */. 
5220: 20 20 20 6f 70 50 72 6f 70 65 72 74 79 20 3d 20     opProperty = 
5230: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70  opcodeProperty[p
5240: 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20 20  Op->opcode];.   
5250: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
5260: 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52   & OPFLG_OUT2_PR
5270: 45 52 45 4c 45 41 53 45 29 21 3d 30 20 29 7b 0a  ERELEASE)!=0 ){.
5280: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5290: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
52a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
52b0: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
52c0: 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d     pOut = &p->aM
52d0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
52e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
52f0: 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61 6c  mReleaseExternal
5300: 28 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 70 4f  (pOut);.      pO
5310: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
5320: 4e 75 6c 6c 3b 0a 20 20 20 20 7d 65 6c 73 65 0a  Null;.    }else.
5330: 20 0a 20 20 20 20 2f 2a 20 44 6f 20 63 6f 6d 6d   .    /* Do comm
5340: 6f 6e 20 73 65 74 75 70 20 66 6f 72 20 6f 70 63  on setup for opc
5350: 6f 64 65 73 20 6d 61 72 6b 65 64 20 77 69 74 68  odes marked with
5360: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
5370: 6f 77 69 6e 67 0a 20 20 20 20 2a 2a 20 63 6f 6d  owing.    ** com
5380: 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20 70 72 6f  binations of pro
5390: 70 65 72 74 69 65 73 2e 0a 20 20 20 20 2a 2a 0a  perties..    **.
53a0: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
53b0: 20 69 6e 31 0a 20 20 20 20 2a 2a 20 20 20 20 20   in1.    **     
53c0: 20 20 20 20 20 20 69 6e 31 20 69 6e 32 0a 20 20        in1 in2.  
53d0: 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 69    **           i
53e0: 6e 31 20 69 6e 32 20 6f 75 74 33 0a 20 20 20 20  n1 in2 out3.    
53f0: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 69 6e 31  **           in1
5400: 20 69 6e 33 0a 20 20 20 20 2a 2a 0a 20 20 20 20   in3.    **.    
5410: 2a 2a 20 56 61 72 69 61 62 6c 65 73 20 70 49 6e  ** Variables pIn
5420: 31 2c 20 70 49 6e 32 2c 20 61 6e 64 20 70 49 6e  1, pIn2, and pIn
5430: 33 20 61 72 65 20 6d 61 64 65 20 74 6f 20 70 6f  3 are made to po
5440: 69 6e 74 20 74 6f 20 61 70 70 72 6f 70 72 69 61  int to appropria
5450: 74 65 0a 20 20 20 20 2a 2a 20 72 65 67 69 73 74  te.    ** regist
5460: 65 72 73 20 66 6f 72 20 69 6e 70 75 74 73 2e 20  ers for inputs. 
5470: 20 56 61 72 69 61 62 6c 65 20 70 4f 75 74 20 70   Variable pOut p
5480: 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6f 75 74  oints to the out
5490: 70 75 74 20 72 65 67 69 73 74 65 72 2e 0a 20 20  put register..  
54a0: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 6f 70    */.    if( (op
54b0: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
54c0: 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN1)!=0 ){.    
54d0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
54e0: 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  1>0 );.      ass
54f0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  ert( pOp->p1<=p-
5500: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 70  >nMem );.      p
5510: 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  In1 = &p->aMem[p
5520: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 20 20 20 20 52  Op->p1];.      R
5530: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5540: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
5550: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
5560: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29  rty & OPFLG_IN2)
5570: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5580: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
5590: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
55a0: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e  rt( pOp->p2<=p->
55b0: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20  nMem );.        
55c0: 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIn2 = &p->aMem[
55d0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20  pOp->p2];.      
55e0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
55f0: 28 70 4f 70 2d 3e 70 32 2c 20 70 49 6e 32 29 3b  (pOp->p2, pIn2);
5600: 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 70  .        if( (op
5610: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
5620: 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT3)!=0 ){.   
5630: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5640: 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
5650: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5660: 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
5670: 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4f 75 74  ;.          pOut
5680: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
5690: 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  >p3];.        }.
56a0: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
56b0: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
56c0: 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20  FLG_IN3)!=0 ){. 
56d0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
56e0: 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
56f0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5700: 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
5710: 20 20 20 20 20 20 20 20 70 49 6e 33 20 3d 20 26          pIn3 = &
5720: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
5730: 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ;.        REGIST
5740: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
5750: 2c 20 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 7d  , pIn3);.      }
5760: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28  .    }else if( (
5770: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5780: 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20  LG_IN2)!=0 ){.  
5790: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
57a0: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
57b0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
57c0: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
57d0: 20 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIn2 = &p->aMem
57e0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20  [pOp->p2];.     
57f0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5800: 70 4f 70 2d 3e 70 32 2c 20 70 49 6e 32 29 3b 0a  pOp->p2, pIn2);.
5810: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 6f      }else if( (o
5820: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
5830: 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN3)!=0 ){.   
5840: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5850: 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p3>0 );.      as
5860: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
5870: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
5880: 70 49 6e 33 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIn3 = &p->aMem[
5890: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
58a0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
58b0: 4f 70 2d 3e 70 33 2c 20 70 49 6e 33 29 3b 0a 20  Op->p3, pIn3);. 
58c0: 20 20 20 7d 0a 0a 20 20 20 20 73 77 69 74 63 68     }..    switch
58d0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
58e0: 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
58f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5900: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5910: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5920: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5930: 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73  .** What follows
5940: 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77   is a massive sw
5950: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
5960: 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69  here each case i
5970: 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73  mplements a.** s
5980: 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74  eparate instruct
5990: 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75  ion in the virtu
59a0: 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20  al machine.  If 
59b0: 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73  we follow the us
59c0: 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69  ual.** indentati
59d0: 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20  on conventions, 
59e0: 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64  each case should
59f0: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20   be indented by 
5a00: 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a  6 spaces.  But.*
5a10: 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20  * that is a lot 
5a20: 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20  of wasted space 
5a30: 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67  on the left marg
5a40: 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65  in.  So the code
5a50: 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73   within.** the s
5a60: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5a70: 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20  will break with 
5a80: 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62  convention and b
5a90: 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e  e flush-left. An
5aa0: 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d  other.** big com
5ab0: 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f  ment (similar to
5ac0: 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20   this one) will 
5ad0: 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69  mark the point i
5ae0: 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65  n the code where
5af0: 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f  .** we transitio
5b00: 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c  n back to normal
5b10: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a   indentation..**
5b20: 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69  .** The formatti
5b30: 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20  ng of each case 
5b40: 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54  is important.  T
5b50: 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20  he makefile for 
5b60: 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61  SQLite.** genera
5b70: 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20  tes two C files 
5b80: 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20  "opcodes.h" and 
5b90: 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73  "opcodes.c" by s
5ba0: 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20  canning this.** 
5bb0: 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  file looking for
5bc0: 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69   lines that begi
5bd0: 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f  n with "case OP_
5be0: 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e  ".  The opcodes.
5bf0: 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20  h files.** will 
5c00: 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23  be filled with #
5c10: 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76  defines that giv
5c20: 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  e unique integer
5c30: 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a   values to each.
5c40: 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68  ** opcode and th
5c50: 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65  e opcodes.c file
5c60: 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20   is filled with 
5c70: 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  an array of stri
5c80: 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63  ngs where.** eac
5c90: 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20  h string is the 
5ca0: 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f  symbolic name fo
5cb0: 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  r the correspond
5cc0: 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20  ing opcode.  If 
5cd0: 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74  the.** case stat
5ce0: 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65  ement is followe
5cf0: 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f  d by a comment o
5d00: 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73  f the form "/# s
5d10: 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a  ame as ... #/".*
5d20: 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69  * that comment i
5d30: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
5d40: 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c  ine the particul
5d50: 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ar value of the 
5d60: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74  opcode..**.** Ot
5d70: 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  her keywords in 
5d80: 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74  the comment that
5d90: 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61   follows each ca
5da0: 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  se are used to.*
5db0: 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  * construct the 
5dc0: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
5dd0: 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69  R value that ini
5de0: 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50  tializes opcodeP
5df0: 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65  roperty[]..** Ke
5e00: 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20  ywords include: 
5e10: 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f  in1, in2, in3, o
5e20: 75 74 32 5f 70 72 65 72 65 6c 65 61 73 65 2c 20  ut2_prerelease, 
5e30: 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65  out2, out3.  See
5e40: 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65  .** the mkopcode
5e50: 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72  h.awk script for
5e60: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
5e70: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44  rmation..**.** D
5e80: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f  ocumentation abo
5e90: 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20  ut VDBE opcodes 
5ea0: 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  is generated by 
5eb0: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69  scanning this fi
5ec0: 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20  le.** for lines 
5ed0: 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20  of that contain 
5ee0: 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74  "Opcode:".  That
5ef0: 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75   line and all su
5f00: 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d  bsequent.** comm
5f10: 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73  ent lines are us
5f20: 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
5f30: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f  tion of the opco
5f40: 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74  de.html document
5f50: 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  ation.** file..*
5f60: 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a  *.** SUMMARY:.**
5f70: 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69  .**     Formatti
5f80: 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  ng is important 
5f90: 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20  to scripts that 
5fa0: 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a  scan this file..
5fb0: 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65  **     Do not de
5fc0: 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66  viate from the f
5fd0: 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20  ormatting style 
5fe0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
5ff0: 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**.***********
6000: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6040: 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  **/../* Opcode: 
6050: 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a   Goto * P2 * * *
6060: 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64  .**.** An uncond
6070: 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20  itional jump to 
6080: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54  address P2..** T
6090: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
60a0: 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c  ion executed wil
60b0: 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65  l be .** the one
60c0: 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f   at index P2 fro
60d0: 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
60e0: 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61  of.** the progra
60f0: 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  m..*/.case OP_Go
6100: 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  to: {           
6110: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 43    /* jump */.  C
6120: 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
6130: 50 54 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e  PT;.  pc = pOp->
6140: 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b  p2 - 1;.  break;
6150: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6160: 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20  Gosub P1 P2 * * 
6170: 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
6180: 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73  e current addres
6190: 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20  s onto register 
61a0: 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a  P1.** and then j
61b0: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
61c0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  2..*/.case OP_Go
61d0: 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  sub: {          
61e0: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
61f0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
6200: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
6210: 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p1<=p->nMem )
6220: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61  ;.  pIn1 = &p->a
6230: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6240: 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66  assert( (pIn1->f
6250: 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d  lags & MEM_Dyn)=
6260: 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  =0 );.  pIn1->fl
6270: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6280: 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b   pIn1->u.i = pc;
6290: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
62a0: 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29  E(pOp->p1, pIn1)
62b0: 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  ;.  pc = pOp->p2
62c0: 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   - 1;.  break;.}
62d0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65  ../* Opcode:  Re
62e0: 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  turn P1 * * * *.
62f0: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  **.** Jump to th
6300: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
6310: 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64 64  on after the add
6320: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
6330: 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
6340: 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20  Return: {       
6350: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
6360: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6370: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
6380: 0a 20 20 70 63 20 3d 20 70 49 6e 31 2d 3e 75 2e  .  pc = pIn1->u.
6390: 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  i;.  break;.}../
63a0: 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64  * Opcode:  Yield
63b0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
63c0: 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f 67 72  * Swap the progr
63d0: 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20  am counter with 
63e0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
63f0: 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ister P1..*/.cas
6400: 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 0a 20 20  e OP_Yield: {.  
6410: 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 61 73  int pcDest;.  as
6420: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
6430: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
6440: 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p1<=p->nMem );
6450: 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d  .  pIn1 = &p->aM
6460: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
6470: 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c  ssert( (pIn1->fl
6480: 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d  ags & MEM_Dyn)==
6490: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
64a0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
64b0: 70 63 44 65 73 74 20 3d 20 70 49 6e 31 2d 3e 75  pcDest = pIn1->u
64c0: 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  .i;.  pIn1->u.i 
64d0: 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52  = pc;.  REGISTER
64e0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
64f0: 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 63  pIn1);.  pc = pc
6500: 44 65 73 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Dest;.  break;.}
6510: 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48  .../* Opcode:  H
6520: 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 2a  alt P1 P2 * P4 *
6530: 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65  .**.** Exit imme
6540: 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70  diately.  All op
6550: 65 6e 20 63 75 72 73 6f 72 73 2c 20 46 69 66 6f  en cursors, Fifo
6560: 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65  s, etc are close
6570: 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c  d.** automatical
6580: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ly..**.** P1 is 
6590: 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20  the result code 
65a0: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
65b0: 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69  te3_exec(), sqli
65c0: 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20  te3_reset(),.** 
65d0: 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  or sqlite3_final
65e0: 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f  ize().  For a no
65f0: 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20  rmal halt, this 
6600: 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45  should be SQLITE
6610: 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20  _OK (0)..** For 
6620: 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62  errors, it can b
6630: 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c  e some other val
6640: 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68  ue.  If P1!=0 th
6650: 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72  en P2 will deter
6660: 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20  mine.** whether 
6670: 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61  or not to rollba
6680: 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ck the current t
6690: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20  ransaction.  Do 
66a0: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20  not rollback.** 
66b0: 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20  if P2==OE_Fail. 
66c0: 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20  Do the rollback 
66d0: 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61  if P2==OE_Rollba
66e0: 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41  ck.  If P2==OE_A
66f0: 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61  bort,.** then ba
6700: 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67  ck out all chang
6710: 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63  es that have occ
6720: 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68 69  urred during thi
6730: 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74  s execution of t
6740: 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20  he.** VDBE, but 
6750: 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  do not rollback 
6760: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  the transaction.
6770: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73   .**.** If P4 is
6780: 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69   not null then i
6790: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65  t is an error me
67a0: 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a  ssage string..**
67b0: 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20  .** There is an 
67c0: 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20  implied "Halt 0 
67d0: 30 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e  0 0" instruction
67e0: 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65   inserted at the
67f0: 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20   very end of.** 
6800: 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20  every program.  
6810: 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74  So a jump past t
6820: 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74  he last instruct
6830: 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72  ion of the progr
6840: 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d  am.** is the sam
6850: 65 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48  e as executing H
6860: 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
6870: 48 61 6c 74 3a 20 7b 0a 20 20 70 2d 3e 72 63 20  Halt: {.  p->rc 
6880: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e  = pOp->p1;.  p->
6890: 70 63 20 3d 20 70 63 3b 0a 20 20 70 2d 3e 65 72  pc = pc;.  p->er
68a0: 72 6f 72 41 63 74 69 6f 6e 20 3d 20 70 4f 70 2d  rorAction = pOp-
68b0: 3e 70 32 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  >p2;.  if( pOp->
68c0: 70 34 2e 7a 20 29 7b 0a 20 20 20 20 73 71 6c 69  p4.z ){.    sqli
68d0: 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
68e0: 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
68f0: 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  s", pOp->p4.z);.
6900: 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
6910: 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20  e3VdbeHalt(p);. 
6920: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
6930: 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d  ITE_BUSY || rc==
6940: 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 69  SQLITE_OK );.  i
6950: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
6960: 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20  SY ){.    p->rc 
6970: 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
6980: 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  SY;.  }else{.   
6990: 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51   rc = p->rc ? SQ
69a0: 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c  LITE_ERROR : SQL
69b0: 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20  ITE_DONE;.  }.  
69c0: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
69d0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
69e0: 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20  Integer P1 P2 * 
69f0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32  * *.**.** The 32
6a00: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
6a10: 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65 6e  ue P1 is written
6a20: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
6a30: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  2..*/.case OP_In
6a40: 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20  teger: {        
6a50: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
6a60: 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66  ase */.  pOut->f
6a70: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
6a80: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f    pOut->u.i = pO
6a90: 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  p->p1;.  break;.
6aa0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
6ab0: 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  t64 * P2 * P4 *.
6ac0: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
6ad0: 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69  inter to a 64-bi
6ae0: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
6af0: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
6b00: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
6b10: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
6b20: 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20  P_Int64: {      
6b30: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
6b40: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
6b50: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36  ert( pOp->p4.pI6
6b60: 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  4!=0 );.  pOut->
6b70: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
6b80: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a  .  pOut->u.i = *
6b90: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20  pOp->p4.pI64;.  
6ba0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6bb0: 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a  ode: Real * P2 *
6bc0: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
6bd0: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
6be0: 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67   64-bit floating
6bf0: 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a   point value..**
6c00: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
6c10: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
6c20: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
6c30: 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  eal: {          
6c40: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
6c50: 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72  FLOAT, out2-prer
6c60: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74  elease */.  pOut
6c70: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65  ->flags = MEM_Re
6c80: 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73  al;.  assert( !s
6c90: 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70  qlite3IsNaN(*pOp
6ca0: 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20  ->p4.pReal) );. 
6cb0: 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d   pOut->r = *pOp-
6cc0: 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65  >p4.pReal;.  bre
6cd0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6ce0: 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a  : String8 * P2 *
6cf0: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 70   P4 *.**.** P4 p
6d00: 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74  oints to a nul t
6d10: 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
6d20: 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63  string. This opc
6d30: 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d  ode is transform
6d40: 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f  ed .** into an O
6d50: 50 5f 53 74 72 69 6e 67 20 62 65 66 6f 72 65 20  P_String before 
6d60: 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20 66  it is executed f
6d70: 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69 6d  or the first tim
6d80: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  e..*/.case OP_St
6d90: 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20  ring8: {        
6da0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
6db0: 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72  TRING, out2-prer
6dc0: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
6dd0: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30  rt( pOp->p4.z!=0
6de0: 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64   );.  pOp->opcod
6df0: 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20  e = OP_String;. 
6e00: 20 70 4f 70 2d 3e 70 31 20 3d 20 73 74 72 6c 65   pOp->p1 = strle
6e10: 6e 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23  n(pOp->p4.z);..#
6e20: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
6e30: 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65  IT_UTF16.  if( e
6e40: 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f  ncoding!=SQLITE_
6e50: 55 54 46 38 20 29 7b 0a 20 20 20 20 73 71 6c 69  UTF8 ){.    sqli
6e60: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
6e70: 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a  (pOut, pOp->p4.z
6e80: 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  , -1, SQLITE_UTF
6e90: 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  8, SQLITE_STATIC
6ea0: 29 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54  );.    if( SQLIT
6eb0: 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62  E_OK!=sqlite3Vdb
6ec0: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
6ed0: 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20  pOut, encoding) 
6ee0: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
6ef0: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b     if( SQLITE_OK
6f00: 21 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  !=sqlite3VdbeMem
6f10: 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70 4f  MakeWriteable(pO
6f20: 75 74 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ut) ) goto no_me
6f30: 6d 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61  m;.    pOut->zMa
6f40: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f  lloc = 0;.    pO
6f50: 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
6f60: 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 70 4f 75  _Static;.    pOu
6f70: 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  t->flags &= ~MEM
6f80: 5f 44 79 6e 3b 0a 20 20 20 20 69 66 28 20 70 4f  _Dyn;.    if( pO
6f90: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59  p->p4type==P4_DY
6fa0: 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73  NAMIC ){.      s
6fb0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
6fc0: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
6fd0: 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79   }.    pOp->p4ty
6fe0: 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b  pe = P4_DYNAMIC;
6ff0: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d  .    pOp->p4.z =
7000: 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f   pOut->z;.    pO
7010: 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b  p->p1 = pOut->n;
7020: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  .    if( pOp->p1
7030: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
7040: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
7050: 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74   ){.      goto t
7060: 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20  oo_big;.    }.  
7070: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
7080: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 20  BSIZE(pOut);.   
7090: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
70a0: 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  if.  if( pOp->p1
70b0: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
70c0: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
70d0: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
70e0: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46  _big;.  }.  /* F
70f0: 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
7100: 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50  he next case, OP
7110: 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a  _String */.}.  .
7120: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
7130: 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  g P1 P2 * P4 *.*
7140: 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20  *.** The string 
7150: 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67  value P4 of leng
7160: 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69 73  th P1 (bytes) is
7170: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
7180: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
7190: 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20  OP_String: {    
71a0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
71b0: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
71c0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21  sert( pOp->p4.z!
71d0: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  =0 );.  pOut->fl
71e0: 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
71f0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
7200: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70  m;.  pOut->z = p
7210: 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74  Op->p4.z;.  pOut
7220: 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  ->n = pOp->p1;. 
7230: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
7240: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
7250: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
7260: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
7270: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20  /* Opcode: Null 
7280: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
7290: 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e   Write a NULL in
72a0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
72b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a  */.case OP_Null:
72c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
72d0: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
72e0: 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  */.  break;.}...
72f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
7300: 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c  MIT_BLOB_LITERAL
7310: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62  ./* Opcode: Blob
7320: 20 50 31 20 50 32 20 2a 20 50 34 0a 2a 2a 0a 2a   P1 P2 * P4.**.*
7330: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
7340: 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31   blob of data P1
7350: 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74   bytes long.  St
7360: 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62  ore this.** blob
7370: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
7380: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
7390: 6e 20 69 73 20 6e 6f 74 20 63 6f 64 65 64 20 64  n is not coded d
73a0: 69 72 65 63 74 6c 79 0a 2a 2a 20 62 79 20 74 68  irectly.** by th
73b0: 65 20 63 6f 6d 70 69 6c 65 72 2e 20 49 6e 73 74  e compiler. Inst
73c0: 65 61 64 2c 20 74 68 65 20 63 6f 6d 70 69 6c 65  ead, the compile
73d0: 72 20 6c 61 79 65 72 20 73 70 65 63 69 66 69 65  r layer specifie
73e0: 73 0a 2a 2a 20 61 6e 20 4f 50 5f 48 65 78 42 6c  s.** an OP_HexBl
73f0: 6f 62 20 6f 70 63 6f 64 65 2c 20 77 69 74 68 20  ob opcode, with 
7400: 74 68 65 20 68 65 78 20 73 74 72 69 6e 67 20 72  the hex string r
7410: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
7420: 0a 2a 2a 20 74 68 65 20 62 6c 6f 62 20 61 73 20  .** the blob as 
7430: 50 34 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  P4. This opcode 
7440: 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 74  is transformed t
7450: 6f 20 61 6e 20 4f 50 5f 42 6c 6f 62 0a 2a 2a 20  o an OP_Blob.** 
7460: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 20 69  the first time i
7470: 74 20 69 73 20 65 78 65 63 75 74 65 64 2e 0a 2a  t is executed..*
7480: 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20  /.case OP_Blob: 
7490: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
74a0: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
74b0: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
74c0: 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49   pOp->p1 <= SQLI
74d0: 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b  TE_MAX_LENGTH );
74e0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
74f0: 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f  mSetStr(pOut, pO
7500: 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31  p->p4.z, pOp->p1
7510: 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d  , 0, 0);.  pOut-
7520: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
7530: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
7540: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
7550: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
7560: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  /* SQLITE_OMIT_B
7570: 4c 4f 42 5f 4c 49 54 45 52 41 4c 20 2a 2f 0a 0a  LOB_LITERAL */..
7580: 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61  /* Opcode: Varia
7590: 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ble P1 P2 * * *.
75a0: 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
75b0: 6f 66 20 76 61 72 69 61 62 6c 65 20 50 31 20 69  of variable P1 i
75c0: 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 72  s written into r
75d0: 65 67 69 73 74 65 72 20 50 32 2e 20 41 20 76 61  egister P2. A va
75e0: 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 61 6e 20  riable is.** an 
75f0: 75 6e 6b 6e 6f 77 6e 20 69 6e 20 74 68 65 20 6f  unknown in the o
7600: 72 69 67 69 6e 61 6c 20 53 51 4c 20 73 74 72 69  riginal SQL stri
7610: 6e 67 20 61 73 20 68 61 6e 64 65 64 20 74 6f 20  ng as handed to 
7620: 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 28  sqlite3_compile(
7630: 29 2e 0a 2a 2a 20 41 6e 79 20 6f 63 63 75 72 72  )..** Any occurr
7640: 65 6e 63 65 20 6f 66 20 74 68 65 20 27 3f 27 20  ence of the '?' 
7650: 63 68 61 72 61 63 74 65 72 20 69 6e 20 74 68 65  character in the
7660: 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 20 69 73   original SQL is
7670: 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20 61   considered.** a
7680: 20 76 61 72 69 61 62 6c 65 2e 20 20 56 61 72 69   variable.  Vari
7690: 61 62 6c 65 73 20 69 6e 20 74 68 65 20 53 51 4c  ables in the SQL
76a0: 20 73 74 72 69 6e 67 20 61 72 65 20 6e 75 6d 62   string are numb
76b0: 65 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 0a  er from left to.
76c0: 2a 2a 20 72 69 67 68 74 20 62 65 67 69 6e 6e 69  ** right beginni
76d0: 6e 67 20 77 69 74 68 20 31 2e 20 20 54 68 65 20  ng with 1.  The 
76e0: 76 61 6c 75 65 73 20 6f 66 20 76 61 72 69 61 62  values of variab
76f0: 6c 65 73 20 61 72 65 20 73 65 74 20 75 73 69 6e  les are set usin
7700: 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  g the.** sqlite3
7710: 5f 62 69 6e 64 28 29 20 41 50 49 2e 0a 2a 2f 0a  _bind() API..*/.
7720: 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65  case OP_Variable
7730: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
7740: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7750: 20 2a 2f 0a 20 20 69 6e 74 20 6a 20 3d 20 70 4f   */.  int j = pO
7760: 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 4d 65 6d  p->p1 - 1;.  Mem
7770: 20 2a 70 56 61 72 3b 0a 20 20 61 73 73 65 72 74   *pVar;.  assert
7780: 28 20 6a 3e 3d 30 20 26 26 20 6a 3c 70 2d 3e 6e  ( j>=0 && j<p->n
7790: 56 61 72 20 29 3b 0a 0a 20 20 70 56 61 72 20 3d  Var );..  pVar =
77a0: 20 26 70 2d 3e 61 56 61 72 5b 6a 5d 3b 0a 20 20   &p->aVar[j];.  
77b0: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
77c0: 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29  emTooBig(pVar) )
77d0: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
77e0: 69 67 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ig;.  }.  sqlite
77f0: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
7800: 6f 70 79 28 70 4f 75 74 2c 20 26 70 2d 3e 61 56  opy(pOut, &p->aV
7810: 61 72 5b 6a 5d 2c 20 4d 45 4d 5f 53 74 61 74 69  ar[j], MEM_Stati
7820: 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  c);.  UPDATE_MAX
7830: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
7840: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7850: 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20  Opcode: Move P1 
7860: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
7870: 4d 6f 76 65 20 74 68 65 20 76 61 6c 75 65 73 20  Move the values 
7880: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e  in register P1..
7890: 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74  P1+P3-1 over int
78a0: 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50  o.** registers P
78b0: 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67  2..P2+P3-1.  Reg
78c0: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 31  isters P1..P1+P1
78d0: 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68  -1 are.** left h
78e0: 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20  olding a NULL.  
78f0: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
7900: 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67  or register rang
7910: 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d  es.** P1..P1+P3-
7920: 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d  1 and P2..P2+P3-
7930: 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f  1 to overlap..*/
7940: 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b  .case OP_Move: {
7950: 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63  .  char *zMalloc
7960: 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d  ;.  int n = pOp-
7970: 3e 70 33 3b 0a 20 20 69 6e 74 20 70 31 20 3d 20  >p3;.  int p1 = 
7980: 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e 74 20 70  pOp->p1;.  int p
7990: 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  2 = pOp->p2;.  a
79a0: 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20  ssert( n>0 );.  
79b0: 61 73 73 65 72 74 28 20 70 31 3e 30 20 29 3b 0a  assert( p1>0 );.
79c0: 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 70    assert( p1+n<p
79d0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e 31  ->nMem );.  pIn1
79e0: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 31 5d 3b   = &p->aMem[p1];
79f0: 0a 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20  .  assert( p2>0 
7a00: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 2b  );.  assert( p2+
7a10: 6e 3c 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  n<p->nMem );.  p
7a20: 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
7a30: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31  2];.  assert( p1
7a40: 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d  +n<=p2 || p2+n<=
7a50: 70 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 6e  p1 );.  while( n
7a60: 2d 2d 20 29 7b 0a 20 20 20 20 7a 4d 61 6c 6c 6f  -- ){.    zMallo
7a70: 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f  c = pOut->zMallo
7a80: 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61  c;.    pOut->zMa
7a90: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 73 71  lloc = 0;.    sq
7aa0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
7ab0: 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 20 20  (pOut, pIn1);.  
7ac0: 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20    pIn1->zMalloc 
7ad0: 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 52  = zMalloc;.    R
7ae0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32  EGISTER_TRACE(p2
7af0: 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70  ++, pOut);.    p
7b00: 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b  In1++;.    pOut+
7b10: 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  +;.  }.  break;.
7b20: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
7b30: 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  py P1 P2 * * *.*
7b40: 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79  *.** Make a copy
7b50: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
7b60: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
7b70: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
7b80: 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61  truction makes a
7b90: 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68   deep copy of th
7ba0: 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c  e value.  A dupl
7bb0: 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65  icate.** is made
7bc0: 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f   of any string o
7bd0: 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e  r blob constant.
7be0: 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43    See also OP_SC
7bf0: 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  opy..*/.case OP_
7c00: 43 6f 70 79 3a 20 7b 0a 20 20 61 73 73 65 72 74  Copy: {.  assert
7c10: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
7c20: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
7c30: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
7c40: 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  In1 = &p->aMem[p
7c50: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
7c60: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
7c70: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7c80: 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
7c90: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
7ca0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
7cb0: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
7cc0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
7cd0: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
7ce0: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
7cf0: 68 65 6d 29 3b 0a 20 20 44 65 65 70 68 65 6d 65  hem);.  Deepheme
7d00: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20  ralize(pOut);.  
7d10: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
7d20: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
7d30: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7d40: 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50  code: SCopy P1 P
7d50: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61  2 * * *.**.** Ma
7d60: 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  ke a shallow cop
7d70: 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  y of register P1
7d80: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7d90: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
7da0: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
7db0: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
7dc0: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66  f the value.  If
7dd0: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   the value.** is
7de0: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
7df0: 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79  b, then the copy
7e00: 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74   is only a point
7e10: 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69  er to the.** ori
7e20: 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20  ginal and hence 
7e30: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
7e40: 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20  changes so will 
7e50: 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72  the copy..** Wor
7e60: 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69  se, if the origi
7e70: 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74  nal is deallocat
7e80: 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63  ed, the copy bec
7e90: 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a  omes invalid..**
7ea0: 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61   Thus the progra
7eb0: 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65  m must guarantee
7ec0: 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e   that the origin
7ed0: 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e  al will not chan
7ee0: 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65  ge.** during the
7ef0: 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65   lifetime of the
7f00: 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43   copy.  Use OP_C
7f10: 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f  opy to make a co
7f20: 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a  mplete.** copy..
7f30: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79  */.case OP_SCopy
7f40: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
7f50: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73  p->p1>0 );.  ass
7f60: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  ert( pOp->p1<=p-
7f70: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e 31 20  >nMem );.  pIn1 
7f80: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
7f90: 70 31 5d 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  p1];.  REGISTER_
7fa0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
7fb0: 49 6e 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20  In1);.  assert( 
7fc0: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61  pOp->p2>0 );.  a
7fd0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
7fe0: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75  p->nMem );.  pOu
7ff0: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
8000: 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
8010: 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20   pOut!=pIn1 );. 
8020: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
8030: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
8040: 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d   pIn1, MEM_Ephem
8050: 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
8060: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
8070: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
8080: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c  /* Opcode: Resul
8090: 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a  tRow P1 P2 * * *
80a0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
80b0: 74 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20  ters P1 through 
80c0: 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20  P1+P2-1 contain 
80d0: 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a  a single row of.
80e0: 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73  ** results. This
80f0: 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74   opcode causes t
8100: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  he sqlite3_step(
8110: 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e  ) call to termin
8120: 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53  ate.** with an S
8130: 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e  QLITE_ROW return
8140: 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74   code and it set
8150: 73 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33  s up the sqlite3
8160: 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75  _stmt.** structu
8170: 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63  re to provide ac
8180: 63 65 73 73 20 74 6f 20 74 68 65 20 74 6f 70 20  cess to the top 
8190: 50 31 20 76 61 6c 75 65 73 20 61 73 20 74 68 65  P1 values as the
81a0: 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a   result.** row..
81b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c  */.case OP_Resul
81c0: 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tRow: {.  Mem *p
81d0: 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Mem;.  int i;.  
81e0: 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43  assert( p->nResC
81f0: 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29  olumn==pOp->p2 )
8200: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
8210: 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p1>0 );.  asser
8220: 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  t( pOp->p1+pOp->
8230: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 0a  p2<=p->nMem );..
8240: 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
8250: 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75  all ephemeral cu
8260: 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20  rsor row caches 
8270: 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72  */.  p->cacheCtr
8280: 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20   = (p->cacheCtr 
8290: 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61  + 2)|1;..  /* Ma
82a0: 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73 75  ke sure the resu
82b0: 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  lts of the curre
82c0: 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20  nt row are \000 
82d0: 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20  terminated.  ** 
82e0: 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73 69  and have an assi
82f0: 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65 20  gned type.  The 
8300: 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65  results are de-e
8310: 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a  phemeralized as.
8320: 20 20 2a 2a 20 61 73 20 73 69 64 65 20 65 66 66    ** as side eff
8330: 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d  ect..  */.  pMem
8340: 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74   = p->pResultSet
8350: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
8360: 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  >p1];.  for(i=0;
8370: 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29   i<pOp->p2; i++)
8380: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
8390: 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65  eMemNulTerminate
83a0: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
83b0: 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 26 70  storeTypeInfo(&p
83c0: 4d 65 6d 5b 69 5d 2c 20 65 6e 63 6f 64 69 6e 67  Mem[i], encoding
83d0: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
83e0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c  TRACE(pOp->p1+i,
83f0: 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a   &pMem[i]);.  }.
8400: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
8410: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
8420: 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75  _mem;..  /* Retu
8430: 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20  rn SQLITE_ROW.  
8440: 2a 2f 0a 20 20 70 2d 3e 6e 43 61 6c 6c 62 61 63  */.  p->nCallbac
8450: 6b 2b 2b 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70  k++;.  p->pc = p
8460: 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51  c + 1;.  rc = SQ
8470: 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f  LITE_ROW;.  goto
8480: 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a   vdbe_return;.}.
8490: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63  ./* Opcode: Conc
84a0: 61 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  at P1 P2 P3 * *.
84b0: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65  **.** Add the te
84c0: 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  xt in register P
84d0: 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f  1 onto the end o
84e0: 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a  f the text in.**
84f0: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
8500: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
8510: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
8520: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74  ..** If either t
8530: 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78 74  he P1 or P2 text
8540: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73   are NULL then s
8550: 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e  tore NULL in P3.
8560: 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32  .**.**   P3 = P2
8570: 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20   || P1.**.** It 
8580: 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50  is illegal for P
8590: 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74  1 and P3 to be t
85a0: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
85b0: 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20  . Sometimes,.** 
85c0: 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61 6d  if P3 is the sam
85d0: 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50 32  e register as P2
85e0: 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
85f0: 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20  tion is able.** 
8600: 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70  to avoid a memcp
8610: 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  y()..*/.case OP_
8620: 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20  Concat: {       
8630: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
8640: 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69  K_CONCAT, in1, i
8650: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n2, out3 */.  i6
8660: 34 20 6e 42 79 74 65 3b 0a 0a 20 20 61 73 73 65  4 nByte;..  asse
8670: 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29  rt( pIn1!=pOut )
8680: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
8690: 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61  lags | pIn2->fla
86a0: 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  gs) & MEM_Null )
86b0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
86c0: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
86d0: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
86e0: 7d 0a 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  }.  ExpandBlob(p
86f0: 49 6e 31 29 3b 0a 20 20 53 74 72 69 6e 67 69 66  In1);.  Stringif
8700: 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn1, encoding
8710: 29 3b 0a 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  );.  ExpandBlob(
8720: 70 49 6e 32 29 3b 0a 20 20 53 74 72 69 6e 67 69  pIn2);.  Stringi
8730: 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e  fy(pIn2, encodin
8740: 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49  g);.  nByte = pI
8750: 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b  n1->n + pIn2->n;
8760: 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d  .  if( nByte>db-
8770: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
8780: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
8790: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
87a0: 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79  ;.  }.  MemSetTy
87b0: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
87c0: 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 73 71 6c  _Str);.  if( sql
87d0: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
87e0: 70 4f 75 74 2c 20 6e 42 79 74 65 2b 32 2c 20 70  pOut, nByte+2, p
87f0: 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20  Out==pIn2) ){.  
8800: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
8810: 20 7d 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70   }.  if( pOut!=p
8820: 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70  In2 ){.    memcp
8830: 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d  y(pOut->z, pIn2-
8840: 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20  >z, pIn2->n);.  
8850: 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74  }.  memcpy(&pOut
8860: 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49  ->z[pIn2->n], pI
8870: 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b  n1->z, pIn1->n);
8880: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
8890: 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a  ] = 0;.  pOut->z
88a0: 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20  [nByte+1] = 0;. 
88b0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
88c0: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
88d0: 2d 3e 6e 20 3d 20 6e 42 79 74 65 3b 0a 20 20 70  ->n = nByte;.  p
88e0: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
88f0: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
8900: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
8910: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
8920: 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20   Opcode: Add P1 
8930: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
8940: 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  Add the value in
8950: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
8960: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
8970: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
8980: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
8990: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
89a0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
89b0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
89c0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
89d0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .*/./* Opcode: M
89e0: 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33  ultiply P1 P2 P3
89f0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75   * *.**.**.** Mu
8a00: 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65  ltiply the value
8a10: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
8a20: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
8a30: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
8a40: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
8a50: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
8a60: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
8a70: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
8a80: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
8a90: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
8aa0: 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32  : Subtract P1 P2
8ab0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 75   P3 * *.**.** Su
8ac0: 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65  btract the value
8ad0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
8ae0: 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69  from the value i
8af0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
8b00: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
8b10: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
8b20: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
8b30: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
8b40: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
8b50: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
8b60: 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32  de: Divide P1 P2
8b70: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 69   P3 * *.**.** Di
8b80: 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69  vide the value i
8b90: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
8ba0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
8bb0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
8bc0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
8bd0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
8be0: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  .  If the value 
8bf0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
8c00: 2a 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  * is zero, then 
8c10: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
8c20: 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  LL..** If either
8c30: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
8c40: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
8c50: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
8c60: 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50  : Remainder P1 P
8c70: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
8c80: 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69  ompute the remai
8c90: 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67  nder after integ
8ca0: 65 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74  er division of t
8cb0: 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72  he value in.** r
8cc0: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
8cd0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
8ce0: 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65  ter P2 and store
8cf0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50   the result in P
8d00: 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  3. .** If the va
8d10: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
8d20: 50 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72  P2 is zero the r
8d30: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
8d40: 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72  * If either oper
8d50: 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  and is NULL, the
8d60: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
8d70: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a  .*/.case OP_Add:
8d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d90: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
8da0: 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  _PLUS, in1, in2,
8db0: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
8dc0: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20  _Subtract:      
8dd0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
8de0: 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31  as TK_MINUS, in1
8df0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
8e00: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
8e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8e20: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52   same as TK_STAR
8e30: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
8e40: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69   */.case OP_Divi
8e50: 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  de:             
8e60: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
8e70: 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32  _SLASH, in1, in2
8e80: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
8e90: 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20  P_Remainder: {  
8ea0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
8eb0: 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c   as TK_REM, in1,
8ec0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
8ed0: 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 61 70 70  int flags;.  app
8ee0: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
8ef0: 79 28 70 49 6e 31 29 3b 0a 20 20 61 70 70 6c 79  y(pIn1);.  apply
8f00: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
8f10: 70 49 6e 32 29 3b 0a 20 20 66 6c 61 67 73 20 3d  pIn2);.  flags =
8f20: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70   pIn1->flags | p
8f30: 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66  In2->flags;.  if
8f40: 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  ( (flags & MEM_N
8f50: 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61  ull)!=0 ) goto a
8f60: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
8f70: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20  _is_null;.  if( 
8f80: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70  (pIn1->flags & p
8f90: 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
8fa0: 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29  _Int)==MEM_Int )
8fb0: 7b 0a 20 20 20 20 69 36 34 20 61 2c 20 62 3b 0a  {.    i64 a, b;.
8fc0: 20 20 20 20 61 20 3d 20 70 49 6e 31 2d 3e 75 2e      a = pIn1->u.
8fd0: 69 3b 0a 20 20 20 20 62 20 3d 20 70 49 6e 32 2d  i;.    b = pIn2-
8fe0: 3e 75 2e 69 3b 0a 20 20 20 20 73 77 69 74 63 68  >u.i;.    switch
8ff0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
9000: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
9010: 64 64 3a 20 20 20 20 20 20 20 20 20 62 20 2b 3d  dd:         b +=
9020: 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b   a;       break;
9030: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53  .      case OP_S
9040: 75 62 74 72 61 63 74 3a 20 20 20 20 62 20 2d 3d  ubtract:    b -=
9050: 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b   a;       break;
9060: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d  .      case OP_M
9070: 75 6c 74 69 70 6c 79 3a 20 20 20 20 62 20 2a 3d  ultiply:    b *=
9080: 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b   a;       break;
9090: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
90a0: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
90b0: 20 69 66 28 20 61 3d 3d 30 20 29 20 67 6f 74 6f   if( a==0 ) goto
90c0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
90d0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
90e0: 20 20 20 20 2f 2a 20 44 69 76 69 64 69 6e 67 20      /* Dividing 
90f0: 74 68 65 20 6c 61 72 67 65 73 74 20 70 6f 73 73  the largest poss
9100: 69 62 6c 65 20 6e 65 67 61 74 69 76 65 20 36 34  ible negative 64
9110: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 28 31 3c  -bit integer (1<
9120: 3c 36 33 29 20 62 79 20 0a 20 20 20 20 20 20 20  <63) by .       
9130: 20 2a 2a 20 2d 31 20 72 65 74 75 72 6e 73 20 61   ** -1 returns a
9140: 6e 20 69 6e 74 65 67 65 72 20 74 6f 6f 20 6c 61  n integer too la
9150: 72 67 65 20 74 6f 20 73 74 6f 72 65 20 69 6e 20  rge to store in 
9160: 61 20 36 34 2d 62 69 74 20 64 61 74 61 2d 74 79  a 64-bit data-ty
9170: 70 65 2e 20 4f 6e 0a 20 20 20 20 20 20 20 20 2a  pe. On.        *
9180: 2a 20 73 6f 6d 65 20 61 72 63 68 69 74 65 63 74  * some architect
9190: 75 72 65 73 2c 20 74 68 65 20 76 61 6c 75 65 20  ures, the value 
91a0: 6f 76 65 72 66 6c 6f 77 73 20 74 6f 20 28 31 3c  overflows to (1<
91b0: 3c 36 33 29 2e 20 4f 6e 20 6f 74 68 65 72 73 2c  <63). On others,
91c0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 20 53 49  .        ** a SI
91d0: 47 46 50 45 20 69 73 20 69 73 73 75 65 64 2e 20  GFPE is issued. 
91e0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  The following st
91f0: 61 74 65 6d 65 6e 74 20 6e 6f 72 6d 61 6c 69 7a  atement normaliz
9200: 65 73 20 74 68 69 73 0a 20 20 20 20 20 20 20 20  es this.        
9210: 2a 2a 20 62 65 68 61 76 69 6f 72 20 73 6f 20 74  ** behavior so t
9220: 68 61 74 20 61 6c 6c 20 61 72 63 68 69 74 65 63  hat all architec
9230: 74 75 72 65 73 20 62 65 68 61 76 65 20 61 73 20  tures behave as 
9240: 69 66 20 69 6e 74 65 67 65 72 20 0a 20 20 20 20  if integer .    
9250: 20 20 20 20 2a 2a 20 6f 76 65 72 66 6c 6f 77 20      ** overflow 
9260: 6f 63 63 75 72 72 65 64 2e 0a 20 20 20 20 20 20  occurred..      
9270: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28    */.        if(
9280: 20 61 3d 3d 2d 31 20 26 26 20 62 3d 3d 53 4d 41   a==-1 && b==SMA
9290: 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 61 20  LLEST_INT64 ) a 
92a0: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 20 2f  = 1;.        b /
92b0: 3d 20 61 3b 0a 20 20 20 20 20 20 20 20 62 72 65  = a;.        bre
92c0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
92d0: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
92e0: 20 20 20 20 20 69 66 28 20 61 3d 3d 30 20 29 20       if( a==0 ) 
92f0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
9300: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
9310: 20 20 20 20 20 20 20 20 69 66 28 20 61 3d 3d 2d          if( a==-
9320: 31 20 29 20 61 20 3d 20 31 3b 0a 20 20 20 20 20  1 ) a = 1;.     
9330: 20 20 20 62 20 25 3d 20 61 3b 0a 20 20 20 20 20     b %= a;.     
9340: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
9350: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  }.    }.    pOut
9360: 2d 3e 75 2e 69 20 3d 20 62 3b 0a 20 20 20 20 4d  ->u.i = b;.    M
9370: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
9380: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
9390: 7d 65 6c 73 65 7b 0a 20 20 20 20 64 6f 75 62 6c  }else{.    doubl
93a0: 65 20 61 2c 20 62 3b 0a 20 20 20 20 61 20 3d 20  e a, b;.    a = 
93b0: 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
93c0: 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20  alue(pIn1);.    
93d0: 62 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  b = sqlite3VdbeR
93e0: 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  ealValue(pIn2);.
93f0: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
9400: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
9410: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
9420: 20 20 20 20 20 20 62 20 2b 3d 20 61 3b 20 20 20        b += a;   
9430: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9440: 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63   case OP_Subtrac
9450: 74 3a 20 20 20 20 62 20 2d 3d 20 61 3b 20 20 20  t:    b -= a;   
9460: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9470: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
9480: 79 3a 20 20 20 20 62 20 2a 3d 20 61 3b 20 20 20  y:    b *= a;   
9490: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
94a0: 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a   case OP_Divide:
94b0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61   {.        if( a
94c0: 3d 3d 30 2e 30 20 29 20 67 6f 74 6f 20 61 72 69  ==0.0 ) goto ari
94d0: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
94e0: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
94f0: 62 20 2f 3d 20 61 3b 0a 20 20 20 20 20 20 20 20  b /= a;.        
9500: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
9510: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
9520: 20 20 20 20 20 20 20 20 69 36 34 20 69 61 20 3d          i64 ia =
9530: 20 28 69 36 34 29 61 3b 0a 20 20 20 20 20 20 20   (i64)a;.       
9540: 20 69 36 34 20 69 62 20 3d 20 28 69 36 34 29 62   i64 ib = (i64)b
9550: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 61  ;.        if( ia
9560: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
9570: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
9580: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
9590: 28 20 69 61 3d 3d 2d 31 20 29 20 69 61 20 3d 20  ( ia==-1 ) ia = 
95a0: 31 3b 0a 20 20 20 20 20 20 20 20 62 20 3d 20 69  1;.        b = i
95b0: 62 20 25 20 69 61 3b 0a 20 20 20 20 20 20 20 20  b % ia;.        
95c0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
95d0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c     }.    if( sql
95e0: 69 74 65 33 49 73 4e 61 4e 28 62 29 20 29 7b 0a  ite3IsNaN(b) ){.
95f0: 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68        goto arith
9600: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
9610: 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20  null;.    }.    
9620: 70 4f 75 74 2d 3e 72 20 3d 20 62 3b 0a 20 20 20  pOut->r = b;.   
9630: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
9640: 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b  pOut, MEM_Real);
9650: 0a 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 20  .    if( (flags 
9660: 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29  & MEM_Real)==0 )
9670: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
9680: 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69  dbeIntegerAffini
9690: 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a  ty(pOut);.    }.
96a0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72    }.  break;..ar
96b0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
96c0: 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74  is_null:.  sqlit
96d0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
96e0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
96f0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
9700: 6f 6c 6c 53 65 71 20 2a 20 2a 20 50 34 0a 2a 2a  ollSeq * * P4.**
9710: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
9720: 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71  ter to a CollSeq
9730: 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65 20   struct. If the 
9740: 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75  next call to a u
9750: 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20  ser function.** 
9760: 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c  or aggregate cal
9770: 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  ls sqlite3GetFun
9780: 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73  cCollSeq(), this
9790: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
97a0: 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72  nce will.** be r
97b0: 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73  eturned. This is
97c0: 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69   used by the bui
97d0: 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78  lt-in min(), max
97e0: 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a  () and nullif().
97f0: 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  ** functions..**
9800: 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
9810: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69 6d  e used by the im
9820: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
9830: 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e  the aforemention
9840: 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20  ed functions.** 
9850: 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20  to retrieve the 
9860: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
9870: 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20 6f  ce set by this o
9880: 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61  pcode is not ava
9890: 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63  ilable.** public
98a0: 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65 72  ly, only to user
98b0: 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e   functions defin
98c0: 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f  ed in func.c..*/
98d0: 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71  .case OP_CollSeq
98e0: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
98f0: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
9900: 4c 4c 53 45 51 20 29 3b 0a 20 20 62 72 65 61 6b  LLSEQ );.  break
9910: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9920: 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20 50  Function P1 P2 P
9930: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e  3 P4 P5.**.** In
9940: 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63  voke a user func
9950: 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f  tion (P4 is a po
9960: 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63 74  inter to a Funct
9970: 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20 74 68  ion structure th
9980: 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74 68  at.** defines th
9990: 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74 68  e function) with
99a0: 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61   P5 arguments ta
99b0: 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
99c0: 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63  r P2 and.** succ
99d0: 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73  essors.  The res
99e0: 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
99f0: 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ion is stored in
9a00: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
9a10: 20 52 65 67 69 73 74 65 72 20 50 33 20 6d 75 73   Register P3 mus
9a20: 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20  t not be one of 
9a30: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70  the function inp
9a40: 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  uts..**.** P1 is
9a50: 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73   a 32-bit bitmas
9a60: 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65  k indicating whe
9a70: 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68  ther or not each
9a80: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
9a90: 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61   .** function wa
9aa0: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20  s determined to 
9ab0: 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63  be constant at c
9ac0: 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20  ompile time. If 
9ad0: 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67  the first.** arg
9ae0: 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61  ument was consta
9af0: 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66  nt then bit 0 of
9b00: 20 50 31 20 69 73 20 73 65 74 2e 20 54 68 69 73   P1 is set. This
9b10: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
9b20: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
9b30: 20 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f 63   meta data assoc
9b40: 69 61 74 65 64 20 77 69 74 68 20 61 20 75 73 65  iated with a use
9b50: 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  r function argum
9b60: 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ent using the.**
9b70: 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78   sqlite3_set_aux
9b80: 64 61 74 61 28 29 20 41 50 49 20 6d 61 79 20 62  data() API may b
9b90: 65 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65  e safely retaine
9ba0: 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74  d until the next
9bb0: 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  .** invocation o
9bc0: 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  f this opcode..*
9bd0: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 41  *.** See also: A
9be0: 67 67 53 74 65 70 20 61 6e 64 20 41 67 67 46 69  ggStep and AggFi
9bf0: 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  nal.*/.case OP_F
9c00: 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74  unction: {.  int
9c10: 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 3b   i;.  Mem *pArg;
9c20: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
9c30: 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65  xt ctx;.  sqlite
9c40: 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b  3_value **apVal;
9c50: 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e  .  int n = pOp->
9c60: 70 35 3b 0a 0a 20 20 61 70 56 61 6c 20 3d 20 70  p5;..  apVal = p
9c70: 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72  ->apArg;.  asser
9c80: 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30  t( apVal || n==0
9c90: 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e   );..  assert( n
9ca0: 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e  ==0 || (pOp->p2>
9cb0: 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d  0 && pOp->p2+n<=
9cc0: 70 2d 3e 6e 4d 65 6d 29 20 29 3b 0a 20 20 61 73  p->nMem) );.  as
9cd0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
9ce0: 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p2 || pOp->p3
9cf0: 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20  >=pOp->p2+n );. 
9d00: 20 70 41 72 67 20 3d 20 26 70 2d 3e 61 4d 65 6d   pArg = &p->aMem
9d10: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72  [pOp->p2];.  for
9d20: 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20  (i=0; i<n; i++, 
9d30: 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61 70 56  pArg++){.    apV
9d40: 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20 20  al[i] = pArg;.  
9d50: 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28    storeTypeInfo(
9d60: 70 41 72 67 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pArg, encoding);
9d70: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
9d80: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 41 72  ACE(pOp->p2, pAr
9d90: 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  g);.  }..  asser
9da0: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
9db0: 50 34 5f 46 55 4e 43 44 45 46 20 7c 7c 20 70 4f  P4_FUNCDEF || pO
9dc0: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 44  p->p4type==P4_VD
9dd0: 42 45 46 55 4e 43 20 29 3b 0a 20 20 69 66 28 20  BEFUNC );.  if( 
9de0: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
9df0: 46 55 4e 43 44 45 46 20 29 7b 0a 20 20 20 20 63  FUNCDEF ){.    c
9e00: 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e  tx.pFunc = pOp->
9e10: 70 34 2e 70 46 75 6e 63 3b 0a 20 20 20 20 63 74  p4.pFunc;.    ct
9e20: 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 30 3b  x.pVdbeFunc = 0;
9e30: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 74  .  }else{.    ct
9e40: 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 28 56  x.pVdbeFunc = (V
9e50: 64 62 65 46 75 6e 63 2a 29 70 4f 70 2d 3e 70 34  dbeFunc*)pOp->p4
9e60: 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20 20 20  .pVdbeFunc;.    
9e70: 63 74 78 2e 70 46 75 6e 63 20 3d 20 63 74 78 2e  ctx.pFunc = ctx.
9e80: 70 56 64 62 65 46 75 6e 63 2d 3e 70 46 75 6e 63  pVdbeFunc->pFunc
9e90: 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28  ;.  }..  assert(
9ea0: 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
9eb0: 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
9ec0: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61  ;.  pOut = &p->a
9ed0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
9ee0: 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45  ctx.s.flags = ME
9ef0: 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e  M_Null;.  ctx.s.
9f00: 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 73  db = db;.  ctx.s
9f10: 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78  .xDel = 0;.  ctx
9f20: 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  .s.zMalloc = 0;.
9f30: 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74  .  /* The output
9f40: 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64   cell may alread
9f50: 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20  y have a buffer 
9f60: 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a  allocated. Move.
9f70: 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65 72    ** the pointer
9f80: 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e 20   to ctx.s so in 
9f90: 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75  case the user-fu
9fa0: 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a 20  nction can use. 
9fb0: 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79 20   ** the already 
9fc0: 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72  allocated buffer
9fd0: 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f   instead of allo
9fe0: 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e 65  cating a new one
9ff0: 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
a000: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74 78  VdbeMemMove(&ctx
a010: 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65 6d  .s, pOut);.  Mem
a020: 53 65 74 54 79 70 65 46 6c 61 67 28 26 63 74 78  SetTypeFlag(&ctx
a030: 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a  .s, MEM_Null);..
a040: 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20    ctx.isError = 
a050: 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75  0;.  if( ctx.pFu
a060: 6e 63 2d 3e 6e 65 65 64 43 6f 6c 6c 53 65 71 20  nc->needCollSeq 
a070: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
a080: 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20  Op>p->aOp );.   
a090: 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
a0a0: 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  .p4type==P4_COLL
a0b0: 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72  SEQ );.    asser
a0c0: 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64  t( pOp[-1].opcod
a0d0: 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b  e==OP_CollSeq );
a0e0: 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d  .    ctx.pColl =
a0f0: 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c   pOp[-1].p4.pCol
a100: 6c 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  l;.  }.  if( sql
a110: 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
a120: 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
a130: 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
a140: 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75  (*ctx.pFunc->xFu
a150: 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56  nc)(&ctx, n, apV
a160: 61 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  al);.  if( sqlit
a170: 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
a180: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
a190: 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78  eMemRelease(&ctx
a1a0: 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  .s);.    goto ab
a1b0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
a1c0: 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d  e;.  }.  if( db-
a1d0: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b  >mallocFailed ){
a1e0: 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f  .    /* Even tho
a1f0: 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68  ugh a malloc() h
a200: 61 73 20 66 61 69 6c 65 64 2c 20 74 68 65 20 69  as failed, the i
a210: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
a220: 20 74 68 65 0a 20 20 20 20 2a 2a 20 75 73 65 72   the.    ** user
a230: 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61   function may ha
a240: 76 65 20 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c  ve called an sql
a250: 69 74 65 33 5f 72 65 73 75 6c 74 5f 58 58 58 28  ite3_result_XXX(
a260: 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a  ) function.    *
a270: 2a 20 74 6f 20 72 65 74 75 72 6e 20 61 20 76 61  * to return a va
a280: 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69  lue. The followi
a290: 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61 73 65 73  ng call releases
a2a0: 20 61 6e 79 20 72 65 73 6f 75 72 63 65 73 0a 20   any resources. 
a2b0: 20 20 20 2a 2a 20 61 73 73 6f 63 69 61 74 65 64     ** associated
a2c0: 20 77 69 74 68 20 73 75 63 68 20 61 20 76 61 6c   with such a val
a2d0: 75 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  ue..    **.    *
a2e0: 2a 20 4e 6f 74 65 3a 20 4d 61 79 62 65 20 4d 65  * Note: Maybe Me
a2f0: 6d 52 65 6c 65 61 73 65 28 29 20 73 68 6f 75 6c  mRelease() shoul
a300: 64 20 62 65 20 63 61 6c 6c 65 64 20 69 66 20 73  d be called if s
a310: 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 29  qlite3SafetyOn()
a320: 0a 20 20 20 20 2a 2a 20 66 61 69 6c 73 20 61 6c  .    ** fails al
a330: 73 6f 20 28 74 68 65 20 69 66 28 2e 2e 2e 29 20  so (the if(...) 
a340: 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 29  statement above)
a350: 2e 20 42 75 74 20 69 66 20 70 65 6f 70 6c 65 20  . But if people 
a360: 61 72 65 0a 20 20 20 20 2a 2a 20 6d 69 73 75 73  are.    ** misus
a370: 69 6e 67 20 73 71 6c 69 74 65 2c 20 74 68 65 79  ing sqlite, they
a380: 20 68 61 76 65 20 62 69 67 67 65 72 20 70 72 6f   have bigger pro
a390: 62 6c 65 6d 73 20 74 68 61 6e 20 61 20 6c 65 61  blems than a lea
a3a0: 6b 65 64 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a  ked value..    *
a3b0: 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
a3c0: 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78  eMemRelease(&ctx
a3d0: 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  .s);.    goto no
a3e0: 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _mem;.  }..  /* 
a3f0: 49 66 20 61 6e 79 20 61 75 78 69 6c 69 61 72 79  If any auxiliary
a400: 20 64 61 74 61 20 66 75 6e 63 74 69 6f 6e 73 20   data functions 
a410: 68 61 76 65 20 62 65 65 6e 20 63 61 6c 6c 65 64  have been called
a420: 20 62 79 20 74 68 69 73 20 75 73 65 72 20 66 75   by this user fu
a430: 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20 69 6d 6d  nction,.  ** imm
a440: 65 64 69 61 74 65 6c 79 20 63 61 6c 6c 20 74 68  ediately call th
a450: 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 6f 72  e destructor for
a460: 20 61 6e 79 20 6e 6f 6e 2d 73 74 61 74 69 63 20   any non-static 
a470: 76 61 6c 75 65 73 2e 0a 20 20 2a 2f 0a 20 20 69  values..  */.  i
a480: 66 28 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63  f( ctx.pVdbeFunc
a490: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
a4a0: 64 62 65 44 65 6c 65 74 65 41 75 78 44 61 74 61  dbeDeleteAuxData
a4b0: 28 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2c 20  (ctx.pVdbeFunc, 
a4c0: 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 70 4f  pOp->p1);.    pO
a4d0: 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63 20  p->p4.pVdbeFunc 
a4e0: 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 3b  = ctx.pVdbeFunc;
a4f0: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65  .    pOp->p4type
a500: 20 3d 20 50 34 5f 56 44 42 45 46 55 4e 43 3b 0a   = P4_VDBEFUNC;.
a510: 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65    }..  /* If the
a520: 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
a530: 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72  ed an error, thr
a540: 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  ow an exception 
a550: 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45  */.  if( ctx.isE
a560: 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  rror ){.    sqli
a570: 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
a580: 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
a590: 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
a5a0: 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b  e_text(&ctx.s));
a5b0: 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73  .    rc = ctx.is
a5c0: 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  Error;.  }..  /*
a5d0: 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74   Copy the result
a5e0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
a5f0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
a600: 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  3 */.  sqlite3Vd
a610: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
a620: 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e  (&ctx.s, encodin
a630: 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  g);.  sqlite3Vdb
a640: 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 26  eMemMove(pOut, &
a650: 63 74 78 2e 73 29 3b 0a 20 20 69 66 28 20 73 71  ctx.s);.  if( sq
a660: 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
a670: 69 67 28 70 4f 75 74 29 20 29 7b 0a 20 20 20 20  ig(pOut) ){.    
a680: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
a690: 7d 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  }.  REGISTER_TRA
a6a0: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74  CE(pOp->p3, pOut
a6b0: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
a6c0: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
a6d0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
a6e0: 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31  pcode: BitAnd P1
a6f0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
a700: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
a710: 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  se AND of the va
a720: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
a730: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
a740: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
a750: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
a760: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
a770: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
a780: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
a790: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
a7a0: 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20   BitOr P1 P2 P3 
a7b0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  * *.**.** Take t
a7c0: 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f  he bit-wise OR o
a7d0: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
a7e0: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
a7f0: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
a800: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
a810: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
a820: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
a830: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
a840: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
a850: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65   Opcode: ShiftLe
a860: 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ft P1 P2 P3 * *.
a870: 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20  **.** Shift the 
a880: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
a890: 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
a8a0: 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a  the left by the.
a8b0: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
a8c0: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
a8d0: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
a8e0: 67 69 73 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  giser P1..** Sto
a8f0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
a900: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
a910: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
a920: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
a930: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
a940: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
a950: 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20  tRight P1 P2 P3 
a960: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  * *.**.** Shift 
a970: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
a980: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
a990: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79   to the right by
a9a0: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
a9b0: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
a9c0: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
a9d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
a9e0: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
a9f0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
aa00: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
aa10: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
aa20: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
aa30: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  LL..*/.case OP_B
aa40: 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  itAnd:          
aa50: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
aa60: 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31  s TK_BITAND, in1
aa70: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
aa80: 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20  ase OP_BitOr:   
aa90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
aaa0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
aab0: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
aac0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
aad0: 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20  iftLeft:        
aae0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
aaf0: 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c   TK_LSHIFT, in1,
ab00: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
ab10: 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  se OP_ShiftRight
ab20: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
ab30: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49   same as TK_RSHI
ab40: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
ab50: 74 33 20 2a 2f 0a 20 20 69 36 34 20 61 2c 20 62  t3 */.  i64 a, b
ab60: 3b 0a 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ;..  if( (pIn1->
ab70: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
ab80: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
ab90: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
aba0: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
abb0: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
abc0: 20 7d 0a 20 20 61 20 3d 20 73 71 6c 69 74 65 33   }.  a = sqlite3
abd0: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
abe0: 32 29 3b 0a 20 20 62 20 3d 20 73 71 6c 69 74 65  2);.  b = sqlite
abf0: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
ac00: 6e 31 29 3b 0a 20 20 73 77 69 74 63 68 28 20 70  n1);.  switch( p
ac10: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
ac20: 20 20 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64    case OP_BitAnd
ac30: 3a 20 20 20 20 20 20 61 20 26 3d 20 62 3b 20 20  :      a &= b;  
ac40: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
ac50: 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20  se OP_BitOr:    
ac60: 20 20 20 61 20 7c 3d 20 62 3b 20 20 20 20 20 62     a |= b;     b
ac70: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
ac80: 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 61  P_ShiftLeft:   a
ac90: 20 3c 3c 3d 20 62 3b 20 20 20 20 62 72 65 61 6b   <<= b;    break
aca0: 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20  ;.    default:  
acb0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
acc0: 6f 64 65 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67  ode==OP_ShiftRig
acd0: 68 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ht );.          
ace0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
acf0: 20 3e 3e 3d 20 62 3b 20 20 20 20 62 72 65 61 6b   >>= b;    break
ad00: 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
ad10: 69 20 3d 20 61 3b 0a 20 20 4d 65 6d 53 65 74 54  i = a;.  MemSetT
ad20: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
ad30: 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b  M_Int);.  break;
ad40: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
ad50: 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a  ddImm  P1 P2 * *
ad60: 20 2a 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68   *.** .** Add th
ad70: 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f  e constant P2 to
ad80: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
ad90: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68  gister P1..** Th
ada0: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61  e result is alwa
adb0: 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ys an integer..*
adc0: 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e  *.** To force an
add0: 79 20 72 65 67 69 73 74 65 72 20 74 6f 20 62 65  y register to be
ade0: 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73   an integer, jus
adf0: 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65  t add 0..*/.case
ae00: 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20   OP_AddImm: {   
ae10: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
ae20: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
ae30: 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
ae40: 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  n1);.  pIn1->u.i
ae50: 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62   += pOp->p2;.  b
ae60: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
ae70: 64 65 3a 20 46 6f 72 63 65 49 6e 74 20 50 31 20  de: ForceInt P1 
ae80: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
ae90: 43 6f 6e 76 65 72 74 20 76 61 6c 75 65 20 69 6e  Convert value in
aea0: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74   register P1 int
aeb0: 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  o an integer.  I
aec0: 66 20 74 68 65 20 76 61 6c 75 65 20 0a 2a 2a 20  f the value .** 
aed0: 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 6e 75 6d  in P1 is not num
aee0: 65 72 69 63 20 28 6d 65 61 6e 69 6e 67 20 74 68  eric (meaning th
aef0: 61 74 20 69 73 20 69 73 20 61 20 4e 55 4c 4c 20  at is is a NULL 
af00: 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  or a string that
af10: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f  .** does not loo
af20: 6b 20 6c 69 6b 65 20 61 6e 20 69 6e 74 65 67 65  k like an intege
af30: 72 20 6f 72 20 66 6c 6f 61 74 69 6e 67 20 70 6f  r or floating po
af40: 69 6e 74 20 6e 75 6d 62 65 72 29 20 74 68 65 6e  int number) then
af50: 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  .** jump to P2. 
af60: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
af70: 20 50 31 20 69 73 20 6e 75 6d 65 72 69 63 20 74   P1 is numeric t
af80: 68 65 6e 0a 2a 2a 20 63 6f 6e 76 65 72 74 20 69  hen.** convert i
af90: 74 20 69 6e 74 6f 20 74 68 65 20 6c 65 61 73 74  t into the least
afa0: 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73   integer that is
afb0: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
afc0: 20 65 71 75 61 6c 20 74 6f 20 69 74 73 0a 2a 2a   equal to its.**
afd0: 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 69   current value i
afe0: 66 20 50 33 3d 3d 30 2c 20 6f 72 20 74 6f 20 74  f P3==0, or to t
aff0: 68 65 20 6c 65 61 73 74 20 69 6e 74 65 67 65 72  he least integer
b000: 20 74 68 61 74 20 69 73 20 73 74 72 69 63 74 6c   that is strictl
b010: 79 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61  y.** greater tha
b020: 6e 20 69 74 73 20 63 75 72 72 65 6e 74 20 76 61  n its current va
b030: 6c 75 65 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2f  lue if P3==1..*/
b040: 0a 63 61 73 65 20 4f 50 5f 46 6f 72 63 65 49 6e  .case OP_ForceIn
b050: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
b060: 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
b070: 20 20 69 36 34 20 76 3b 0a 20 20 61 70 70 6c 79    i64 v;.  apply
b080: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53  Affinity(pIn1, S
b090: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
b0a0: 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  C, encoding);.  
b0b0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
b0c0: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
b0d0: 52 65 61 6c 29 29 3d 3d 30 20 29 7b 0a 20 20 20  Real))==0 ){.   
b0e0: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
b0f0: 31 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  1;.    break;.  
b100: 7d 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  }.  if( pIn1->fl
b110: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b  ags & MEM_Int ){
b120: 0a 20 20 20 20 76 20 3d 20 70 49 6e 31 2d 3e 75  .    v = pIn1->u
b130: 2e 69 20 2b 20 28 70 4f 70 2d 3e 70 33 21 3d 30  .i + (pOp->p3!=0
b140: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
b150: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
b160: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
b170: 3b 0a 20 20 20 20 76 20 3d 20 28 73 71 6c 69 74  ;.    v = (sqlit
b180: 65 33 5f 69 6e 74 36 34 29 70 49 6e 31 2d 3e 72  e3_int64)pIn1->r
b190: 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 31 2d 3e  ;.    if( pIn1->
b1a0: 72 3e 28 64 6f 75 62 6c 65 29 76 20 29 20 76 2b  r>(double)v ) v+
b1b0: 2b 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  +;.    if( pOp->
b1c0: 70 33 20 26 26 20 70 49 6e 31 2d 3e 72 3d 3d 28  p3 && pIn1->r==(
b1d0: 64 6f 75 62 6c 65 29 76 20 29 20 76 2b 2b 3b 0a  double)v ) v++;.
b1e0: 20 20 7d 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20    }.  pIn1->u.i 
b1f0: 3d 20 76 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  = v;.  MemSetTyp
b200: 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f  eFlag(pIn1, MEM_
b210: 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Int);.  break;.}
b220: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73  ../* Opcode: Mus
b230: 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a  tBeInt P1 P2 * *
b240: 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20   *.** .** Force 
b250: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
b260: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
b270: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74  n integer.  If t
b280: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
b290: 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  1 is not an inte
b2a0: 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62  ger and cannot b
b2b0: 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
b2c0: 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77   an integer.** w
b2d0: 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73  ithout data loss
b2e0: 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
b2f0: 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f  diately to P2, o
b300: 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61  r if P2==0.** ra
b310: 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  ise an SQLITE_MI
b320: 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e  SMATCH exception
b330: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73  ..*/.case OP_Mus
b340: 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  tBeInt: {       
b350: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
b360: 31 20 2a 2f 0a 20 20 61 70 70 6c 79 41 66 66 69  1 */.  applyAffi
b370: 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54  nity(pIn1, SQLIT
b380: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65  E_AFF_NUMERIC, e
b390: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20  ncoding);.  if( 
b3a0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
b3b0: 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  EM_Int)==0 ){.  
b3c0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30    if( pOp->p2==0
b3d0: 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
b3e0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a  QLITE_MISMATCH;.
b3f0: 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
b400: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
b410: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
b420: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
b430: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
b440: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
b450: 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e  lag(pIn1, MEM_In
b460: 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  t);.  }.  break;
b470: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
b480: 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a  ealAffinity P1 *
b490: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20   * * *.**.** If 
b4a0: 72 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64  register P1 hold
b4b0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e  s an integer con
b4c0: 76 65 72 74 20 69 74 20 74 6f 20 61 20 72 65 61  vert it to a rea
b4d0: 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54  l value..**.** T
b4e0: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
b4f0: 65 64 20 77 68 65 6e 20 65 78 74 72 61 63 74 69  ed when extracti
b500: 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ng information f
b510: 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61  rom a column tha
b520: 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66  t.** has REAL af
b530: 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f  finity.  Such co
b540: 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20  lumn values may 
b550: 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20  still be stored 
b560: 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20  as.** integers, 
b570: 66 6f 72 20 73 70 61 63 65 20 65 66 66 69 63 69  for space effici
b580: 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72 20  ency, but after 
b590: 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61  extraction we wa
b5a0: 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61  nt them.** to ha
b5b0: 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76  ve only a real v
b5c0: 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  alue..*/.case OP
b5d0: 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b  _RealAffinity: {
b5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5f0: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69 66    /* in1 */.  if
b600: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
b610: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73  MEM_Int ){.    s
b620: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61  qlite3VdbeMemRea
b630: 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  lify(pIn1);.  }.
b640: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
b650: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
b660: 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  CAST./* Opcode: 
b670: 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20 2a 20  ToText P1 * * * 
b680: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
b690: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b6a0: 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 65 78  ter P1 to be tex
b6b0: 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  t..** If the val
b6c0: 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63  ue is numeric, c
b6d0: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73  onvert it to a s
b6e0: 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68 65 0a  tring using the.
b6f0: 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66  ** equivalent of
b700: 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f 62   printf().  Blob
b710: 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e 63 68   values are unch
b720: 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72 65  anged and.** are
b730: 20 61 66 74 65 72 77 61 72 64 73 20 73 69 6d 70   afterwards simp
b740: 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  ly interpreted a
b750: 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20  s text..**.** A 
b760: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
b770: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
b780: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
b790: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
b7a0: 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a 20  case OP_ToText: 
b7b0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
b7c0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
b7d0: 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20 2a 2f  _TO_TEXT, in1 */
b7e0: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
b7f0: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20  gs & MEM_Null ) 
b800: 62 72 65 61 6b 3b 0a 20 20 61 73 73 65 72 74 28  break;.  assert(
b810: 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f 42   MEM_Str==(MEM_B
b820: 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20 70 49 6e  lob>>3) );.  pIn
b830: 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 28 70 49 6e  1->flags |= (pIn
b840: 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f  1->flags&MEM_Blo
b850: 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c 79 41 66  b)>>3;.  applyAf
b860: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
b870: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e  ITE_AFF_TEXT, en
b880: 63 6f 64 69 6e 67 29 3b 0a 20 20 72 63 20 3d 20  coding);.  rc = 
b890: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
b8a0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
b8b0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
b8c0: 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  r || db->mallocF
b8d0: 61 69 6c 65 64 20 29 3b 0a 20 20 70 49 6e 31 2d  ailed );.  pIn1-
b8e0: 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
b8f0: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  Int|MEM_Real|MEM
b900: 5f 42 6c 6f 62 29 3b 0a 20 20 55 50 44 41 54 45  _Blob);.  UPDATE
b910: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
b920: 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n1);.  break;.}.
b930: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 42 6c  ./* Opcode: ToBl
b940: 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ob P1 * * * *.**
b950: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
b960: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b970: 50 31 20 74 6f 20 62 65 20 61 20 42 4c 4f 42 2e  P1 to be a BLOB.
b980: 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
b990: 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e   is numeric, con
b9a0: 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74 72  vert it to a str
b9b0: 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20 53 74  ing first..** St
b9c0: 72 69 6e 67 73 20 61 72 65 20 73 69 6d 70 6c 79  rings are simply
b9d0: 20 72 65 69 6e 74 65 72 70 72 65 74 65 64 20 61   reinterpreted a
b9e0: 73 20 62 6c 6f 62 73 20 77 69 74 68 20 6e 6f 20  s blobs with no 
b9f0: 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74 68 65  change.** to the
ba00: 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61   underlying data
ba10: 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  ..**.** A NULL v
ba20: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
ba30: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
ba40: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
ba50: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
ba60: 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20 20 20  P_ToBlob: {     
ba70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ba80: 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 42 4c  same as TK_TO_BL
ba90: 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28  OB, in1 */.  if(
baa0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
bab0: 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b  EM_Null ) break;
bac0: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
bad0: 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d  ags & MEM_Blob)=
bae0: 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41  =0 ){.    applyA
baf0: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51  ffinity(pIn1, SQ
bb00: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65  LITE_AFF_TEXT, e
bb10: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 61 73  ncoding);.    as
bb20: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
bb30: 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64  s & MEM_Str || d
bb40: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
bb50: 29 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54  );.  }.  MemSetT
bb60: 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45  ypeFlag(pIn1, ME
bb70: 4d 5f 42 6c 6f 62 29 3b 0a 20 20 55 50 44 41 54  M_Blob);.  UPDAT
bb80: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
bb90: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
bba0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 4e  ../* Opcode: ToN
bbb0: 75 6d 65 72 69 63 20 50 31 20 2a 20 2a 20 2a 20  umeric P1 * * * 
bbc0: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
bbd0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
bbe0: 74 65 72 20 50 31 20 74 6f 20 62 65 20 6e 75 6d  ter P1 to be num
bbf0: 65 72 69 63 20 28 65 69 74 68 65 72 20 61 6e 0a  eric (either an.
bc00: 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20  ** integer or a 
bc10: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 6e  floating-point n
bc20: 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66 20 74 68  umber.).** If th
bc30: 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20  e value is text 
bc40: 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20  or blob, try to 
bc50: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e  convert it to an
bc60: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71   using the.** eq
bc70: 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69  uivalent of atoi
bc80: 28 29 20 6f 72 20 61 74 6f 66 28 29 20 61 6e 64  () or atof() and
bc90: 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73   store 0 if no s
bca0: 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 0a  uch conversion .
bcb0: 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a  ** is possible..
bcc0: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
bcd0: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
bce0: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
bcf0: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
bd00: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
bd10: 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20 20 20 20  ToNumeric: {    
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bd30: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 4e   same as TK_TO_N
bd40: 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a 2f 0a 20  UMERIC, in1 */. 
bd50: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
bd60: 73 20 26 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45  s & (MEM_Null|ME
bd70: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29  M_Int|MEM_Real))
bd80: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
bd90: 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66  e3VdbeMemNumerif
bda0: 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  y(pIn1);.  }.  b
bdb0: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
bdc0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  * SQLITE_OMIT_CA
bdd0: 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ST */../* Opcode
bde0: 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a  : ToInt P1 * * *
bdf0: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
be00: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
be10: 73 74 65 72 20 50 31 20 62 65 20 61 6e 20 69 6e  ster P1 be an in
be20: 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54 68  teger.  If.** Th
be30: 65 20 76 61 6c 75 65 20 69 73 20 63 75 72 72 65  e value is curre
be40: 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d 62  ntly a real numb
be50: 65 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72 61  er, drop its fra
be60: 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a  ctional part..**
be70: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
be80: 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74   text or blob, t
be90: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74  ry to convert it
bea0: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75   to an integer u
beb0: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69  sing the.** equi
bec0: 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29  valent of atoi()
bed0: 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20   and store 0 if 
bee0: 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69  no such conversi
bef0: 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a  on is possible..
bf00: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
bf10: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
bf20: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
bf30: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
bf40: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
bf50: 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  ToInt: {        
bf60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
bf70: 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20  e as TK_TO_INT, 
bf80: 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70 49  in1 */.  if( (pI
bf90: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
bfa0: 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
bfb0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
bfc0: 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
bfd0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
bfe0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
bff0: 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f  MIT_CAST./* Opco
c000: 64 65 3a 20 54 6f 52 65 61 6c 20 50 31 20 2a 20  de: ToReal P1 * 
c010: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
c020: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
c030: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
c040: 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
c050: 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 49 66 20  t number..** If 
c060: 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72  The value is cur
c070: 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74 65 67 65  rently an intege
c080: 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 2e 0a 2a  r, convert it..*
c090: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
c0a0: 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20  s text or blob, 
c0b0: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
c0c0: 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
c0d0: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
c0e0: 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28  ivalent of atoi(
c0f0: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 2e 30 20  ) and store 0.0 
c100: 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65  if no such conve
c110: 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c  rsion is possibl
c120: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  e..**.** A NULL 
c130: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
c140: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
c150: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
c160: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
c170: 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20 20 20 20  OP_ToReal: {    
c180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c190: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 52   same as TK_TO_R
c1a0: 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66  EAL, in1 */.  if
c1b0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
c1c0: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
c1d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
c1e0: 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29  MemRealify(pIn1)
c1f0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
c200: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
c210: 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a  E_OMIT_CAST */..
c220: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31  /* Opcode: Lt P1
c230: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
c240: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76  ** Compare the v
c250: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
c260: 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66  r P1 and P3.  If
c270: 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29   reg(P3)<reg(P1)
c280: 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
c290: 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a   address P2.  .*
c2a0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
c2b0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69  TE_JUMPIFNULL bi
c2c0: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61  t of P5 is set a
c2d0: 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31  nd either reg(P1
c2e0: 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20  ) or.** reg(P3) 
c2f0: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
c300: 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20  e the jump.  If 
c310: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
c320: 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73  FNULL .** bit is
c330: 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c   clear then fall
c340: 20 74 68 72 75 20 69 66 20 65 69 74 68 65 72 20   thru if either 
c350: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
c360: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
c370: 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69  E_AFF_MASK porti
c380: 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65  on of P5 must be
c390: 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61   an affinity cha
c3a0: 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49  racter -.** SQLI
c3b0: 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c  TE_AFF_TEXT, SQL
c3c0: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c  ITE_AFF_INTEGER,
c3d0: 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41   and so forth. A
c3e0: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
c3f0: 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20  e .** to coerce 
c400: 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f  both inputs acco
c410: 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66  rding to this af
c420: 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68  finity before th
c430: 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
c440: 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20  is made. If the 
c450: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
c460: 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75  is 0x00, then nu
c470: 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74  meric.** affinit
c480: 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20  y is used. Note 
c490: 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74  that the affinit
c4a0: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72  y conversions ar
c4b0: 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b  e stored.** back
c4c0: 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20   into the input 
c4d0: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
c4e0: 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70   P3.  So this op
c4f0: 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a  code can cause.*
c500: 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61  * persistent cha
c510: 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  nges to register
c520: 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a  s P1 and P3..**.
c530: 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76  ** Once any conv
c540: 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b  ersions have tak
c550: 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65  en place, and ne
c560: 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e  ither value is N
c570: 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c  ULL, .** the val
c580: 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ues are compared
c590: 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73  . If both values
c5a0: 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20   are blobs then 
c5b0: 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75  memcmp() is.** u
c5c0: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
c5d0: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
c5e0: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
c5f0: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a   If both values.
c600: 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65  ** are text, the
c610: 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  n the appropriat
c620: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  e collating func
c630: 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69  tion specified i
c640: 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64  n.** P4 is  used
c650: 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61   to do the compa
c660: 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73  rison.  If P4 is
c670: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74   not specified t
c680: 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20  hen.** memcmp() 
c690: 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61  is used to compa
c6a0: 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20  re text string. 
c6b0: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
c6c0: 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20  are.** numeric, 
c6d0: 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63  then a numeric c
c6e0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65  omparison is use
c6f0: 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61  d. If the two va
c700: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64  lues.** are of d
c710: 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20  ifferent types, 
c720: 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65  then numbers are
c730: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
c740: 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73   than.** strings
c750: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
c760: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
c770: 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a   than blobs..**.
c780: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
c790: 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66 20  _STOREP2 bit of 
c7a0: 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  P5 is set, then 
c7b0: 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e  do not jump.  In
c7c0: 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20  stead,.** store 
c7d0: 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74  a boolean result
c7e0: 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20 31   (either 0, or 1
c7f0: 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65  , or NULL) in re
c800: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 2f 2a  gister P2..*/./*
c810: 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50   Opcode: Ne P1 P
c820: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
c830: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
c840: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
c850: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
c860: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
c870: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72  n if.** the oper
c880: 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72  ands in register
c890: 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20  s P1 and P3 are 
c8a0: 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20  not equal.  See 
c8b0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
c8c0: 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20  r.** additional 
c8d0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
c8e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31  /* Opcode: Eq P1
c8f0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
c900: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
c910: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
c920: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
c930: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
c940: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
c950: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
c960: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
c970: 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20  e equal..** See 
c980: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
c990: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
c9a0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
c9b0: 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32  Opcode: Le P1 P2
c9c0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
c9d0: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
c9e0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
c9f0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
ca00: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
ca10: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
ca20: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
ca30: 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  3 is less than o
ca40: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
ca50: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
ca60: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
ca70: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
ca80: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
ca90: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
caa0: 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20  pcode: Gt P1 P2 
cab0: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
cac0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
cad0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
cae0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
caf0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
cb00: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
cb10: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
cb20: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
cb30: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
cb40: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
cb50: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
cb60: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
cb70: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
cb80: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20  /./* Opcode: Ge 
cb90: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
cba0: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
cbb0: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
cbc0: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
cbd0: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
cbe0: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
cbf0: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
cc00: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
cc10: 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
cc20: 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  to the content o
cc30: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
cc40: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
cc50: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
cc60: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
cc70: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20  .*/.case OP_Eq: 
cc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cc90: 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20   same as TK_EQ, 
cca0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
ccb0: 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20  /.case OP_Ne:   
ccc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
ccd0: 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75  ame as TK_NE, ju
cce0: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
ccf0: 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20  case OP_Lt:     
cd00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
cd10: 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70  e as TK_LT, jump
cd20: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
cd30: 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20  se OP_Le:       
cd40: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
cd50: 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20  as TK_LE, jump, 
cd60: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
cd70: 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20   OP_Gt:         
cd80: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
cd90: 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_GT, jump, in
cda0: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
cdb0: 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Ge: {         
cdc0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cdd0: 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_GE, jump, in1,
cde0: 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 66 6c   in3 */.  int fl
cdf0: 61 67 73 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  ags;.  int res;.
ce00: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
ce10: 0a 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31  ..  flags = pIn1
ce20: 2d 3e 66 6c 61 67 73 7c 70 49 6e 33 2d 3e 66 6c  ->flags|pIn3->fl
ce30: 61 67 73 3b 0a 0a 20 20 69 66 28 20 66 6c 61 67  ags;..  if( flag
ce40: 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  s&MEM_Null ){.  
ce50: 20 20 2f 2a 20 49 66 20 65 69 74 68 65 72 20 6f    /* If either o
ce60: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
ce70: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
ce80: 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20  s always NULL.. 
ce90: 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69     ** The jump i
cea0: 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53  s taken if the S
ceb0: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
cec0: 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20   bit is set..   
ced0: 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   */.    if( pOp-
cee0: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
cef0: 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 70 4f  REP2 ){.      pO
cf00: 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  ut = &p->aMem[pO
cf10: 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 4d 65  p->p2];.      Me
cf20: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
cf30: 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
cf40: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
cf50: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
cf60: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
cf70: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
cf80: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a  E_JUMPIFNULL ){.
cf90: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
cfa0: 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2-1;.    }.    
cfb0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 61 66  break;.  }..  af
cfc0: 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35  finity = pOp->p5
cfd0: 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41   & SQLITE_AFF_MA
cfe0: 53 4b 3b 0a 20 20 69 66 28 20 61 66 66 69 6e 69  SK;.  if( affini
cff0: 74 79 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41  ty ){.    applyA
d000: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61 66  ffinity(pIn1, af
d010: 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67  finity, encoding
d020: 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  );.    applyAffi
d030: 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66 69 6e  nity(pIn3, affin
d040: 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  ity, encoding);.
d050: 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70    }..  assert( p
d060: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
d070: 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70  OLLSEQ || pOp->p
d080: 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20  4.pColl==0 );.  
d090: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
d0a0: 3b 0a 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  ;.  ExpandBlob(p
d0b0: 49 6e 33 29 3b 0a 20 20 72 65 73 20 3d 20 73 71  In3);.  res = sq
d0c0: 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28  lite3MemCompare(
d0d0: 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d  pIn3, pIn1, pOp-
d0e0: 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 73 77  >p4.pColl);.  sw
d0f0: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
d100: 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50  e ){.    case OP
d110: 5f 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Eq:    res = re
d120: 73 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s==0;     break;
d130: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a  .    case OP_Ne:
d140: 20 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30      res = res!=0
d150: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
d160: 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20   case OP_Lt:    
d170: 72 65 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20  res = res<0;    
d180: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
d190: 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20  e OP_Le:    res 
d1a0: 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72  = res<=0;     br
d1b0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
d1c0: 5f 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Gt:    res = re
d1d0: 73 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  s>0;      break;
d1e0: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20  .    default:   
d1f0: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30      res = res>=0
d200: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;     break;.  }
d210: 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ..  if( pOp->p5 
d220: 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  & SQLITE_STOREP2
d230: 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26   ){.    pOut = &
d240: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  p->aMem[pOp->p2]
d250: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
d260: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
d270: 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  nt);.    pOut->u
d280: 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20 20 52 45  .i = res;.    RE
d290: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
d2a0: 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d  ->p2, pOut);.  }
d2b0: 65 6c 73 65 20 69 66 28 20 72 65 73 20 29 7b 0a  else if( res ){.
d2c0: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
d2d0: 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  -1;.  }.  break;
d2e0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
d2f0: 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a  ermutation * * *
d300: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20   P4 *.**.** Set 
d310: 74 68 65 20 70 65 72 6d 75 61 74 69 6f 6e 20 75  the permuation u
d320: 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f  sed by the OP_Co
d330: 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20 74  mpare operator t
d340: 6f 20 62 65 20 74 68 65 20 61 72 72 61 79 0a 2a  o be the array.*
d350: 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e  * of integers in
d360: 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70   P4..**.** The p
d370: 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e  ermutation is on
d380: 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74  ly valid until t
d390: 68 65 20 6e 65 78 74 20 4f 50 5f 50 65 72 6d 75  he next OP_Permu
d3a0: 74 61 74 69 6f 6e 2c 20 4f 50 5f 43 6f 6d 70 61  tation, OP_Compa
d3b0: 72 65 2c 0a 2a 2a 20 4f 50 5f 48 61 6c 74 2c 20  re,.** OP_Halt, 
d3c0: 6f 72 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2e  or OP_ResultRow.
d3d0: 20 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20    Typically the 
d3e0: 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73  OP_Permutation s
d3f0: 68 6f 75 6c 64 20 6f 63 63 75 72 0a 2a 2a 20 69  hould occur.** i
d400: 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72  mmediately prior
d410: 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   to the OP_Compa
d420: 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  re..*/.case OP_P
d430: 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20  ermutation: {.  
d440: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
d450: 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59  ype==P4_INTARRAY
d460: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
d470: 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50  p->p4.ai );.  aP
d480: 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34  ermute = pOp->p4
d490: 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .ai;.  break;.}.
d4a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70  ./* Opcode: Comp
d4b0: 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34 20  are P1 P2 P3 P4 
d4c0: 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20  *.**.** Compare 
d4d0: 74 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65  to vectors of re
d4e0: 67 69 73 74 65 72 73 20 69 6e 20 72 65 67 28 50  gisters in reg(P
d4f0: 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29  1)..reg(P1+P3-1)
d500: 20 28 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 6f 6e   (all this.** on
d510: 65 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65  e "A") and in re
d520: 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33  g(P2)..reg(P2+P3
d530: 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65  -1) ("B").  Save
d540: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
d550: 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * the comparison
d560: 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the 
d570: 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73  next OP_Jump ins
d580: 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  truct..**.** P4 
d590: 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  is a KeyInfo str
d5a0: 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66 69  ucture that defi
d5b0: 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  nes collating se
d5c0: 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74  quences and sort
d5d0: 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74  .** orders for t
d5e0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
d5f0: 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
d600: 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73  applies to regis
d610: 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ters.** only.  T
d620: 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65  he KeyInfo eleme
d630: 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65 71  nts are used seq
d640: 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a  uentially..**.**
d650: 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   The comparison 
d660: 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72  is a sort compar
d670: 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63  ison, so NULLs c
d680: 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a  ompare equal,.**
d690: 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20   NULLs are less 
d6a0: 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75  than numbers, nu
d6b0: 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20 74  mbers are less t
d6c0: 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20  han strings,.** 
d6d0: 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
d6e0: 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
d6f0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70  .*/.case OP_Comp
d700: 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 20 3d  are: {.  int n =
d710: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 6e 74 20   pOp->p3;.  int 
d720: 69 2c 20 70 31 2c 20 70 32 3b 0a 20 20 63 6f 6e  i, p1, p2;.  con
d730: 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  st KeyInfo *pKey
d740: 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
d750: 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
d760: 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65  t( n>0 );.  asse
d770: 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20  rt( pKeyInfo!=0 
d780: 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  );.  p1 = pOp->p
d790: 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3e  1;.  assert( p1>
d7a0: 30 20 26 26 20 70 31 2b 6e 2d 31 3c 70 2d 3e 6e  0 && p1+n-1<p->n
d7b0: 4d 65 6d 20 29 3b 0a 20 20 70 32 20 3d 20 70 4f  Mem );.  p2 = pO
d7c0: 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
d7d0: 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 2d 31 3c   p2>0 && p2+n-1<
d7e0: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 66 6f 72  p->nMem );.  for
d7f0: 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b  (i=0; i<n; i++){
d800: 0a 20 20 20 20 69 6e 74 20 69 64 78 20 3d 20 61  .    int idx = a
d810: 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75  Permute ? aPermu
d820: 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 43  te[i] : i;.    C
d830: 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20  ollSeq *pColl;  
d840: 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
d850: 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f  equence to use o
d860: 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20  n this term */. 
d870: 20 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20     int bRev;    
d880: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f        /* True fo
d890: 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72  r DESCENDING sor
d8a0: 74 20 6f 72 64 65 72 20 2a 2f 0a 20 20 20 20 52  t order */.    R
d8b0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31  EGISTER_TRACE(p1
d8c0: 2b 69 64 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70  +idx, &p->aMem[p
d8d0: 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47  1+idx]);.    REG
d8e0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69  ISTER_TRACE(p2+i
d8f0: 64 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 2b  dx, &p->aMem[p2+
d900: 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  idx]);.    asser
d910: 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e  t( i<pKeyInfo->n
d920: 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f  Field );.    pCo
d930: 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ll = pKeyInfo->a
d940: 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65  Coll[i];.    bRe
d950: 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53  v = pKeyInfo->aS
d960: 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20  ortOrder[i];.   
d970: 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69   iCompare = sqli
d980: 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 70  te3MemCompare(&p
d990: 2d 3e 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20  ->aMem[p1+idx], 
d9a0: 26 70 2d 3e 61 4d 65 6d 5b 70 32 2b 69 64 78 5d  &p->aMem[p2+idx]
d9b0: 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66  , pColl);.    if
d9c0: 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20  ( iCompare ){.  
d9d0: 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20 69      if( bRev ) i
d9e0: 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70  Compare = -iComp
d9f0: 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  are;.      break
da00: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50  ;.    }.  }.  aP
da10: 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62 72  ermute = 0;.  br
da20: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
da30: 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50 33  e: Jump P1 P2 P3
da40: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
da50: 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74 69  to the instructi
da60: 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50 31  on at address P1
da70: 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70 65  , P2, or P3 depe
da80: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
da90: 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74 20  .** in the most 
daa0: 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72  recent OP_Compar
dab0: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68  e instruction th
dac0: 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73 20  e P1 vector was 
dad0: 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75  less than.** equ
dae0: 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65  al to, or greate
daf0: 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76 65  r than the P2 ve
db00: 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76 65  ctor, respective
db10: 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a  ly..*/.case OP_J
db20: 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ump: {          
db30: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
db40: 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20 29  if( iCompare<0 )
db50: 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
db60: 70 31 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 20  p1 - 1;.  }else 
db70: 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20  if( iCompare==0 
db80: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
db90: 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65  >p2 - 1;.  }else
dba0: 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
dbb0: 70 33 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p3 - 1;.  }.  br
dbc0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
dbd0: 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20  e: And P1 P2 P3 
dbe0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  * *.**.** Take t
dbf0: 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f  he logical AND o
dc00: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
dc10: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
dc20: 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65   P2 and.** write
dc30: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f   the result into
dc40: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
dc50: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31  .** If either P1
dc60: 20 6f 72 20 50 32 20 69 73 20 30 20 28 66 61 6c   or P2 is 0 (fal
dc70: 73 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  se) then the res
dc80: 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69 66  ult is 0 even if
dc90: 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e  .** the other in
dca0: 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20  put is NULL.  A 
dcb0: 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72  NULL and true or
dcc0: 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a   two NULLs give.
dcd0: 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74  ** a NULL output
dce0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
dcf0: 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  Or P1 P2 P3 * *.
dd00: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
dd10: 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65  ogical OR of the
dd20: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
dd30: 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
dd40: 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61  d.** store the a
dd50: 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74 65  nswer in registe
dd60: 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
dd70: 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
dd80: 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29  s nonzero (true)
dd90: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
dda0: 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20   is 1 (true).** 
ddb0: 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65  even if the othe
ddc0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  r input is NULL.
ddd0: 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c    A NULL and fal
dde0: 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a  se or two NULLs.
ddf0: 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f  ** give a NULL o
de00: 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  utput..*/.case O
de10: 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  P_And:          
de20: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
de30: 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_AND, in1, in2,
de40: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
de50: 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20  _Or: {          
de60: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
de70: 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  _OR, in1, in2, o
de80: 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 2c  ut3 */.  int v1,
de90: 20 76 32 3b 20 20 20 20 2f 2a 20 30 3d 3d 46 41   v2;    /* 0==FA
dea0: 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d  LSE, 1==TRUE, 2=
deb0: 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c  =UNKNOWN or NULL
dec0: 20 2a 2f 0a 0a 20 20 69 66 28 20 70 49 6e 31 2d   */..  if( pIn1-
ded0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
dee0: 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b  l ){.    v1 = 2;
def0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31  .  }else{.    v1
df00: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
df10: 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
df20: 0a 20 20 7d 0a 20 20 69 66 28 20 70 49 6e 32 2d  .  }.  if( pIn2-
df30: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
df40: 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b  l ){.    v2 = 2;
df50: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32  .  }else{.    v2
df60: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
df70: 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b  tValue(pIn2)!=0;
df80: 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
df90: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29  opcode==OP_And )
dfa0: 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
dfb0: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
dfc0: 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b   and_logic[] = {
dfd0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20   0, 0, 0, 0, 1, 
dfe0: 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20  2, 0, 2, 2 };.  
dff0: 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63    v1 = and_logic
e000: 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c  [v1*3+v2];.  }el
e010: 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  se{.    static c
e020: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
e030: 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20  ar or_logic[] = 
e040: 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c  { 0, 1, 2, 1, 1,
e050: 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20   1, 2, 1, 2 };. 
e060: 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63     v1 = or_logic
e070: 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20  [v1*3+v2];.  }. 
e080: 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20   if( v1==2 ){.  
e090: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
e0a0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
e0b0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
e0c0: 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20  Out->u.i = v1;. 
e0d0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
e0e0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
e0f0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
e100: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
e110: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
e120: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
e130: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
e140: 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61  r P1 as a boolea
e150: 6e 20 76 61 6c 75 65 2e 20 20 52 65 70 6c 61 63  n value.  Replac
e160: 65 20 69 74 0a 2a 2a 20 77 69 74 68 20 69 74 73  e it.** with its
e170: 20 63 6f 6d 70 6c 65 6d 65 6e 74 2e 20 20 49 66   complement.  If
e180: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
e190: 67 69 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c  gister P1 is NUL
e1a0: 4c 20 69 74 73 20 76 61 6c 75 65 0a 2a 2a 20 69  L its value.** i
e1b0: 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a  s unchanged..*/.
e1c0: 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20  case OP_Not: {  
e1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e1e0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c   same as TK_NOT,
e1f0: 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 70 49   in1 */.  if( pI
e200: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
e210: 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 20 20 2f  Null ) break;  /
e220: 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 74 6f 20  * Do nothing to 
e230: 4e 55 4c 4c 73 20 2a 2f 0a 20 20 73 71 6c 69 74  NULLs */.  sqlit
e240: 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
e250: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e  ify(pIn1);.  pIn
e260: 31 2d 3e 75 2e 69 20 3d 20 21 70 49 6e 31 2d 3e  1->u.i = !pIn1->
e270: 75 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  u.i;.  assert( p
e280: 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
e290: 6e 74 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  nt );.  break;.}
e2a0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  ../* Opcode: Bit
e2b0: 4e 6f 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  Not P1 * * * *.*
e2c0: 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
e2d0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
e2e0: 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e 20  gister P1 as an 
e2f0: 69 6e 74 65 67 65 72 2e 20 20 52 65 70 6c 61 63  integer.  Replac
e300: 65 20 69 74 0a 2a 2a 20 77 69 74 68 20 69 74 73  e it.** with its
e310: 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   ones-complement
e320: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  .  If the value 
e330: 69 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 4e 55  is originally NU
e340: 4c 4c 2c 20 6c 65 61 76 65 0a 2a 2a 20 69 74 20  LL, leave.** it 
e350: 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 63 61  unchanged..*/.ca
e360: 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20  se OP_BitNot: { 
e370: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
e380: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54  ame as TK_BITNOT
e390: 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 70  , in1 */.  if( p
e3a0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
e3b0: 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 20 20  _Null ) break;  
e3c0: 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 74 6f  /* Do nothing to
e3d0: 20 4e 55 4c 4c 73 20 2a 2f 0a 20 20 73 71 6c 69   NULLs */.  sqli
e3e0: 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
e3f0: 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49  rify(pIn1);.  pI
e400: 6e 31 2d 3e 75 2e 69 20 3d 20 7e 70 49 6e 31 2d  n1->u.i = ~pIn1-
e410: 3e 75 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20  >u.i;.  assert( 
e420: 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
e430: 49 6e 74 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Int );.  break;.
e440: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
e450: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
e460: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
e470: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
e480: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72  egister P1 is tr
e490: 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69  ue.  The value i
e4a0: 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72  s.** is consider
e4b0: 65 64 20 74 72 75 65 20 69 66 20 69 74 20 69 73  ed true if it is
e4c0: 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e   numeric and non
e4d0: 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76  -zero.  If the v
e4e0: 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73  alue.** in P1 is
e4f0: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20   NULL then take 
e500: 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69  the jump if P3 i
e510: 73 20 74 72 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s true..*/./* Op
e520: 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50  code: IfNot P1 P
e530: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
e540: 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
e550: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
e560: 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20  er P1 is False. 
e570: 20 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a   The value is.**
e580: 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
e590: 72 75 65 20 69 66 20 69 74 20 68 61 73 20 61 20  rue if it has a 
e5a0: 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66  numeric value of
e5b0: 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76   zero.  If the v
e5c0: 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73  alue.** in P1 is
e5d0: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20   NULL then take 
e5e0: 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69  the jump if P3 i
e5f0: 73 20 74 72 75 65 2e 0a 2a 2f 0a 63 61 73 65 20  s true..*/.case 
e600: 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20  OP_If:          
e610: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
e620: 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  in1 */.case OP_I
e630: 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  fNot: {         
e640: 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
e650: 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 69 66  */.  int c;.  if
e660: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
e670: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
e680: 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  c = pOp->p3;.  }
e690: 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51 4c  else{.#ifdef SQL
e6a0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
e6b0: 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20  G_POINT.    c = 
e6c0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
e6d0: 6c 75 65 28 70 49 6e 31 29 3b 0a 23 65 6c 73 65  lue(pIn1);.#else
e6e0: 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33  .    c = sqlite3
e6f0: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
e700: 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66  n1)!=0.0;.#endif
e710: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  .    if( pOp->op
e720: 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29  code==OP_IfNot )
e730: 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 69   c = !c;.  }.  i
e740: 66 28 20 63 20 29 7b 0a 20 20 20 20 70 63 20 3d  f( c ){.    pc =
e750: 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a   pOp->p2-1;.  }.
e760: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
e770: 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31  pcode: IsNull P1
e780: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
e790: 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
e7a0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
e7b0: 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e  ster P1 is NULL.
e7c0: 20 20 49 66 20 50 33 20 69 73 20 67 72 65 61 74    If P3 is great
e7d0: 65 72 0a 2a 2a 20 74 68 61 6e 20 7a 65 72 6f 2c  er.** than zero,
e7e0: 20 74 68 65 6e 20 63 68 65 63 6b 20 61 6c 6c 20   then check all 
e7f0: 76 61 6c 75 65 73 20 72 65 67 28 50 31 29 2c 20  values reg(P1), 
e800: 72 65 67 28 50 31 2b 31 29 2c 20 0a 2a 2a 20 72  reg(P1+1), .** r
e810: 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2c 20 72  eg(P1+2), ..., r
e820: 65 67 28 50 31 2b 50 33 2d 31 29 2e 0a 2a 2f 0a  eg(P1+P3-1)..*/.
e830: 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20  case OP_IsNull: 
e840: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
e850: 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c  same as TK_ISNUL
e860: 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
e870: 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e 70    int n = pOp->p
e880: 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  3;.  assert( pOp
e890: 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p3==0 || pOp->
e8a0: 70 31 3e 30 20 29 3b 0a 20 20 64 6f 7b 0a 20 20  p1>0 );.  do{.  
e8b0: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
e8c0: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
e8d0: 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  0 ){.      pc = 
e8e0: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
e8f0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
e900: 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 77      pIn1++;.  }w
e910: 68 69 6c 65 28 20 2d 2d 6e 20 3e 20 30 20 29 3b  hile( --n > 0 );
e920: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
e930: 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20  Opcode: NotNull 
e940: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
e950: 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
e960: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
e970: 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20  ister P1 is not 
e980: 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20  NULL.  .*/.case 
e990: 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20  OP_NotNull: {   
e9a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
e9b0: 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20   as TK_NOTNULL, 
e9c0: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
e9d0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
e9e0: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
e9f0: 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
ea00: 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
ea10: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
ea20: 65 3a 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73  e: SetNumColumns
ea30: 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   * P2 * * *.**.*
ea40: 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 73 65  * This opcode se
ea50: 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
ea60: 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 74 68 65   columns for the
ea70: 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 62   cursor opened b
ea80: 79 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69  y the.** followi
ea90: 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  ng instruction t
eaa0: 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 4f  o P2..**.** An O
eab0: 50 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20  P_SetNumColumns 
eac0: 69 73 20 6f 6e 6c 79 20 75 73 65 66 75 6c 20 69  is only useful i
ead0: 66 20 69 74 20 6f 63 63 75 72 73 20 69 6d 6d 65  f it occurs imme
eae0: 64 69 61 74 65 6c 79 20 62 65 66 6f 72 65 20 0a  diately before .
eaf0: 2a 2a 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  ** one of the fo
eb00: 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73 3a  llowing opcodes:
eb10: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 4f 70 65 6e 52  .**.**     OpenR
eb20: 65 61 64 0a 2a 2a 20 20 20 20 20 4f 70 65 6e 57  ead.**     OpenW
eb30: 72 69 74 65 0a 2a 2a 20 20 20 20 20 4f 70 65 6e  rite.**     Open
eb40: 50 73 65 75 64 6f 0a 2a 2a 0a 2a 2a 20 49 66 20  Pseudo.**.** If 
eb50: 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  the OP_Column op
eb60: 63 6f 64 65 20 69 73 20 74 6f 20 62 65 20 65 78  code is to be ex
eb70: 65 63 75 74 65 64 20 6f 6e 20 61 20 63 75 72 73  ecuted on a curs
eb80: 6f 72 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69 73  or, then.** this
eb90: 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20   opcode must be 
eba0: 70 72 65 73 65 6e 74 20 69 6d 6d 65 64 69 61 74  present immediat
ebb0: 65 6c 79 20 62 65 66 6f 72 65 20 74 68 65 20 6f  ely before the o
ebc0: 70 63 6f 64 65 20 74 68 61 74 0a 2a 2a 20 6f 70  pcode that.** op
ebd0: 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 2e 0a  ens the cursor..
ebe0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 4e 75  */.case OP_SetNu
ebf0: 6d 43 6f 6c 75 6d 6e 73 3a 20 7b 0a 20 20 62 72  mColumns: {.  br
ec00: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
ec10: 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  e: Column P1 P2 
ec20: 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  P3 P4 *.**.** In
ec30: 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61  terpret the data
ec40: 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
ec50: 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73  points to as a s
ec60: 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75  tructure built u
ec70: 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65  sing.** the Make
ec80: 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
ec90: 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61  on.  (See the Ma
eca0: 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
ecb0: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a  for additional.*
ecc0: 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
ecd0: 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  out the format o
ece0: 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78  f the data.)  Ex
ecf0: 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20  tract the P2-th 
ed00: 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74  column.** from t
ed10: 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20  his record.  If 
ed20: 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74  there are less t
ed30: 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76  hat (P2+1) .** v
ed40: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63  alues in the rec
ed50: 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e  ord, extract a N
ed60: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76  ULL..**.** The v
ed70: 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69  alue extracted i
ed80: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
ed90: 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
eda0: 66 20 74 68 65 20 4b 65 79 41 73 44 61 74 61 20  f the KeyAsData 
edb0: 6f 70 63 6f 64 65 20 68 61 73 20 70 72 65 76 69  opcode has previ
edc0: 6f 75 73 6c 79 20 65 78 65 63 75 74 65 64 20 6f  ously executed o
edd0: 6e 20 74 68 69 73 20 63 75 72 73 6f 72 2c 20 74  n this cursor, t
ede0: 68 65 6e 20 74 68 65 0a 2a 2a 20 66 69 65 6c 64  hen the.** field
edf0: 20 6d 69 67 68 74 20 62 65 20 65 78 74 72 61 63   might be extrac
ee00: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 6b 65 79  ted from the key
ee10: 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65   rather than the
ee20: 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   data..**.** If 
ee30: 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  the column conta
ee40: 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50  ins fewer than P
ee50: 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65  2 fields, then e
ee60: 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20  xtract a NULL.  
ee70: 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34  Or,.** if the P4
ee80: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50   argument is a P
ee90: 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61  4_MEM use the va
eea0: 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72  lue of the P4 ar
eeb0: 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65  gument as.** the
eec0: 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 63 61 73 65   result..*/.case
eed0: 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20   OP_Column: {.  
eee0: 75 33 32 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b  u32 payloadSize;
eef0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
ef00: 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63  bytes in the rec
ef10: 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31 20  ord */.  int p1 
ef20: 3d 20 70 4f 70 2d 3e 70 31 3b 20 20 2f 2a 20 50  = pOp->p1;  /* P
ef30: 31 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  1 value of the o
ef40: 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 70  pcode */.  int p
ef50: 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 20 20 2f 2a  2 = pOp->p2;  /*
ef60: 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74   column number t
ef70: 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20  o retrieve */.  
ef80: 43 75 72 73 6f 72 20 2a 70 43 20 3d 20 30 3b 20  Cursor *pC = 0; 
ef90: 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
efa0: 75 72 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20  ursor */.  char 
efb0: 2a 7a 52 65 63 3b 20 20 20 20 20 20 20 20 2f 2a  *zRec;        /*
efc0: 20 50 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d 70   Pointer to comp
efd0: 6c 65 74 65 20 72 65 63 6f 72 64 2d 64 61 74 61  lete record-data
efe0: 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a   */.  BtCursor *
eff0: 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20  pCrsr;   /* The 
f000: 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a  BTree cursor */.
f010: 20 20 75 33 32 20 2a 61 54 79 70 65 3b 20 20 20    u32 *aType;   
f020: 20 20 20 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d       /* aType[i]
f030: 20 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65 72   holds the numer
f040: 69 63 20 74 79 70 65 20 6f 66 20 74 68 65 20 69  ic type of the i
f050: 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  -th column */.  
f060: 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20  u32 *aOffset;   
f070: 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d     /* aOffset[i]
f080: 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74   is offset to st
f090: 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20  art of data for 
f0a0: 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  i-th column */. 
f0b0: 20 75 33 32 20 6e 46 69 65 6c 64 3b 20 20 20 20   u32 nField;    
f0c0: 20 20 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66      /* number of
f0d0: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
f0e0: 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6c  ecord */.  int l
f0f0: 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  en;           /*
f100: 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   The length of t
f110: 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61  he serialized da
f120: 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ta for the colum
f130: 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20  n */.  int i;   
f140: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
f150: 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 63  p counter */.  c
f160: 68 61 72 20 2a 7a 44 61 74 61 3b 20 20 20 20 20  har *zData;     
f170: 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65    /* Part of the
f180: 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65   record being de
f190: 63 6f 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  coded */.  Mem *
f1a0: 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  pDest;        /*
f1b0: 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65 20   Where to write 
f1c0: 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76 61  the extracted va
f1d0: 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65  lue */.  Mem sMe
f1e0: 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  m;          /* F
f1f0: 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72  or storing the r
f200: 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
f210: 64 65 64 20 2a 2f 0a 0a 20 20 73 4d 65 6d 2e 66  ded */..  sMem.f
f220: 6c 61 67 73 20 3d 20 30 3b 0a 20 20 73 4d 65 6d  lags = 0;.  sMem
f230: 2e 64 62 20 3d 20 30 3b 0a 20 20 73 4d 65 6d 2e  .db = 0;.  sMem.
f240: 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 61  zMalloc = 0;.  a
f250: 73 73 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43 75  ssert( p1<p->nCu
f260: 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
f270: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
f280: 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
f290: 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 70 2d  );.  pDest = &p-
f2a0: 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
f2b0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
f2c0: 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  (pDest, MEM_Null
f2d0: 29 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20 62 6c  );..  /* This bl
f2e0: 6f 63 6b 20 73 65 74 73 20 74 68 65 20 76 61 72  ock sets the var
f2f0: 69 61 62 6c 65 20 70 61 79 6c 6f 61 64 53 69 7a  iable payloadSiz
f300: 65 20 74 6f 20 62 65 20 74 68 65 20 74 6f 74 61  e to be the tota
f310: 6c 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a  l number of.  **
f320: 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
f330: 63 6f 72 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  cord..  **.  ** 
f340: 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f 20 62  zRec is set to b
f350: 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74  e the complete t
f360: 65 78 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72  ext of the recor
f370: 64 20 69 66 20 69 74 20 69 73 20 61 76 61 69 6c  d if it is avail
f380: 61 62 6c 65 2e 0a 20 20 2a 2a 20 54 68 65 20 63  able..  ** The c
f390: 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74  omplete record t
f3a0: 65 78 74 20 69 73 20 61 6c 77 61 79 73 20 61 76  ext is always av
f3b0: 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 73 65 75  ailable for pseu
f3c0: 64 6f 2d 74 61 62 6c 65 73 0a 20 20 2a 2a 20 49  do-tables.  ** I
f3d0: 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 73 20  f the record is 
f3e0: 73 74 6f 72 65 64 20 69 6e 20 61 20 63 75 72 73  stored in a curs
f3f0: 6f 72 2c 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  or, the complete
f400: 20 72 65 63 6f 72 64 20 74 65 78 74 0a 20 20 2a   record text.  *
f410: 2a 20 6d 69 67 68 74 20 62 65 20 61 76 61 69 6c  * might be avail
f420: 61 62 6c 65 20 69 6e 20 74 68 65 20 20 70 43 2d  able in the  pC-
f430: 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20 4f 72  >aRow cache.  Or
f440: 20 69 74 20 6d 69 67 68 74 20 6e 6f 74 20 62 65   it might not be
f450: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 64 61  ..  ** If the da
f460: 74 61 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c  ta is unavailabl
f470: 65 2c 20 20 7a 52 65 63 20 69 73 20 73 65 74 20  e,  zRec is set 
f480: 74 6f 20 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20  to NULL..  **.  
f490: 2a 2a 20 57 65 20 61 6c 73 6f 20 63 6f 6d 70 75  ** We also compu
f4a0: 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  te the number of
f4b0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
f4c0: 72 65 63 6f 72 64 2e 20 20 46 6f 72 20 63 75 72  record.  For cur
f4d0: 73 6f 72 73 2c 0a 20 20 2a 2a 20 74 68 65 20 6e  sors,.  ** the n
f4e0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
f4f0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
f500: 65 20 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64 20  e Cursor.nField 
f510: 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20  element..  */.  
f520: 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 31  pC = p->apCsr[p1
f530: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
f540: 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  =0 );.#ifndef SQ
f550: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
f560: 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28  LTABLE.  assert(
f570: 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72   pC->pVtabCursor
f580: 3d 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20  ==0 );.#endif.  
f590: 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  if( pC->pCursor!
f5a0: 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  =0 ){.    /* The
f5b0: 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65   record is store
f5c0: 64 20 69 6e 20 61 20 42 2d 54 72 65 65 20 2a 2f  d in a B-Tree */
f5d0: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
f5e0: 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
f5f0: 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72  o(pC);.    if( r
f600: 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
f610: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
f620: 20 7a 52 65 63 20 3d 20 30 3b 0a 20 20 20 20 70   zRec = 0;.    p
f630: 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
f640: 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  or;.    if( pC->
f650: 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
f660: 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30   payloadSize = 0
f670: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
f680: 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d  pC->cacheStatus=
f690: 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a  =p->cacheCtr ){.
f6a0: 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a        payloadSiz
f6b0: 65 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  e = pC->payloadS
f6c0: 69 7a 65 3b 0a 20 20 20 20 20 20 7a 52 65 63 20  ize;.      zRec 
f6d0: 3d 20 28 63 68 61 72 2a 29 70 43 2d 3e 61 52 6f  = (char*)pC->aRo
f6e0: 77 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  w;.    }else if(
f6f0: 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a   pC->isIndex ){.
f700: 20 20 20 20 20 20 69 36 34 20 70 61 79 6c 6f 61        i64 payloa
f710: 64 53 69 7a 65 36 34 3b 0a 20 20 20 20 20 20 73  dSize64;.      s
f720: 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
f730: 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f  ze(pCrsr, &paylo
f740: 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20 20  adSize64);.     
f750: 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70   payloadSize = p
f760: 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20  ayloadSize64;.  
f770: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
f780: 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53  qlite3BtreeDataS
f790: 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c  ize(pCrsr, &payl
f7a0: 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 7d 0a  oadSize);.    }.
f7b0: 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 43 2d      nField = pC-
f7c0: 3e 6e 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65  >nField;.  }else
f7d0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
f7e0: 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29 3b  ->pseudoTable );
f7f0: 0a 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f  .    /* The reco
f800: 72 64 20 69 73 20 74 68 65 20 73 6f 6c 65 20 65  rd is the sole e
f810: 6e 74 72 79 20 6f 66 20 61 20 70 73 65 75 64 6f  ntry of a pseudo
f820: 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 70 61  -table */.    pa
f830: 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e  yloadSize = pC->
f840: 6e 44 61 74 61 3b 0a 20 20 20 20 7a 52 65 63 20  nData;.    zRec 
f850: 3d 20 70 43 2d 3e 70 44 61 74 61 3b 0a 20 20 20  = pC->pData;.   
f860: 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
f870: 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
f880: 20 20 20 20 61 73 73 65 72 74 28 20 70 61 79 6c      assert( payl
f890: 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a 52  oadSize==0 || zR
f8a0: 65 63 21 3d 30 20 29 3b 0a 20 20 20 20 6e 46 69  ec!=0 );.    nFi
f8b0: 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c 64  eld = pC->nField
f8c0: 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 30 3b  ;.    pCrsr = 0;
f8d0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70 61  .  }..  /* If pa
f8e0: 79 6c 6f 61 64 53 69 7a 65 20 69 73 20 30 2c 20  yloadSize is 0, 
f8f0: 74 68 65 6e 20 6a 75 73 74 20 73 74 6f 72 65 20  then just store 
f900: 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66 28 20  a NULL */.  if( 
f910: 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 29  payloadSize==0 )
f920: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44  {.    assert( pD
f930: 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e  est->flags&MEM_N
f940: 75 6c 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20  ull );.    goto 
f950: 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
f960: 20 7d 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64   }.  if( payload
f970: 53 69 7a 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  Size>db->aLimit[
f980: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
f990: 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
f9a0: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20   too_big;.  }.. 
f9b0: 20 61 73 73 65 72 74 28 20 70 32 3c 6e 46 69 65   assert( p2<nFie
f9c0: 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64  ld );..  /* Read
f9d0: 20 61 6e 64 20 70 61 72 73 65 20 74 68 65 20 74   and parse the t
f9e0: 61 62 6c 65 20 68 65 61 64 65 72 2e 20 20 53 74  able header.  St
f9f0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ore the results 
fa00: 6f 66 20 74 68 65 20 70 61 72 73 65 0a 20 20 2a  of the parse.  *
fa10: 2a 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72  * into the recor
fa20: 64 20 68 65 61 64 65 72 20 63 61 63 68 65 20 66  d header cache f
fa30: 69 65 6c 64 73 20 6f 66 20 74 68 65 20 63 75 72  ields of the cur
fa40: 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61 54 79 70  sor..  */.  aTyp
fa50: 65 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20  e = pC->aType;. 
fa60: 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74   if( pC->cacheSt
fa70: 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74  atus==p->cacheCt
fa80: 72 20 29 7b 0a 20 20 20 20 61 4f 66 66 73 65 74  r ){.    aOffset
fa90: 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a   = pC->aOffset;.
faa0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 75 38 20    }else{.    u8 
fab0: 2a 7a 49 64 78 3b 20 20 20 20 20 20 20 20 2f 2a  *zIdx;        /*
fac0: 20 49 6e 64 65 78 20 69 6e 74 6f 20 68 65 61 64   Index into head
fad0: 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 2a 7a 45  er */.    u8 *zE
fae0: 6e 64 48 64 72 3b 20 20 20 20 20 2f 2a 20 50 6f  ndHdr;     /* Po
faf0: 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20 62  inter to first b
fb00: 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68 65  yte after the he
fb10: 61 64 65 72 20 2a 2f 0a 20 20 20 20 75 33 32 20  ader */.    u32 
fb20: 6f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20  offset;      /* 
fb30: 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20  Offset into the 
fb40: 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 6e 74 20  data */.    int 
fb50: 73 7a 48 64 72 53 7a 3b 20 20 20 20 20 2f 2a 20  szHdrSz;     /* 
fb60: 53 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64  Size of the head
fb70: 65 72 20 73 69 7a 65 20 66 69 65 6c 64 20 61 74  er size field at
fb80: 20 73 74 61 72 74 20 6f 66 20 72 65 63 6f 72 64   start of record
fb90: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 76 61 69   */.    int avai
fba0: 6c 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  l;       /* Numb
fbb0: 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61  er of bytes of a
fbc0: 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f  vailable data */
fbd0: 0a 0a 20 20 20 20 61 73 73 65 72 74 28 61 54 79  ..    assert(aTy
fbe0: 70 65 29 3b 0a 20 20 20 20 70 43 2d 3e 61 4f 66  pe);.    pC->aOf
fbf0: 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74 20 3d  fset = aOffset =
fc00: 20 26 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b   &aType[nField];
fc10: 0a 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64  .    pC->payload
fc20: 53 69 7a 65 20 3d 20 70 61 79 6c 6f 61 64 53 69  Size = payloadSi
fc30: 7a 65 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68  ze;.    pC->cach
fc40: 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63  eStatus = p->cac
fc50: 68 65 43 74 72 3b 0a 0a 20 20 20 20 2f 2a 20 46  heCtr;..    /* F
fc60: 69 67 75 72 65 20 6f 75 74 20 68 6f 77 20 6d 61  igure out how ma
fc70: 6e 79 20 62 79 74 65 73 20 61 72 65 20 69 6e 20  ny bytes are in 
fc80: 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
fc90: 20 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20    if( zRec ){.  
fca0: 20 20 20 20 7a 44 61 74 61 20 3d 20 7a 52 65 63      zData = zRec
fcb0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
fcc0: 20 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64     if( pC->isInd
fcd0: 65 78 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 44  ex ){.        zD
fce0: 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71 6c  ata = (char*)sql
fcf0: 69 74 65 33 42 74 72 65 65 4b 65 79 46 65 74 63  ite3BtreeKeyFetc
fd00: 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29  h(pCrsr, &avail)
fd10: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
fd20: 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28         zData = (
fd30: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74 72  char*)sqlite3Btr
fd40: 65 65 44 61 74 61 46 65 74 63 68 28 70 43 72 73  eeDataFetch(pCrs
fd50: 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20  r, &avail);.    
fd60: 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 49 66 20    }.      /* If 
fd70: 4b 65 79 46 65 74 63 68 28 29 2f 44 61 74 61 46  KeyFetch()/DataF
fd80: 65 74 63 68 28 29 20 6d 61 6e 61 67 65 64 20 74  etch() managed t
fd90: 6f 20 67 65 74 20 74 68 65 20 65 6e 74 69 72 65  o get the entire
fda0: 20 70 61 79 6c 6f 61 64 2c 0a 20 20 20 20 20 20   payload,.      
fdb0: 2a 2a 20 73 61 76 65 20 74 68 65 20 70 61 79 6c  ** save the payl
fdc0: 6f 61 64 20 69 6e 20 74 68 65 20 70 43 2d 3e 61  oad in the pC->a
fdd0: 52 6f 77 20 63 61 63 68 65 2e 20 20 54 68 61 74  Row cache.  That
fde0: 20 77 69 6c 6c 20 73 61 76 65 20 75 73 20 66 72   will save us fr
fdf0: 6f 6d 0a 20 20 20 20 20 20 2a 2a 20 68 61 76 69  om.      ** havi
fe00: 6e 67 20 74 6f 20 6d 61 6b 65 20 61 64 64 69 74  ng to make addit
fe10: 69 6f 6e 61 6c 20 63 61 6c 6c 73 20 74 6f 20 66  ional calls to f
fe20: 65 74 63 68 20 74 68 65 20 63 6f 6e 74 65 6e 74  etch the content
fe30: 20 70 6f 72 74 69 6f 6e 20 6f 66 0a 20 20 20 20   portion of.    
fe40: 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 2e    ** the record.
fe50: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
fe60: 69 66 28 20 61 76 61 69 6c 3e 3d 70 61 79 6c 6f  if( avail>=paylo
fe70: 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20 20  adSize ){.      
fe80: 20 20 7a 52 65 63 20 3d 20 7a 44 61 74 61 3b 0a    zRec = zData;.
fe90: 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
fea0: 20 3d 20 28 75 38 2a 29 7a 44 61 74 61 3b 0a 20   = (u8*)zData;. 
feb0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
fec0: 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30      pC->aRow = 0
fed0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
fee0: 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
fef0: 77 69 6e 67 20 61 73 73 65 72 74 20 69 73 20 74  wing assert is t
ff00: 72 75 65 20 69 6e 20 61 6c 6c 20 63 61 73 65 73  rue in all cases
ff10: 20 61 63 63 65 70 74 20 77 68 65 6e 0a 20 20 20   accept when.   
ff20: 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65   ** the database
ff30: 20 66 69 6c 65 20 68 61 73 20 62 65 65 6e 20 63   file has been c
ff40: 6f 72 72 75 70 74 65 64 20 65 78 74 65 72 6e 61  orrupted externa
ff50: 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20 20 20 20 61  lly..    **    a
ff60: 73 73 65 72 74 28 20 7a 52 65 63 21 3d 30 20 7c  ssert( zRec!=0 |
ff70: 7c 20 61 76 61 69 6c 3e 3d 70 61 79 6c 6f 61 64  | avail>=payload
ff80: 53 69 7a 65 20 7c 7c 20 61 76 61 69 6c 3e 3d 39  Size || avail>=9
ff90: 20 29 3b 20 2a 2f 0a 20 20 20 20 73 7a 48 64 72   ); */.    szHdr
ffa0: 53 7a 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32  Sz = getVarint32
ffb0: 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 6f 66 66  ((u8*)zData, off
ffc0: 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a 20 54 68  set);..    /* Th
ffd0: 65 20 4b 65 79 46 65 74 63 68 28 29 20 6f 72 20  e KeyFetch() or 
ffe0: 44 61 74 61 46 65 74 63 68 28 29 20 61 62 6f 76  DataFetch() abov
fff0: 65 20 61 72 65 20 66 61 73 74 20 61 6e 64 20 77  e are fast and w
10000 69 6c 6c 20 67 65 74 20 74 68 65 20 65 6e 74 69  ill get the enti
10010 72 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64  re.    ** record
10020 20 68 65 61 64 65 72 20 69 6e 20 6d 6f 73 74 20   header in most 
10030 63 61 73 65 73 2e 20 20 42 75 74 20 74 68 65 79  cases.  But they
10040 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f 20 67 65   will fail to ge
10050 74 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a 20  t the complete. 
10060 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61     ** record hea
10070 64 65 72 20 69 66 20 74 68 65 20 72 65 63 6f 72  der if the recor
10080 64 20 68 65 61 64 65 72 20 64 6f 65 73 20 6e 6f  d header does no
10090 74 20 66 69 74 20 6f 6e 20 61 20 73 69 6e 67 6c  t fit on a singl
100a0 65 20 70 61 67 65 0a 20 20 20 20 2a 2a 20 69 6e  e page.    ** in
100b0 20 74 68 65 20 42 2d 54 72 65 65 2e 20 20 57 68   the B-Tree.  Wh
100c0 65 6e 20 74 68 61 74 20 68 61 70 70 65 6e 73 2c  en that happens,
100d0 20 75 73 65 20 73 71 6c 69 74 65 33 56 64 62 65   use sqlite3Vdbe
100e0 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 74  MemFromBtree() t
100f0 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75 69 72 65  o.    ** acquire
10100 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65   the complete he
10110 61 64 65 72 20 74 65 78 74 2e 0a 20 20 20 20 2a  ader text..    *
10120 2f 0a 20 20 20 20 69 66 28 20 21 7a 52 65 63 20  /.    if( !zRec 
10130 26 26 20 61 76 61 69 6c 3c 6f 66 66 73 65 74 20  && avail<offset 
10140 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c  ){.      sMem.fl
10150 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 73  ags = 0;.      s
10160 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20 20  Mem.db = 0;.    
10170 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
10180 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
10190 43 72 73 72 2c 20 30 2c 20 6f 66 66 73 65 74 2c  Crsr, 0, offset,
101a0 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73   pC->isIndex, &s
101b0 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Mem);.      if( 
101c0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
101d0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  .        goto op
101e0 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
101f0 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61     }.      zData
10200 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d   = sMem.z;.    }
10210 0a 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 28  .    zEndHdr = (
10220 75 38 20 2a 29 26 7a 44 61 74 61 5b 6f 66 66 73  u8 *)&zData[offs
10230 65 74 5d 3b 0a 20 20 20 20 7a 49 64 78 20 3d 20  et];.    zIdx = 
10240 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 73 7a 48  (u8 *)&zData[szH
10250 64 72 53 7a 5d 3b 0a 0a 20 20 20 20 2f 2a 20 53  drSz];..    /* S
10260 63 61 6e 20 74 68 65 20 68 65 61 64 65 72 20 61  can the header a
10270 6e 64 20 75 73 65 20 69 74 20 74 6f 20 66 69 6c  nd use it to fil
10280 6c 20 69 6e 20 74 68 65 20 61 54 79 70 65 5b 5d  l in the aType[]
10290 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 5d 0a 20   and aOffset[]. 
102a0 20 20 20 2a 2a 20 61 72 72 61 79 73 2e 20 20 61     ** arrays.  a
102b0 54 79 70 65 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e  Type[i] will con
102c0 74 61 69 6e 20 74 68 65 20 74 79 70 65 20 69 6e  tain the type in
102d0 74 65 67 65 72 20 66 6f 72 20 74 68 65 20 69 2d  teger for the i-
102e0 74 68 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e  th.    ** column
102f0 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20   and aOffset[i] 
10300 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65  will contain the
10310 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65   offset from the
10320 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20 2a   beginning.    *
10330 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  * of the record 
10340 74 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66 20  to the start of 
10350 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65  the data for the
10360 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20 20 20   i-th column.   
10370 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   */.    for(i=0;
10380 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b   i<nField; i++){
10390 0a 20 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c  .      if( zIdx<
103a0 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20  zEndHdr ){.     
103b0 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20     aOffset[i] = 
103c0 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 20 20  offset;.        
103d0 7a 49 64 78 20 2b 3d 20 67 65 74 56 61 72 69 6e  zIdx += getVarin
103e0 74 33 32 28 7a 49 64 78 2c 20 61 54 79 70 65 5b  t32(zIdx, aType[
103f0 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 6f 66 66  i]);.        off
10400 73 65 74 20 2b 3d 20 73 71 6c 69 74 65 33 56 64  set += sqlite3Vd
10410 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
10420 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20  aType[i]);.     
10430 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
10440 2f 2a 20 49 66 20 69 20 69 73 20 6c 65 73 73 20  /* If i is less 
10450 74 68 61 74 20 6e 46 69 65 6c 64 2c 20 74 68 65  that nField, the
10460 6e 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73  n there are less
10470 20 66 69 65 6c 64 73 20 69 6e 20 74 68 69 73 0a   fields in this.
10480 20 20 20 20 20 20 20 20 2a 2a 20 72 65 63 6f 72          ** recor
10490 64 20 74 68 61 6e 20 53 65 74 4e 75 6d 43 6f 6c  d than SetNumCol
104a0 75 6d 6e 73 20 69 6e 64 69 63 61 74 65 64 20 74  umns indicated t
104b0 68 65 72 65 20 61 72 65 20 63 6f 6c 75 6d 6e 73  here are columns
104c0 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20   in the.        
104d0 2a 2a 20 74 61 62 6c 65 2e 20 53 65 74 20 74 68  ** table. Set th
104e0 65 20 6f 66 66 73 65 74 20 66 6f 72 20 61 6e 79  e offset for any
104f0 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e 73 20 6e   extra columns n
10500 6f 74 20 70 72 65 73 65 6e 74 20 69 6e 0a 20 20  ot present in.  
10510 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63        ** the rec
10520 6f 72 64 20 74 6f 20 30 2e 20 54 68 69 73 20 74  ord to 0. This t
10530 65 6c 6c 73 20 63 6f 64 65 20 62 65 6c 6f 77 20  ells code below 
10540 74 6f 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 0a  to store a NULL.
10550 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 65          ** inste
10560 61 64 20 6f 66 20 64 65 73 65 72 69 61 6c 69 7a  ad of deserializ
10570 69 6e 67 20 61 20 76 61 6c 75 65 20 66 72 6f 6d  ing a value from
10580 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20   the record..   
10590 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
105a0 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 30 3b 0a  aOffset[i] = 0;.
105b0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
105c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
105d0 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a  Release(&sMem);.
105e0 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d      sMem.flags =
105f0 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20 20 20   MEM_Null;..    
10600 2f 2a 20 49 66 20 77 65 20 68 61 76 65 20 72 65  /* If we have re
10610 61 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20 64  ad more header d
10620 61 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f 6e  ata than was con
10630 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68 65  tained in the he
10640 61 64 65 72 2c 0a 20 20 20 20 2a 2a 20 6f 72 20  ader,.    ** or 
10650 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  if the end of th
10660 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70 70  e last field app
10670 65 61 72 73 20 74 6f 20 62 65 20 70 61 73 74 20  ears to be past 
10680 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a 20  the end of the. 
10690 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f 72     ** record, or
106a0 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74   if the end of t
106b0 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70  he last field ap
106c0 70 65 61 72 73 20 74 6f 20 62 65 20 62 65 66 6f  pears to be befo
106d0 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20 20 2a  re the end.    *
106e0 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  * of the record 
106f0 28 77 68 65 6e 20 61 6c 6c 20 66 69 65 6c 64 73  (when all fields
10700 20 70 72 65 73 65 6e 74 29 2c 20 74 68 65 6e 20   present), then 
10710 77 65 20 6d 75 73 74 20 62 65 20 64 65 61 6c 69  we must be deali
10720 6e 67 20 0a 20 20 20 20 2a 2a 20 77 69 74 68 20  ng .    ** with 
10730 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  a corrupt databa
10740 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  se..    */.    i
10750 66 28 20 7a 49 64 78 3e 7a 45 6e 64 48 64 72 20  f( zIdx>zEndHdr 
10760 7c 7c 20 6f 66 66 73 65 74 3e 70 61 79 6c 6f 61  || offset>payloa
10770 64 53 69 7a 65 20 0a 20 20 20 20 20 7c 7c 20 28  dSize .     || (
10780 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26 26  zIdx==zEndHdr &&
10790 20 6f 66 66 73 65 74 21 3d 70 61 79 6c 6f 61 64   offset!=payload
107a0 53 69 7a 65 29 20 29 7b 0a 20 20 20 20 20 20 72  Size) ){.      r
107b0 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
107c0 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67  PT_BKPT;.      g
107d0 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
107e0 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  t;.    }.  }..  
107f0 2f 2a 20 47 65 74 20 74 68 65 20 63 6f 6c 75 6d  /* Get the colum
10800 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 49  n information. I
10810 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73  f aOffset[p2] is
10820 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
10830 0a 20 20 2a 2a 20 64 65 73 65 72 69 61 6c 69 7a  .  ** deserializ
10840 65 20 74 68 65 20 76 61 6c 75 65 20 66 72 6f 6d  e the value from
10850 20 74 68 65 20 72 65 63 6f 72 64 2e 20 49 66 20   the record. If 
10860 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73 20 7a  aOffset[p2] is z
10870 65 72 6f 2c 0a 20 20 2a 2a 20 74 68 65 6e 20 74  ero,.  ** then t
10880 68 65 72 65 20 61 72 65 20 6e 6f 74 20 65 6e 6f  here are not eno
10890 75 67 68 20 66 69 65 6c 64 73 20 69 6e 20 74 68  ugh fields in th
108a0 65 20 72 65 63 6f 72 64 20 74 6f 20 73 61 74 69  e record to sati
108b0 73 66 79 20 74 68 65 0a 20 20 2a 2a 20 72 65 71  sfy the.  ** req
108c0 75 65 73 74 2e 20 20 49 6e 20 74 68 69 73 20 63  uest.  In this c
108d0 61 73 65 2c 20 73 65 74 20 74 68 65 20 76 61 6c  ase, set the val
108e0 75 65 20 4e 55 4c 4c 20 6f 72 20 74 6f 20 50 34  ue NULL or to P4
108f0 20 69 66 20 50 34 20 69 73 0a 20 20 2a 2a 20 61   if P4 is.  ** a
10900 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4d 65   pointer to a Me
10910 6d 20 6f 62 6a 65 63 74 2e 0a 20 20 2a 2f 0a 20  m object..  */. 
10920 20 69 66 28 20 61 4f 66 66 73 65 74 5b 70 32 5d   if( aOffset[p2]
10930 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
10940 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
10950 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b  .    if( zRec ){
10960 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
10970 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 65  beMemReleaseExte
10980 72 6e 61 6c 28 70 44 65 73 74 29 3b 0a 20 20 20  rnal(pDest);.   
10990 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
109a0 72 69 61 6c 47 65 74 28 28 75 38 20 2a 29 26 7a  rialGet((u8 *)&z
109b0 52 65 63 5b 61 4f 66 66 73 65 74 5b 70 32 5d 5d  Rec[aOffset[p2]]
109c0 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65  , aType[p2], pDe
109d0 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  st);.    }else{.
109e0 20 20 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69        len = sqli
109f0 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
10a00 65 4c 65 6e 28 61 54 79 70 65 5b 70 32 5d 29 3b  eLen(aType[p2]);
10a10 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
10a20 62 65 4d 65 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c  beMemMove(&sMem,
10a30 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 72   pDest);.      r
10a40 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
10a50 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73  emFromBtree(pCrs
10a60 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20  r, aOffset[p2], 
10a70 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78  len, pC->isIndex
10a80 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20  , &sMem);.      
10a90 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
10aa0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
10ab0 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
10ac0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a  .      }.      z
10ad0 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20  Data = sMem.z;. 
10ae0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10af0 53 65 72 69 61 6c 47 65 74 28 28 75 38 2a 29 7a  SerialGet((u8*)z
10b00 44 61 74 61 2c 20 61 54 79 70 65 5b 70 32 5d 2c  Data, aType[p2],
10b10 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 0a 20   pDest);.    }. 
10b20 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20     pDest->enc = 
10b30 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 7d 65 6c 73  encoding;.  }els
10b40 65 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  e{.    if( pOp->
10b50 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29  p4type==P4_MEM )
10b60 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
10b70 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
10b80 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34  y(pDest, pOp->p4
10b90 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69  .pMem, MEM_Stati
10ba0 63 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  c);.    }else{. 
10bb0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 44 65       assert( pDe
10bc0 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75  st->flags&MEM_Nu
10bd0 6c 6c 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ll );.    }.  }.
10be0 0a 20 20 2f 2a 20 49 66 20 77 65 20 64 79 6e 61  .  /* If we dyna
10bf0 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
10c00 64 20 73 70 61 63 65 20 74 6f 20 68 6f 6c 64 20  d space to hold 
10c10 74 68 65 20 64 61 74 61 20 28 69 6e 20 74 68 65  the data (in the
10c20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
10c30 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20  eMemFromBtree() 
10c40 63 61 6c 6c 20 61 62 6f 76 65 29 20 74 68 65 6e  call above) then
10c50 20 74 72 61 6e 73 66 65 72 20 63 6f 6e 74 72 6f   transfer contro
10c60 6c 20 6f 66 20 74 68 61 74 0a 20 20 2a 2a 20 64  l of that.  ** d
10c70 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
10c80 61 74 65 64 20 73 70 61 63 65 20 6f 76 65 72 20  ated space over 
10c90 74 6f 20 74 68 65 20 70 44 65 73 74 20 73 74 72  to the pDest str
10ca0 75 63 74 75 72 65 2e 0a 20 20 2a 2a 20 54 68 69  ucture..  ** Thi
10cb0 73 20 70 72 65 76 65 6e 74 73 20 61 20 6d 65 6d  s prevents a mem
10cc0 6f 72 79 20 63 6f 70 79 2e 0a 20 20 2a 2f 0a 20  ory copy..  */. 
10cd0 20 69 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f   if( sMem.zMallo
10ce0 63 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  c ){.    assert(
10cf0 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d   sMem.z==sMem.zM
10d00 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20 61 73 73  alloc );.    ass
10d10 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c  ert( !(pDest->fl
10d20 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  ags & MEM_Dyn) )
10d30 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 28  ;.    assert( !(
10d40 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 28  pDest->flags & (
10d50 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72  MEM_Blob|MEM_Str
10d60 29 29 20 7c 7c 20 70 44 65 73 74 2d 3e 7a 3d 3d  )) || pDest->z==
10d70 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20 20 70 44  sMem.z );.    pD
10d80 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28  est->flags &= ~(
10d90 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d 5f 53 74  MEM_Ephem|MEM_St
10da0 61 74 69 63 29 3b 0a 20 20 20 20 70 44 65 73 74  atic);.    pDest
10db0 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54  ->flags |= MEM_T
10dc0 65 72 6d 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  erm;.    pDest->
10dd0 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  z = sMem.z;.    
10de0 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d  pDest->zMalloc =
10df0 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20   sMem.zMalloc;. 
10e00 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   }..  rc = sqlit
10e10 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69  e3VdbeMemMakeWri
10e20 74 65 61 62 6c 65 28 70 44 65 73 74 29 3b 0a 0a  teable(pDest);..
10e30 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20  op_column_out:. 
10e40 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
10e50 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52  SIZE(pDest);.  R
10e60 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
10e70 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20  p->p3, pDest);. 
10e80 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
10e90 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50  code: Affinity P
10ea0 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
10eb0 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69  * Apply affiniti
10ec0 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66  es to a range of
10ed0 20 50 32 20 72 65 67 69 73 74 65 72 73 20 73 74   P2 registers st
10ee0 61 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a  arting with P1..
10ef0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74  **.** P4 is a st
10f00 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
10f10 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
10f20 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74   The nth charact
10f30 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72  er of the.** str
10f40 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68  ing indicates th
10f50 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  e column affinit
10f60 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  y that should be
10f70 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74   used for the nt
10f80 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  h.** memory cell
10f90 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a   in the range..*
10fa0 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69  /.case OP_Affini
10fb0 74 79 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 41  ty: {.  char *zA
10fc0 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
10fd0 34 2e 7a 3b 0a 20 20 4d 65 6d 20 2a 70 44 61 74  4.z;.  Mem *pDat
10fe0 61 30 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  a0 = &p->aMem[pO
10ff0 70 2d 3e 70 31 5d 3b 0a 20 20 4d 65 6d 20 2a 70  p->p1];.  Mem *p
11000 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b 70  Last = &pData0[p
11010 4f 70 2d 3e 70 32 2d 31 5d 3b 0a 20 20 4d 65 6d  Op->p2-1];.  Mem
11020 20 2a 70 52 65 63 3b 0a 0a 20 20 66 6f 72 28 70   *pRec;..  for(p
11030 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63  Rec=pData0; pRec
11040 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29  <=pLast; pRec++)
11050 7b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62  {.    ExpandBlob
11060 28 70 52 65 63 29 3b 0a 20 20 20 20 61 70 70 6c  (pRec);.    appl
11070 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 20  yAffinity(pRec, 
11080 7a 41 66 66 69 6e 69 74 79 5b 70 52 65 63 2d 70  zAffinity[pRec-p
11090 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e 67  Data0], encoding
110a0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
110b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61  }../* Opcode: Ma
110c0 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50  keRecord P1 P2 P
110d0 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e  3 P4 *.**.** Con
110e0 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72  vert P2 register
110f0 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
11100 20 50 31 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c   P1 into a singl
11110 65 20 65 6e 74 72 79 0a 2a 2a 20 73 75 69 74 61  e entry.** suita
11120 62 6c 65 20 66 6f 72 20 75 73 65 20 61 73 20 61  ble for use as a
11130 20 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20   data record in 
11140 61 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  a database table
11150 20 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20   or as a key.** 
11160 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68  in an index.  Th
11170 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68 65  e details of the
11180 20 66 6f 72 6d 61 74 20 61 72 65 20 69 72 72 65   format are irre
11190 6c 65 76 61 6e 74 20 61 73 20 6c 6f 6e 67 20 61  levant as long a
111a0 73 0a 2a 2a 20 74 68 65 20 4f 50 5f 43 6f 6c 75  s.** the OP_Colu
111b0 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65  mn opcode can de
111c0 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20  code the record 
111d0 6c 61 74 65 72 2e 0a 2a 2a 20 52 65 66 65 72 20  later..** Refer 
111e0 74 6f 20 73 6f 75 72 63 65 20 63 6f 64 65 20 63  to source code c
111f0 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 74 68 65 20  omments for the 
11200 64 65 74 61 69 6c 73 20 6f 66 20 74 68 65 20 72  details of the r
11210 65 63 6f 72 64 0a 2a 2a 20 66 6f 72 6d 61 74 2e  ecord.** format.
11220 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65  .**.** P4 may be
11230 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69   a string that i
11240 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20  s P2 characters 
11250 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68 20 63  long.  The nth c
11260 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a  haracter of the.
11270 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61  ** string indica
11280 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  tes the column a
11290 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f  ffinity that sho
112a0 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20  uld be used for 
112b0 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64  the nth.** field
112c0 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
112d0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70  y..**.** The map
112e0 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63  ping from charac
112f0 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20  ter to affinity 
11300 69 73 20 67 69 76 65 6e 20 62 79 20 74 68 65 20  is given by the 
11310 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d  SQLITE_AFF_.** m
11320 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e  acros defined in
11330 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a   sqliteInt.h..**
11340 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c  .** If P4 is NUL
11350 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78  L then all index
11360 20 66 69 65 6c 64 73 20 68 61 76 65 20 74 68 65   fields have the
11370 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a   affinity NONE..
11380 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52  */.case OP_MakeR
11390 65 63 6f 72 64 3a 20 7b 0a 20 20 2f 2a 20 41 73  ecord: {.  /* As
113a0 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72  suming the recor
113b0 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65  d contains N fie
113c0 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20  lds, the record 
113d0 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a  format looks.  *
113e0 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a  * like this:.  *
113f0 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  *.  ** ---------
11400 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11410 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11420 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11430 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
11440 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20    ** | hdr-size 
11450 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20  | type 0 | type 
11460 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e  1 | ... | type N
11470 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e  -1 | data0 | ...
11480 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20   | data N-1 | . 
11490 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ** ------------
114a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
114b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
114c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
114d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a  ------------.  *
114e0 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69  *.  ** Data(0) i
114f0 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  s taken from reg
11500 69 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28  ister P1.  Data(
11510 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65  1) comes from re
11520 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a  gister P1+1.  **
11530 20 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20   and so froth.. 
11540 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79   **.  ** Each ty
11550 70 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61  pe field is a va
11560 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e  rint representin
11570 67 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70  g the serial typ
11580 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63  e of the .  ** c
11590 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74  orresponding dat
115a0 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73  a element (see s
115b0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
115c0 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a  Type()). The.  *
115d0 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64  * hdr-size field
115e0 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e   is also a varin
115f0 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f  t which is the o
11600 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62  ffset from the b
11610 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66  eginning.  ** of
11620 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64   the record to d
11630 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 75 38 20  ata0..  */.  u8 
11640 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20 20  *zNewRecord;    
11650 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72 20      /* A buffer 
11660 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61  to hold the data
11670 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
11680 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ord */.  Mem *pR
11690 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
116a0 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72  /* The new recor
116b0 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61  d */.  u64 nData
116c0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
116d0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
116e0 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
116f0 2f 0a 20 20 69 6e 74 20 6e 48 64 72 20 3d 20 30  /.  int nHdr = 0
11700 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ;          /* Nu
11710 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
11720 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f   header space */
11730 0a 20 20 75 36 34 20 6e 42 79 74 65 20 3d 20 30  .  u64 nByte = 0
11740 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74  ;         /* Dat
11750 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  a space required
11760 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64   for this record
11770 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 20   */.  int nZero 
11780 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
11790 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62  Number of zero b
117a0 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
117b0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
117c0 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20  .  int nVarint; 
117d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
117e0 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
117f0 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33  a varint */.  u3
11800 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20  2 serial_type;  
11810 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65       /* Type fie
11820 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61  ld */.  Mem *pDa
11830 74 61 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ta0;           /
11840 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f  * First field to
11850 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74   be combined int
11860 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  o the record */.
11870 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20    Mem *pLast;   
11880 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
11890 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65   field of the re
118a0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46  cord */.  int nF
118b0 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20  ield;           
118c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
118d0 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
118e0 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  rd */.  char *zA
118f0 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f  ffinity;       /
11900 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 73  * The affinity s
11910 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65  tring for the re
11920 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69  cord */.  int fi
11930 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
11940 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20   /* File format 
11950 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64  to use for encod
11960 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20  ing */.  int i; 
11970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11980 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69 6e  /* Space used in
11990 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 2a 2f   zNewRecord[] */
119a0 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  ..  nField = pOp
119b0 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74  ->p1;.  zAffinit
119c0 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
119d0 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
119e0 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26  0 && pOp->p2>0 &
119f0 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64  & pOp->p2+nField
11a00 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
11a10 44 61 74 61 30 20 3d 20 26 70 2d 3e 61 4d 65 6d  Data0 = &p->aMem
11a20 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
11a30 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
11a40 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
11a50 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
11a60 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
11a70 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
11a80 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72  ;..  /* Loop thr
11a90 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74  ough the element
11aa0 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65  s that will make
11ab0 20 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74   up the record t
11ac0 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75  o figure.  ** ou
11ad0 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65  t how much space
11ae0 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
11af0 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e   the new record.
11b00 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 70 52 65 63  .  */.  for(pRec
11b10 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70  =pData0; pRec<=p
11b20 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20  Last; pRec++){. 
11b30 20 20 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 20 20     int len;.    
11b40 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b  if( zAffinity ){
11b50 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69  .      applyAffi
11b60 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66 66 69  nity(pRec, zAffi
11b70 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74 61 30  nity[pRec-pData0
11b80 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ], encoding);.  
11b90 20 20 7d 0a 20 20 20 20 69 66 28 20 70 52 65 63    }.    if( pRec
11ba0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f  ->flags&MEM_Zero
11bb0 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30 20 29 7b   && pRec->n>0 ){
11bc0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
11bd0 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
11be0 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20  pRec);.    }.   
11bf0 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73   serial_type = s
11c00 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
11c10 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f  Type(pRec, file_
11c20 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65 6e  format);.    len
11c30 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
11c40 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72 69  rialTypeLen(seri
11c50 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 6e 44  al_type);.    nD
11c60 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20  ata += len;.    
11c70 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 56  nHdr += sqlite3V
11c80 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f  arintLen(serial_
11c90 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70  type);.    if( p
11ca0 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
11cb0 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 2f  _Zero ){.      /
11cc0 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a 65 72 6f  * Only pure zero
11cd0 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73 20 63 61  -filled BLOBs ca
11ce0 6e 20 62 65 20 69 6e 70 75 74 20 74 6f 20 74 68  n be input to th
11cf0 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20 20 20 20  is Opcode..     
11d00 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74 20 61 6c   ** We do not al
11d10 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74 68 20 61  low blobs with a
11d20 20 70 72 65 66 69 78 20 61 6e 64 20 61 20 7a 65   prefix and a ze
11d30 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69 6c 2e 20  ro-filled tail. 
11d40 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b  */.      nZero +
11d50 3d 20 70 52 65 63 2d 3e 75 2e 69 3b 0a 20 20 20  = pRec->u.i;.   
11d60 20 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e 20 29   }else if( len )
11d70 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20  {.      nZero = 
11d80 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  0;.    }.  }..  
11d90 2f 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74 69  /* Add the initi
11da0 61 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e 74  al header varint
11db0 20 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73   and total the s
11dc0 69 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d  ize */.  nHdr +=
11dd0 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74   nVarint = sqlit
11de0 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
11df0 29 3b 0a 20 20 69 66 28 20 6e 56 61 72 69 6e 74  );.  if( nVarint
11e00 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65  <sqlite3VarintLe
11e10 6e 28 6e 48 64 72 29 20 29 7b 0a 20 20 20 20 6e  n(nHdr) ){.    n
11e20 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79  Hdr++;.  }.  nBy
11e30 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 2d  te = nHdr+nData-
11e40 6e 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42 79  nZero;.  if( nBy
11e50 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
11e60 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
11e70 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
11e80 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f  oo_big;.  }..  /
11e90 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  * Make sure the 
11ea0 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
11eb0 68 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72  has a buffer lar
11ec0 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f  ge enough to sto
11ed0 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77  re .  ** the new
11ee0 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74   record. The out
11ef0 70 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f  put register (pO
11f00 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c  p->p3) is not al
11f10 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65  lowed to.  ** be
11f20 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75   one of the inpu
11f30 74 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63  t registers (bec
11f40 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ause the followi
11f50 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20  ng call to.  ** 
11f60 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
11f70 6f 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62  ow() could clobb
11f80 65 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66  er the value bef
11f90 6f 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e  ore it is used).
11fa0 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
11fb0 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20  pOp->p3<pOp->p1 
11fc0 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d  || pOp->p3>=pOp-
11fd0 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20  >p1+pOp->p2 );. 
11fe0 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
11ff0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
12000 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47   sqlite3VdbeMemG
12010 72 6f 77 28 70 4f 75 74 2c 20 6e 42 79 74 65 2c  row(pOut, nByte,
12020 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20   0) ){.    goto 
12030 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e  no_mem;.  }.  zN
12040 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a  ewRecord = (u8 *
12050 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20  )pOut->z;..  /* 
12060 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64  Write the record
12070 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72   */.  i = putVar
12080 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64  int32(zNewRecord
12090 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70  , nHdr);.  for(p
120a0 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63  Rec=pData0; pRec
120b0 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29  <=pLast; pRec++)
120c0 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  {.    serial_typ
120d0 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  e = sqlite3VdbeS
120e0 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20  erialType(pRec, 
120f0 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20  file_format);.  
12100 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74    i += putVarint
12110 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69  32(&zNewRecord[i
12120 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  ], serial_type);
12130 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20        /* serial 
12140 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f  type */.  }.  fo
12150 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70  r(pRec=pData0; p
12160 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63  Rec<=pLast; pRec
12170 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20  ++){  /* serial 
12180 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d  data */.    i +=
12190 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
121a0 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72  alPut(&zNewRecor
121b0 64 5b 69 5d 2c 20 6e 42 79 74 65 2d 69 2c 20 70  d[i], nByte-i, p
121c0 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74  Rec, file_format
121d0 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  );.  }.  assert(
121e0 20 69 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20   i==nByte );..  
121f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
12200 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
12210 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 2d  >nMem );.  pOut-
12220 3e 6e 20 3d 20 6e 42 79 74 65 3b 0a 20 20 70 4f  >n = nByte;.  pO
12230 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
12240 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e 3b 0a  Blob | MEM_Dyn;.
12250 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20 30    pOut->xDel = 0
12260 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b  ;.  if( nZero ){
12270 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
12280 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74   nZero;.    pOut
12290 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a  ->flags |= MEM_Z
122a0 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  ero;.  }.  pOut-
122b0 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
122c0 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20  F8;  /* In case 
122d0 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72  the blob is ever
122e0 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65   converted to te
122f0 78 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52  xt */.  REGISTER
12300 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
12310 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f  pOut);.  UPDATE_
12320 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
12330 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
12340 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 61 74 65  /* Opcode: State
12350 6d 65 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  ment P1 * * * *.
12360 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 6e 20 69  **.** Begin an i
12370 6e 64 69 76 69 64 75 61 6c 20 73 74 61 74 65 6d  ndividual statem
12380 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
12390 77 68 69 63 68 20 69 73 20 70 61 72 74 20 6f 66  which is part of
123a0 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 74 72 61   a larger.** tra
123b0 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 69 73 20  nsaction.  This 
123c0 69 73 20 6e 65 65 64 65 64 20 73 6f 20 74 68 61  is needed so tha
123d0 74 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  t the statement.
123e0 2a 2a 20 63 61 6e 20 62 65 20 72 6f 6c 6c 65 64  ** can be rolled
123f0 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65   back after an e
12400 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76  rror without hav
12410 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b  ing to roll back
12420 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74   the.** entire t
12430 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 65  ransaction.  The
12440 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
12450 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 75 74 6f  action will auto
12460 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 63 6f 6d  matically.** com
12470 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44 42  mit when the VDB
12480 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49  E halts..**.** I
12490 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
124a0 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72  onnection is cur
124b0 72 65 6e 74 6c 79 20 69 6e 20 61 75 74 6f 63 6f  rently in autoco
124c0 6d 6d 69 74 20 6d 6f 64 65 20 28 74 68 61 74 20  mmit mode (that 
124d0 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 2c 20 69  .** is to say, i
124e0 66 20 69 74 20 69 73 20 69 6e 20 62 65 74 77 65  f it is in betwe
124f0 65 6e 20 42 45 47 49 4e 20 61 6e 64 20 43 4f 4d  en BEGIN and COM
12500 4d 49 54 29 0a 2a 2a 20 61 6e 64 20 69 66 20 74  MIT).** and if t
12510 68 65 72 65 20 61 72 65 20 6e 6f 20 6f 74 68 65  here are no othe
12520 72 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  r active stateme
12530 6e 74 73 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  nts on the same 
12540 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
12550 65 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 69  ection, then thi
12560 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 61  s operation is a
12570 20 6e 6f 2d 6f 70 2e 20 20 4e 6f 20 73 74 61 74   no-op.  No stat
12580 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
12590 6e 0a 2a 2a 20 69 73 20 6e 65 65 64 65 64 20 73  n.** is needed s
125a0 69 6e 63 65 20 61 6e 79 20 65 72 72 6f 72 20 63  ince any error c
125b0 61 6e 20 75 73 65 20 74 68 65 20 6e 6f 72 6d 61  an use the norma
125c0 6c 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65  l ROLLBACK proce
125d0 73 73 20 74 6f 0a 2a 2a 20 75 6e 64 6f 20 63 68  ss to.** undo ch
125e0 61 6e 67 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  anges..**.** If 
125f0 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
12600 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
12610 65 64 2c 20 74 68 65 6e 20 61 20 73 74 61 74 65  ed, then a state
12620 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 20 66 69 6c  ment journal fil
12630 65 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 61 6c 6c  e.** will be all
12640 6f 63 61 74 65 64 20 61 6e 64 20 69 6e 69 74 69  ocated and initi
12650 61 6c 69 7a 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  alized..**.** Th
12660 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 62  e statement is b
12670 65 67 75 6e 20 6f 6e 20 74 68 65 20 64 61 74 61  egun on the data
12680 62 61 73 65 20 66 69 6c 65 20 77 69 74 68 20 69  base file with i
12690 6e 64 65 78 20 50 31 2e 20 20 54 68 65 20 6d 61  ndex P1.  The ma
126a0 69 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66  in.** database f
126b0 69 6c 65 20 68 61 73 20 61 6e 20 69 6e 64 65 78  ile has an index
126c0 20 6f 66 20 30 20 61 6e 64 20 74 68 65 20 66 69   of 0 and the fi
126d0 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70  le used for temp
126e0 6f 72 61 72 79 20 74 61 62 6c 65 73 0a 2a 2a 20  orary tables.** 
126f0 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20  has an index of 
12700 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  1..*/.case OP_St
12710 61 74 65 6d 65 6e 74 3a 20 7b 0a 20 20 69 66 28  atement: {.  if(
12720 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
12730 3d 30 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65  =0 || db->active
12740 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20  VdbeCnt>1 ){.   
12750 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31   int i = pOp->p1
12760 3b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74  ;.    Btree *pBt
12770 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3e  ;.    assert( i>
12780 3d 30 20 26 26 20 69 3c 64 62 2d 3e 6e 44 62 20  =0 && i<db->nDb 
12790 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  );.    assert( d
127a0 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 21 3d 30  b->aDb[i].pBt!=0
127b0 20 29 3b 0a 20 20 20 20 70 42 74 20 3d 20 64 62   );.    pBt = db
127c0 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20  ->aDb[i].pBt;.  
127d0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
127e0 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
127f0 70 42 74 29 20 29 3b 0a 20 20 20 20 61 73 73 65  pBt) );.    asse
12800 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
12810 6b 20 26 20 28 31 3c 3c 69 29 29 21 3d 30 20 29  k & (1<<i))!=0 )
12820 3b 0a 20 20 20 20 69 66 28 20 21 73 71 6c 69 74  ;.    if( !sqlit
12830 65 33 42 74 72 65 65 49 73 49 6e 53 74 6d 74 28  e3BtreeIsInStmt(
12840 70 42 74 29 20 29 7b 0a 20 20 20 20 20 20 72 63  pBt) ){.      rc
12850 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
12860 65 67 69 6e 53 74 6d 74 28 70 42 74 29 3b 0a 20  eginStmt(pBt);. 
12870 20 20 20 20 20 70 2d 3e 6f 70 65 6e 65 64 53 74       p->openedSt
12880 61 74 65 6d 65 6e 74 20 3d 20 31 3b 0a 20 20 20  atement = 1;.   
12890 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
128a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75  }../* Opcode: Au
128b0 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a  toCommit P1 P2 *
128c0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74   * *.**.** Set t
128d0 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74 6f  he database auto
128e0 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20  -commit flag to 
128f0 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20  P1 (1 or 0). If 
12900 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c  P2 is true, roll
12910 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72  .** back any cur
12920 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74  rently active bt
12930 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ree transactions
12940 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61  . If there are a
12950 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73  ny active.** VMs
12960 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69   (apart from thi
12970 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 74 68 65  s one), then the
12980 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c 42   COMMIT or ROLLB
12990 41 43 4b 20 73 74 61 74 65 6d 65 6e 74 20 66 61  ACK statement fa
129a0 69 6c 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ils..**.** This 
129b0 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73  instruction caus
129c0 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c  es the VM to hal
129d0 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75  t..*/.case OP_Au
129e0 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 75 38  toCommit: {.  u8
129f0 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
12a00 75 38 20 72 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f  u8 rollback = pO
12a10 70 2d 3e 70 32 3b 0a 0a 20 20 61 73 73 65 72 74  p->p2;..  assert
12a20 28 20 69 3d 3d 31 20 7c 7c 20 69 3d 3d 30 20 29  ( i==1 || i==0 )
12a30 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d 31  ;.  assert( i==1
12a40 20 7c 7c 20 72 6f 6c 6c 62 61 63 6b 3d 3d 30 20   || rollback==0 
12a50 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 64 62  );..  assert( db
12a60 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e  ->activeVdbeCnt>
12a70 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73  0 );  /* At leas
12a80 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73  t this one VM is
12a90 20 61 63 74 69 76 65 20 2a 2f 0a 0a 20 20 69 66   active */..  if
12aa0 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65  ( db->activeVdbe
12ab0 43 6e 74 3e 31 20 26 26 20 69 20 26 26 20 21 64  Cnt>1 && i && !d
12ac0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b  b->autoCommit ){
12ad0 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20  .    /* If this 
12ae0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c  instruction impl
12af0 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20  ements a COMMIT 
12b00 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 6f 74 68  or ROLLBACK, oth
12b10 65 72 20 56 4d 73 20 61 72 65 0a 20 20 20 20 2a  er VMs are.    *
12b20 2a 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c  * still running,
12b30 20 61 6e 64 20 61 20 74 72 61 6e 73 61 63 74 69   and a transacti
12b40 6f 6e 20 69 73 20 61 63 74 69 76 65 2c 20 72 65  on is active, re
12b50 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e  turn an error in
12b60 64 69 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20  dicating.    ** 
12b70 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
12b80 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
12b90 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a   first. .    */.
12ba0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
12bb0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
12bc0 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 25 73  , db, "cannot %s
12bd0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22   transaction - "
12be0 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74  .        "SQL st
12bf0 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
12c00 72 65 73 73 22 2c 0a 20 20 20 20 20 20 20 20 72  ress",.        r
12c10 6f 6c 6c 62 61 63 6b 20 3f 20 22 72 6f 6c 6c 62  ollback ? "rollb
12c20 61 63 6b 22 20 3a 20 22 63 6f 6d 6d 69 74 22 29  ack" : "commit")
12c30 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
12c40 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65  E_ERROR;.  }else
12c50 20 69 66 28 20 69 21 3d 64 62 2d 3e 61 75 74 6f   if( i!=db->auto
12c60 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66  Commit ){.    if
12c70 28 20 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20  ( pOp->p2 ){.   
12c80 20 20 20 61 73 73 65 72 74 28 20 69 3d 3d 31 20     assert( i==1 
12c90 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
12ca0 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 29 3b  RollbackAll(db);
12cb0 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43  .      db->autoC
12cc0 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d  ommit = 1;.    }
12cd0 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
12ce0 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 69 3b 0a  autoCommit = i;.
12cf0 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
12d00 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51  3VdbeHalt(p)==SQ
12d10 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
12d20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b       p->pc = pc;
12d30 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74  .        db->aut
12d40 6f 43 6f 6d 6d 69 74 20 3d 20 31 2d 69 3b 0a 20  oCommit = 1-i;. 
12d50 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
12d60 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
12d70 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64  .        goto vd
12d80 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
12d90 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
12da0 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   p->rc==SQLITE_O
12db0 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  K ){.      rc = 
12dc0 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20  SQLITE_DONE;.   
12dd0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
12de0 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
12df0 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20  .    }.    goto 
12e00 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d  vdbe_return;.  }
12e10 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
12e20 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
12e30 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20  ErrMsg, db,.    
12e40 20 20 20 20 28 21 69 29 3f 22 63 61 6e 6e 6f 74      (!i)?"cannot
12e50 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63   start a transac
12e60 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72  tion within a tr
12e70 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20  ansaction":(.   
12e80 20 20 20 20 20 28 72 6f 6c 6c 62 61 63 6b 29 3f       (rollback)?
12e90 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b  "cannot rollback
12ea0 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
12eb0 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20  n is active":.  
12ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ed0 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20   "cannot commit 
12ee0 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
12ef0 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20   is active"));. 
12f00 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20          .    rc 
12f10 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
12f20 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12f30 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73  /* Opcode: Trans
12f40 61 63 74 69 6f 6e 20 50 31 20 50 32 20 2a 20 2a  action P1 P2 * *
12f50 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61   *.**.** Begin a
12f60 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54   transaction.  T
12f70 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65  he transaction e
12f80 6e 64 73 20 77 68 65 6e 20 61 20 43 6f 6d 6d 69  nds when a Commi
12f90 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a 2a  t or Rollback.**
12fa0 20 6f 70 63 6f 64 65 20 69 73 20 65 6e 63 6f 75   opcode is encou
12fb0 6e 74 65 72 65 64 2e 20 20 44 65 70 65 6e 64 69  ntered.  Dependi
12fc0 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43 4f 4e  ng on the ON CON
12fd0 46 4c 49 43 54 20 73 65 74 74 69 6e 67 2c 20 74  FLICT setting, t
12fe0 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  he.** transactio
12ff0 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20  n might also be 
13000 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66 20 61  rolled back if a
13010 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75  n error is encou
13020 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31  ntered..**.** P1
13030 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
13040 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
13050 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  le on which the 
13060 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a  transaction is.*
13070 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65  * started.  Inde
13080 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20  x 0 is the main 
13090 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
130a0 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68 65  d index 1 is the
130b0 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f  .** file used fo
130c0 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  r temporary tabl
130d0 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20  es.  Indices of 
130e0 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73  2 or more are us
130f0 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68  ed for.** attach
13100 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a  ed databases..**
13110 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e  .** If P2 is non
13120 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72  -zero, then a wr
13130 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite-transaction 
13140 69 73 20 73 74 61 72 74 65 64 2e 20 20 41 20 52  is started.  A R
13150 45 53 45 52 56 45 44 20 6c 6f 63 6b 20 69 73 0a  ESERVED lock is.
13160 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74  ** obtained on t
13170 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
13180 20 77 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72   when a write-tr
13190 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
131a0 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74 68  rted.  No.** oth
131b0 65 72 20 70 72 6f 63 65 73 73 20 63 61 6e 20 73  er process can s
131c0 74 61 72 74 20 61 6e 6f 74 68 65 72 20 77 72 69  tart another wri
131d0 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77  te transaction w
131e0 68 69 6c 65 20 74 68 69 73 20 74 72 61 6e 73 61  hile this transa
131f0 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64 65  ction is.** unde
13200 72 77 61 79 2e 20 20 53 74 61 72 74 69 6e 67 20  rway.  Starting 
13210 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  a write transact
13220 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74 65 73  ion also creates
13230 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72   a rollback jour
13240 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74 65 20  nal. A.** write 
13250 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74  transaction must
13260 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f   be started befo
13270 72 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20 63  re any changes c
13280 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68  an be made to th
13290 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20  e.** database.  
132a0 49 66 20 50 32 20 69 73 20 32 20 6f 72 20 67 72  If P2 is 2 or gr
132b0 65 61 74 65 72 20 74 68 65 6e 20 61 6e 20 45 58  eater then an EX
132c0 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69 73 20  CLUSIVE lock is 
132d0 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64 0a 2a 2a  also obtained.**
132e0 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a 2a   on the file..**
132f0 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72  .** If P2 is zer
13300 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d 6c  o, then a read-l
13310 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ock is obtained 
13320 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
13330 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  file..*/.case OP
13340 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a  _Transaction: {.
13350 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70    int i = pOp->p
13360 31 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  1;.  Btree *pBt;
13370 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ..  assert( i>=0
13380 20 26 26 20 69 3c 64 62 2d 3e 6e 44 62 20 29 3b   && i<db->nDb );
13390 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
133a0 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69  treeMask & (1<<i
133b0 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d  ))!=0 );.  pBt =
133c0 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b   db->aDb[i].pBt;
133d0 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20  ..  if( pBt ){. 
133e0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
133f0 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
13400 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  Bt, pOp->p2);.  
13410 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
13420 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70  _BUSY ){.      p
13430 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
13440 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
13450 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
13460 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
13470 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  n;.    }.    if(
13480 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc!=SQLITE_OK &
13490 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 52 45 41  & rc!=SQLITE_REA
134a0 44 4f 4e 4c 59 20 2f 2a 20 26 26 20 72 63 21 3d  DONLY /* && rc!=
134b0 53 51 4c 49 54 45 5f 42 55 53 59 20 2a 2f 20 29  SQLITE_BUSY */ )
134c0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
134d0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
134e0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
134f0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
13500 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20  : ReadCookie P1 
13510 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
13520 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62  Read cookie numb
13530 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62  er P3 from datab
13540 61 73 65 20 50 31 20 61 6e 64 20 77 72 69 74 65  ase P1 and write
13550 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65   it into registe
13560 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 30 20 69  r P2..** P3==0 i
13570 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  s the schema ver
13580 73 69 6f 6e 2e 20 20 50 33 3d 3d 31 20 69 73 20  sion.  P3==1 is 
13590 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  the database for
135a0 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 32 20 69 73  mat..** P3==2 is
135b0 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64   the recommended
135c0 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69 7a   pager cache siz
135d0 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  e, and so forth.
135e0 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68    P1==0 is.** th
135f0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
13600 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69  file and P1==1 i
13610 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
13620 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  ile used to stor
13630 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74  e.** temporary t
13640 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ables..**.** If 
13650 50 31 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20  P1 is negative, 
13660 74 68 65 6e 20 74 68 69 73 20 69 73 20 61 20 72  then this is a r
13670 65 71 75 65 73 74 20 74 6f 20 72 65 61 64 20 74  equest to read t
13680 68 65 20 73 69 7a 65 20 6f 66 20 61 0a 2a 2a 20  he size of a.** 
13690 64 61 74 61 62 61 73 65 73 20 66 72 65 65 2d 6c  databases free-l
136a0 69 73 74 2e 20 50 33 20 6d 75 73 74 20 62 65 20  ist. P3 must be 
136b0 73 65 74 20 74 6f 20 31 20 69 6e 20 74 68 69 73  set to 1 in this
136c0 20 63 61 73 65 2e 20 54 68 65 20 61 63 74 75 61   case. The actua
136d0 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 61 63  l.** database ac
136e0 63 65 73 73 65 64 20 69 73 20 28 28 50 31 2b 31  cessed is ((P1+1
136f0 29 2a 2d 31 29 2e 20 46 6f 72 20 65 78 61 6d 70  )*-1). For examp
13700 6c 65 2c 20 61 20 50 31 20 70 61 72 61 6d 65 74  le, a P1 paramet
13710 65 72 20 6f 66 20 2d 31 0a 2a 2a 20 63 6f 72 72  er of -1.** corr
13720 65 73 70 6f 6e 64 73 20 74 6f 20 64 61 74 61 62  esponds to datab
13730 61 73 65 20 30 20 28 22 6d 61 69 6e 22 29 2c 20  ase 0 ("main"), 
13740 61 20 50 31 20 6f 66 20 2d 32 20 69 73 20 64 61  a P1 of -2 is da
13750 74 61 62 61 73 65 20 31 20 28 22 74 65 6d 70 22  tabase 1 ("temp"
13760 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d  )..**.** There m
13770 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f  ust be a read-lo
13780 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
13790 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61  se (either a tra
137a0 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74  nsaction.** must
137b0 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74   be started or t
137c0 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20  here must be an 
137d0 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66  open cursor) bef
137e0 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67  ore.** executing
137f0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
13800 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
13810 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20  adCookie: {     
13820 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
13830 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
13840 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
13850 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  nt iDb = pOp->p1
13860 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 20  ;.  int iCookie 
13870 3d 20 70 4f 70 2d 3e 70 33 3b 0a 0a 20 20 61 73  = pOp->p3;..  as
13880 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51  sert( pOp->p3<SQ
13890 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
138a0 41 20 29 3b 0a 20 20 69 66 28 20 69 44 62 3c 30  A );.  if( iDb<0
138b0 20 29 7b 0a 20 20 20 20 69 44 62 20 3d 20 28 2d   ){.    iDb = (-
138c0 31 2a 28 69 44 62 2b 31 29 29 3b 0a 20 20 20 20  1*(iDb+1));.    
138d0 69 43 6f 6f 6b 69 65 20 2a 3d 20 2d 31 3b 0a 20  iCookie *= -1;. 
138e0 20 7d 0a 20 20 61 73 73 65 72 74 28 20 69 44 62   }.  assert( iDb
138f0 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
13900 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
13910 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
13920 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
13930 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
13940 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b   (1<<iDb))!=0 );
13950 0a 20 20 2f 2a 20 54 68 65 20 69 6e 64 65 78 69  .  /* The indexi
13960 6e 67 20 6f 66 20 6d 65 74 61 20 76 61 6c 75 65  ng of meta value
13970 73 20 61 74 20 74 68 65 20 73 63 68 65 6d 61 20  s at the schema 
13980 6c 61 79 65 72 20 69 73 20 6f 66 66 20 62 79 20  layer is off by 
13990 6f 6e 65 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68  one from.  ** th
139a0 65 20 69 6e 64 65 78 69 6e 67 20 69 6e 20 74 68  e indexing in th
139b0 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20  e btree layer.  
139c0 54 68 65 20 62 74 72 65 65 20 63 6f 6e 73 69 64  The btree consid
139d0 65 72 73 20 6d 65 74 61 5b 30 5d 20 74 6f 0a 20  ers meta[0] to. 
139e0 20 2a 2a 20 62 65 20 74 68 65 20 6e 75 6d 62 65   ** be the numbe
139f0 72 20 6f 66 20 66 72 65 65 20 70 61 67 65 73 20  r of free pages 
13a00 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
13a10 28 61 20 72 65 61 64 2d 6f 6e 6c 79 20 76 61 6c  (a read-only val
13a20 75 65 29 0a 20 20 2a 2a 20 61 6e 64 20 6d 65 74  ue).  ** and met
13a30 61 5b 31 5d 20 74 6f 20 62 65 20 74 68 65 20 73  a[1] to be the s
13a40 63 68 65 6d 61 20 63 6f 6f 6b 69 65 2e 20 20 54  chema cookie.  T
13a50 68 65 20 73 63 68 65 6d 61 20 6c 61 79 65 72 20  he schema layer 
13a60 63 6f 6e 73 69 64 65 72 73 0a 20 20 2a 2a 20 6d  considers.  ** m
13a70 65 74 61 5b 31 5d 20 74 6f 20 62 65 20 74 68 65  eta[1] to be the
13a80 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 2e 20   schema cookie. 
13a90 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 73   So we have to s
13aa0 68 69 66 74 20 74 68 65 20 69 6e 64 65 78 0a 20  hift the index. 
13ab0 20 2a 2a 20 62 79 20 6f 6e 65 20 69 6e 20 74 68   ** by one in th
13ac0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
13ad0 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 72 63  ement..  */.  rc
13ae0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 47   = sqlite3BtreeG
13af0 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69  etMeta(db->aDb[i
13b00 44 62 5d 2e 70 42 74 2c 20 31 20 2b 20 69 43 6f  Db].pBt, 1 + iCo
13b10 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d  okie, (u32 *)&iM
13b20 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  eta);.  pOut->u.
13b30 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 4d 65 6d  i = iMeta;.  Mem
13b40 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
13b50 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72  , MEM_Int);.  br
13b60 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13b70 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20  e: SetCookie P1 
13b80 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
13b90 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e  Write the conten
13ba0 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
13bb0 20 28 69 6e 74 65 72 70 72 65 74 65 64 20 61 73   (interpreted as
13bc0 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20   an integer).** 
13bd0 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62  into cookie numb
13be0 65 72 20 50 32 20 6f 66 20 64 61 74 61 62 61 73  er P2 of databas
13bf0 65 20 50 31 2e 0a 2a 2a 20 50 32 3d 3d 30 20 69  e P1..** P2==0 i
13c00 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  s the schema ver
13c10 73 69 6f 6e 2e 20 20 50 32 3d 3d 31 20 69 73 20  sion.  P2==1 is 
13c20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  the database for
13c30 6d 61 74 2e 0a 2a 2a 20 50 32 3d 3d 32 20 69 73  mat..** P2==2 is
13c40 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64   the recommended
13c50 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69 7a   pager cache siz
13c60 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  e, and so forth.
13c70 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68    P1==0 is.** th
13c80 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
13c90 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69  file and P1==1 i
13ca0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
13cb0 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  ile used to stor
13cc0 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74  e.** temporary t
13cd0 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74  ables..**.** A t
13ce0 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20  ransaction must 
13cf0 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72  be started befor
13d00 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73  e executing this
13d10 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
13d20 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b   OP_SetCookie: {
13d30 20 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f         /* in3 */
13d40 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73  .  Db *pDb;.  as
13d50 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51  sert( pOp->p2<SQ
13d60 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
13d70 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  A );.  assert( p
13d80 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
13d90 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
13da0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
13db0 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f  reeMask & (1<<pO
13dc0 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
13dd0 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70  pDb = &db->aDb[p
13de0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
13df0 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29  t( pDb->pBt!=0 )
13e00 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
13e10 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
13e20 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74  3);.  /* See not
13e30 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68  e about index sh
13e40 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61  ifting on OP_Rea
13e50 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20  dCookie */.  rc 
13e60 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70  = sqlite3BtreeUp
13e70 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42  dateMeta(pDb->pB
13e80 74 2c 20 31 2b 70 4f 70 2d 3e 70 32 2c 20 28 69  t, 1+pOp->p2, (i
13e90 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20  nt)pIn3->u.i);. 
13ea0 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20   if( pOp->p2==0 
13eb0 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74  ){.    /* When t
13ec0 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
13ed0 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64   changes, record
13ee0 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20   the new cookie 
13ef0 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20  internally */.  
13f00 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
13f10 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20  schema_cookie = 
13f20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64  pIn3->u.i;.    d
13f30 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
13f40 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
13f50 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
13f60 70 2d 3e 70 32 3d 3d 31 20 29 7b 0a 20 20 20 20  p->p2==1 ){.    
13f70 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67 65  /* Record change
13f80 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66 6f  s in the file fo
13f90 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d  rmat */.    pDb-
13fa0 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
13fb0 6f 72 6d 61 74 20 3d 20 70 49 6e 33 2d 3e 75 2e  ormat = pIn3->u.
13fc0 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  i;.  }.  if( pOp
13fd0 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f  ->p1==1 ){.    /
13fe0 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  * Invalidate all
13ff0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
14000 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68  ents whenever th
14010 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a  e TEMP database.
14020 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73      ** schema is
14030 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65   changed.  Ticke
14040 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73  t #1644 */.    s
14050 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
14060 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
14070 62 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  b);.  }.  break;
14080 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  .}../* Opcode: V
14090 65 72 69 66 79 43 6f 6f 6b 69 65 20 50 31 20 50  erifyCookie P1 P
140a0 32 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  2 *.**.** Check 
140b0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 67 6c 6f  the value of glo
140c0 62 61 6c 20 64 61 74 61 62 61 73 65 20 70 61 72  bal database par
140d0 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 30 20  ameter number 0 
140e0 28 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 76  (the.** schema v
140f0 65 72 73 69 6f 6e 29 20 61 6e 64 20 6d 61 6b 65  ersion) and make
14100 20 73 75 72 65 20 69 74 20 69 73 20 65 71 75 61   sure it is equa
14110 6c 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 50 31  l to P2.  .** P1
14120 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
14130 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69 73   number which is
14140 20 30 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20   0 for the main 
14150 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
14160 20 61 6e 64 20 31 20 66 6f 72 20 74 68 65 20 66   and 1 for the f
14170 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d 70  ile holding temp
14180 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  orary tables and
14190 20 73 6f 6d 65 20 68 69 67 68 65 72 20 6e 75 6d   some higher num
141a0 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78 69 6c  ber.** for auxil
141b0 69 61 72 79 20 64 61 74 61 62 61 73 65 73 2e 0a  iary databases..
141c0 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65  **.** The cookie
141d0 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c   changes its val
141e0 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ue whenever the 
141f0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
14200 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73  changes..** This
14210 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73   operation is us
14220 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68 65  ed to detect whe
14230 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69  n that the cooki
14240 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a  e has changed.**
14250 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63 75   and that the cu
14260 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65  rrent process ne
14270 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74 68  eds to reread th
14280 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20  e schema..**.** 
14290 45 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63  Either a transac
142a0 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 68 61  tion needs to ha
142b0 76 65 20 62 65 65 6e 20 73 74 61 72 74 65 64 20  ve been started 
142c0 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e 65  or an OP_Open ne
142d0 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65 78 65  eds.** to be exe
142e0 63 75 74 65 64 20 28 74 6f 20 65 73 74 61 62 6c  cuted (to establ
142f0 69 73 68 20 61 20 72 65 61 64 20 6c 6f 63 6b 29  ish a read lock)
14300 20 62 65 66 6f 72 65 20 74 68 69 73 20 6f 70 63   before this opc
14310 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65  ode is.** invoke
14320 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 65  d..*/.case OP_Ve
14330 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20  rifyCookie: {.  
14340 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 42 74 72  int iMeta;.  Btr
14350 65 65 20 2a 70 42 74 3b 0a 20 20 61 73 73 65 72  ee *pBt;.  asser
14360 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
14370 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
14380 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
14390 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31  ->btreeMask & (1
143a0 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29  <<pOp->p1))!=0 )
143b0 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ;.  pBt = db->aD
143c0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
143d0 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20    if( pBt ){.   
143e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
143f0 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20 31  eeGetMeta(pBt, 1
14400 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
14410 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
14420 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
14430 20 20 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20     iMeta = 0;.  
14440 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  }.  if( rc==SQLI
14450 54 45 5f 4f 4b 20 26 26 20 69 4d 65 74 61 21 3d  TE_OK && iMeta!=
14460 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 73  pOp->p2 ){.    s
14470 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
14480 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
14490 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73    p->zErrMsg = s
144a0 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 64  qlite3DbStrDup(d
144b0 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63 68  b, "database sch
144c0 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22  ema has changed"
144d0 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  );.    /* If the
144e0 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66   schema-cookie f
144f0 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
14500 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68   file matches th
14510 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a  e cookie .    **
14520 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68 65   stored with the
14530 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65   in-memory repre
14540 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
14550 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20   schema, do.    
14560 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68  ** not reload th
14570 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68  e schema from th
14580 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
14590 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49  .    **.    ** I
145a0 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73  f virtual-tables
145b0 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69   are in use, thi
145c0 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e  s is not just an
145d0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20   optimization.. 
145e0 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74     ** Often, v-t
145f0 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69  ables store thei
14600 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20  r data in other 
14610 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77  SQLite tables, w
14620 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20  hich.    ** are 
14630 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74  queried from wit
14640 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20  hin xNext() and 
14650 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65  other v-table me
14660 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20  thods using.    
14670 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65 72  ** prepared quer
14680 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20 71  ies. If such a q
14690 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64  uery is out-of-d
146a0 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77  ate, we do not w
146b0 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69  ant to.    ** di
146c0 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62 61  scard the databa
146d0 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68  se schema, as th
146e0 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c  e user code impl
146f0 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20  ementing the.   
14700 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c   ** v-table woul
14710 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65 61  d have to be rea
14720 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  dy for the sqlit
14730 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
14740 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20  e itself.    ** 
14750 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65  to be invalidate
14760 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74  d whenever sqlit
14770 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c  e3_step() is cal
14780 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  led from within 
14790 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c  .    ** a v-tabl
147a0 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f  e method..    */
147b0 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62  .    if( db->aDb
147c0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d  [pOp->p1].pSchem
147d0 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  a->schema_cookie
147e0 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20  !=iMeta ){.     
147f0 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74   sqlite3ResetInt
14800 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20  ernalSchema(db, 
14810 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a  pOp->p1);.    }.
14820 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
14830 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
14840 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 72 63  ents(db);.    rc
14850 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41   = SQLITE_SCHEMA
14860 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
14870 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
14880 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20 50  nRead P1 P2 P3 P
14890 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  4 P5.**.** Open 
148a0 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73  a read-only curs
148b0 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  or for the datab
148c0 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20  ase table whose 
148d0 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20  root page is.** 
148e0 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  P2 in a database
148f0 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61   file.  The data
14900 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74  base file is det
14910 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a  ermined by P3. .
14920 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74  ** P3==0 means t
14930 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
14940 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68  , P3==1 means th
14950 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20  e database used 
14960 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72  for .** temporar
14970 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33  y tables, and P3
14980 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68  >1 means used th
14990 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
149a0 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61  attached.** data
149b0 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20  base.  Give the 
149c0 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64  new cursor an id
149d0 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20  entifier of P1. 
149e0 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65   The P1.** value
149f0 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f  s need not be co
14a00 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c  ntiguous but all
14a10 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c   P1 values shoul
14a20 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67  d be small integ
14a30 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e  ers..** It is an
14a40 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f   error for P1 to
14a50 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a   be negative..**
14a60 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65  .** If P5!=0 the
14a70 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e  n use the conten
14a80 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  t of register P2
14a90 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67   as the root pag
14aa0 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61  e, not.** the va
14ab0 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66  lue of P2 itself
14ac0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69  ..**.** There wi
14ad0 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63  ll be a read loc
14ae0 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
14af0 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72 65  e whenever there
14b00 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63   is an.** open c
14b10 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64  ursor.  If the d
14b20 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f  atabase was unlo
14b30 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  cked prior to th
14b40 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  is instruction.*
14b50 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f  * then a read lo
14b60 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20 61  ck is acquired a
14b70 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 69  s part of this i
14b80 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72  nstruction.  A r
14b90 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f  ead.** lock allo
14ba0 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ws other process
14bb0 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20 64  es to read the d
14bc0 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f 68  atabase but proh
14bd0 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68  ibits.** any oth
14be0 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20  er process from 
14bf0 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64 61  modifying the da
14c00 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65 61  tabase.  The rea
14c10 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c  d lock is.** rel
14c20 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63  eased when all c
14c30 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65  ursors are close
14c40 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73 74  d.  If this inst
14c50 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73  ruction attempts
14c60 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61  .** to get a rea
14c70 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73  d lock but fails
14c80 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65 72  , the script ter
14c90 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a  minates with an.
14ca0 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65  ** SQLITE_BUSY e
14cb0 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  rror code..**.**
14cc0 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69 73   The P4 value is
14cd0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
14ce0 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
14cf0 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  e that defines t
14d00 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 61 6e  he.** content an
14d10 64 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  d collating sequ
14d20 65 6e 63 65 20 6f 66 20 69 6e 64 69 63 65 73 2e  ence of indices.
14d30 20 20 50 34 20 69 73 20 4e 55 4c 4c 20 66 6f 72    P4 is NULL for
14d40 20 63 75 72 73 6f 72 73 0a 2a 2a 20 74 68 61 74   cursors.** that
14d50 20 61 72 65 20 6e 6f 74 20 70 6f 69 6e 74 69 6e   are not pointin
14d60 67 20 74 6f 20 69 6e 64 69 63 65 73 2e 0a 2a 2a  g to indices..**
14d70 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65  .** See also Ope
14d80 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70  nWrite..*/./* Op
14d90 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20  code: OpenWrite 
14da0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
14db0 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64  *.** Open a read
14dc0 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61  /write cursor na
14dd0 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61  med P1 on the ta
14de0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
14df0 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20  se root.** page 
14e00 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35  is P2.  Or if P5
14e10 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74  !=0 use the cont
14e20 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
14e30 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a  P2 to find the.*
14e40 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a  * root page..**.
14e50 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
14e60 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
14e70 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
14e80 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ure that defines
14e90 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20   the.** content 
14ea0 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  and collating se
14eb0 71 75 65 6e 63 65 20 6f 66 20 69 6e 64 69 63 65  quence of indice
14ec0 73 2e 20 20 50 34 20 69 73 20 4e 55 4c 4c 20 66  s.  P4 is NULL f
14ed0 6f 72 20 63 75 72 73 6f 72 73 0a 2a 2a 20 74 68  or cursors.** th
14ee0 61 74 20 61 72 65 20 6e 6f 74 20 70 6f 69 6e 74  at are not point
14ef0 69 6e 67 20 74 6f 20 69 6e 64 69 63 65 73 2e 0a  ing to indices..
14f00 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
14f10 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73  uction works jus
14f20 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20  t like OpenRead 
14f30 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
14f40 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a  pens the cursor.
14f50 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65  ** in read/write
14f60 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69   mode.  For a gi
14f70 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65  ven table, there
14f80 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d   can be one or m
14f90 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a  ore read-only.**
14fa0 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69   cursors or a si
14fb0 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20  ngle read/write 
14fc0 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62  cursor but not b
14fd0 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  oth..**.** See a
14fe0 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f  lso OpenRead..*/
14ff0 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61  .case OP_OpenRea
15000 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57  d:.case OP_OpenW
15010 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 69 20  rite: {.  int i 
15020 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e 74  = pOp->p1;.  int
15030 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
15040 20 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d 3e   int iDb = pOp->
15050 70 33 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67  p3;.  int wrFlag
15060 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20  ;.  Btree *pX;. 
15070 20 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20   Cursor *pCur;. 
15080 20 44 62 20 2a 70 44 62 3b 0a 20 20 0a 20 20 61   Db *pDb;.  .  a
15090 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
150a0 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
150b0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
150c0 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44  reeMask & (1<<iD
150d0 62 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20  b))!=0 );.  pDb 
150e0 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b  = &db->aDb[iDb];
150f0 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74  .  pX = pDb->pBt
15100 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58 21 3d  ;.  assert( pX!=
15110 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
15120 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57  opcode==OP_OpenW
15130 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72 46 6c  rite ){.    wrFl
15140 61 67 20 3d 20 31 3b 0a 20 20 20 20 69 66 28 20  ag = 1;.    if( 
15150 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
15160 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d  le_format < p->m
15170 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
15180 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69  t ){.      p->mi
15190 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
151a0 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d   = pDb->pSchema-
151b0 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20  >file_format;.  
151c0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
151d0 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d   wrFlag = 0;.  }
151e0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
151f0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  {.    assert( p2
15200 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  >0 );.    assert
15210 28 20 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ( p2<=p->nMem );
15220 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 70 2d 3e  .    pIn2 = &p->
15230 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 73 71  aMem[p2];.    sq
15240 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
15250 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20  gerify(pIn2);.  
15260 20 20 70 32 20 3d 20 70 49 6e 32 2d 3e 75 2e 69    p2 = pIn2->u.i
15270 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  ;.    assert( p2
15280 3e 3d 32 20 29 3b 0a 20 20 7d 0a 20 20 61 73 73  >=2 );.  }.  ass
15290 65 72 74 28 20 69 3e 3d 30 20 29 3b 0a 20 20 70  ert( i>=0 );.  p
152a0 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
152b0 72 73 6f 72 28 70 2c 20 69 2c 20 26 70 4f 70 5b  rsor(p, i, &pOp[
152c0 2d 31 5d 2c 20 69 44 62 2c 20 31 29 3b 0a 20 20  -1], iDb, 1);.  
152d0 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f  if( pCur==0 ) go
152e0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75  to no_mem;.  pCu
152f0 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  r->nullRow = 1;.
15300 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
15310 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32  reeCursor(pX, p2
15320 2c 20 77 72 46 6c 61 67 2c 20 70 4f 70 2d 3e 70  , wrFlag, pOp->p
15330 34 2e 70 2c 20 70 43 75 72 2d 3e 70 43 75 72 73  4.p, pCur->pCurs
15340 6f 72 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  or);.  if( pOp->
15350 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
15360 46 4f 20 29 7b 0a 20 20 20 20 70 43 75 72 2d 3e  FO ){.    pCur->
15370 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
15380 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  p4.pKeyInfo;.   
15390 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 2d   pCur->pKeyInfo-
153a0 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62  >enc = ENC(p->db
153b0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
153c0 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d  pCur->pKeyInfo =
153d0 20 30 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68   0;.  }.  switch
153e0 28 20 72 63 20 29 7b 0a 20 20 20 20 63 61 73 65  ( rc ){.    case
153f0 20 53 51 4c 49 54 45 5f 42 55 53 59 3a 20 7b 0a   SQLITE_BUSY: {.
15400 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
15410 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20  ;.      p->rc = 
15420 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
15430 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  ;.      goto vdb
15440 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a  e_return;.    }.
15450 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
15460 4f 4b 3a 20 7b 0a 20 20 20 20 20 20 69 6e 74 20  OK: {.      int 
15470 66 6c 61 67 73 20 3d 20 73 71 6c 69 74 65 33 42  flags = sqlite3B
15480 74 72 65 65 46 6c 61 67 73 28 70 43 75 72 2d 3e  treeFlags(pCur->
15490 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
154a0 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69  /* Sanity checki
154b0 6e 67 2e 20 20 4f 6e 6c 79 20 74 68 65 20 6c 6f  ng.  Only the lo
154c0 77 65 72 20 66 6f 75 72 20 62 69 74 73 20 6f 66  wer four bits of
154d0 20 74 68 65 20 66 6c 61 67 73 20 62 79 74 65 20   the flags byte 
154e0 73 68 6f 75 6c 64 0a 20 20 20 20 20 20 2a 2a 20  should.      ** 
154f0 62 65 20 75 73 65 64 2e 20 20 42 69 74 20 33 20  be used.  Bit 3 
15500 28 6d 61 73 6b 20 30 78 30 38 29 20 69 73 20 75  (mask 0x08) is u
15510 6e 70 72 65 64 69 63 74 61 62 6c 65 2e 20 20 54  npredictable.  T
15520 68 65 20 6c 6f 77 65 72 20 33 20 62 69 74 73 0a  he lower 3 bits.
15530 20 20 20 20 20 20 2a 2a 20 28 6d 61 73 6b 20 30        ** (mask 0
15540 78 30 37 29 20 73 68 6f 75 6c 64 20 62 65 20 65  x07) should be e
15550 69 74 68 65 72 20 35 20 28 69 6e 74 6b 65 79 2b  ither 5 (intkey+
15560 6c 65 61 66 64 61 74 61 20 66 6f 72 20 74 61 62  leafdata for tab
15570 6c 65 73 29 20 6f 72 0a 20 20 20 20 20 20 2a 2a  les) or.      **
15580 20 32 20 28 7a 65 72 6f 64 61 74 61 20 66 6f 72   2 (zerodata for
15590 20 69 6e 64 69 63 65 73 29 2e 20 20 49 66 20 74   indices).  If t
155a0 68 65 73 65 20 63 6f 6e 64 69 74 69 6f 6e 73 20  hese conditions 
155b0 61 72 65 20 6e 6f 74 20 6d 65 74 20 69 74 20 63  are not met it c
155c0 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f 6e 6c 79  an.      ** only
155d0 20 6d 65 61 6e 20 74 68 61 74 20 77 65 20 61 72   mean that we ar
155e0 65 20 64 65 61 6c 69 6e 67 20 77 69 74 68 20 61  e dealing with a
155f0 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
15600 65 20 66 69 6c 65 0a 20 20 20 20 20 20 2a 2f 0a  e file.      */.
15610 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
15620 20 26 20 30 78 66 30 29 21 3d 30 20 7c 7c 20 28   & 0xf0)!=0 || (
15630 28 66 6c 61 67 73 20 26 20 30 78 30 37 29 21 3d  (flags & 0x07)!=
15640 35 20 26 26 20 28 66 6c 61 67 73 20 26 20 30 78  5 && (flags & 0x
15650 30 37 29 21 3d 32 29 20 29 7b 0a 20 20 20 20 20  07)!=2) ){.     
15660 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
15670 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
15680 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
15690 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
156a0 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 75 72      }.      pCur
156b0 2d 3e 69 73 54 61 62 6c 65 20 3d 20 28 66 6c 61  ->isTable = (fla
156c0 67 73 20 26 20 42 54 52 45 45 5f 49 4e 54 4b 45  gs & BTREE_INTKE
156d0 59 29 21 3d 30 3b 0a 20 20 20 20 20 20 70 43 75  Y)!=0;.      pCu
156e0 72 2d 3e 69 73 49 6e 64 65 78 20 3d 20 28 66 6c  r->isIndex = (fl
156f0 61 67 73 20 26 20 42 54 52 45 45 5f 5a 45 52 4f  ags & BTREE_ZERO
15700 44 41 54 41 29 21 3d 30 3b 0a 20 20 20 20 20 20  DATA)!=0;.      
15710 2f 2a 20 49 66 20 50 34 3d 3d 30 20 69 74 20 6d  /* If P4==0 it m
15720 65 61 6e 73 20 77 65 20 61 72 65 20 65 78 70 65  eans we are expe
15730 63 74 65 64 20 74 6f 20 6f 70 65 6e 20 61 20 74  cted to open a t
15740 61 62 6c 65 2e 20 20 49 66 20 50 34 21 3d 30 20  able.  If P4!=0 
15750 74 68 65 6e 0a 20 20 20 20 20 20 2a 2a 20 77 65  then.      ** we
15760 20 65 78 70 65 63 74 20 74 6f 20 62 65 20 6f 70   expect to be op
15770 65 6e 69 6e 67 20 61 6e 20 69 6e 64 65 78 2e 20  ening an index. 
15780 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20   If this is not 
15790 77 68 61 74 20 68 61 70 70 65 6e 65 64 2c 0a 20  what happened,. 
157a0 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65       ** then the
157b0 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6f 72   database is cor
157c0 72 75 70 74 0a 20 20 20 20 20 20 2a 2f 0a 20 20  rupt.      */.  
157d0 20 20 20 20 69 66 28 20 28 70 43 75 72 2d 3e 69      if( (pCur->i
157e0 73 54 61 62 6c 65 20 26 26 20 70 4f 70 2d 3e 70  sTable && pOp->p
157f0 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
15800 4f 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 70 43  O).       || (pC
15810 75 72 2d 3e 69 73 49 6e 64 65 78 20 26 26 20 70  ur->isIndex && p
15820 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b  Op->p4type!=P4_K
15830 45 59 49 4e 46 4f 29 20 29 7b 0a 20 20 20 20 20  EYINFO) ){.     
15840 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
15850 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
15860 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
15870 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
15880 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61      }.      brea
15890 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  k;.    }.    cas
158a0 65 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 3a 20  e SQLITE_EMPTY: 
158b0 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 69 73  {.      pCur->is
158c0 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74  Table = pOp->p4t
158d0 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b  ype!=P4_KEYINFO;
158e0 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 69 73 49  .      pCur->isI
158f0 6e 64 65 78 20 3d 20 21 70 43 75 72 2d 3e 69 73  ndex = !pCur->is
15900 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 70 43 75  Table;.      pCu
15910 72 2d 3e 70 43 75 72 73 6f 72 20 3d 20 30 3b 0a  r->pCursor = 0;.
15920 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
15930 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 62 72 65 61  E_OK;.      brea
15940 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 65 66  k;.    }.    def
15950 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 67 6f  ault: {.      go
15960 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
15970 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
15980 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
15990 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65  Opcode: OpenEphe
159a0 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34  meral P1 P2 * P4
159b0 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20   *.**.** Open a 
159c0 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f  new cursor P1 to
159d0 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
159e0 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
159f0 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e  r is always open
15a00 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76  ed read/write ev
15a10 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61  en if .** the ma
15a20 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72  in database is r
15a30 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 74  ead-only.  The t
15a40 72 61 6e 73 69 65 6e 74 20 6f 72 20 76 69 72 74  ransient or virt
15a50 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20  ual.** table is 
15a60 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69  deleted automati
15a70 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63  cally when the c
15a80 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e  ursor is closed.
15a90 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65  .**.** P2 is the
15aa0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
15ab0 6e 73 20 69 6e 20 74 68 65 20 76 69 72 74 75 61  ns in the virtua
15ac0 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  l table..** The 
15ad0 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f  cursor points to
15ae0 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69   a BTree table i
15af0 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61  f P4==0 and to a
15b00 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20   BTree index.** 
15b10 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20  if P4 is not 0. 
15b20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
15b30 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  LL, it points to
15b40 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
15b50 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66  ture.** that def
15b60 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20  ines the format 
15b70 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69  of keys in the i
15b80 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ndex..**.** This
15b90 20 6f 70 63 6f 64 65 20 77 61 73 20 6f 6e 63 65   opcode was once
15ba0 20 63 61 6c 6c 65 64 20 4f 70 65 6e 54 65 6d 70   called OpenTemp
15bb0 2e 20 20 42 75 74 20 74 68 61 74 20 63 72 65 61  .  But that crea
15bc0 74 65 64 0a 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e  ted.** confusion
15bd0 20 62 65 63 61 75 73 65 20 74 68 65 20 74 65 72   because the ter
15be0 6d 20 22 74 65 6d 70 20 74 61 62 6c 65 22 2c 20  m "temp table", 
15bf0 6d 69 67 68 74 20 72 65 66 65 72 20 65 69 74 68  might refer eith
15c00 65 72 0a 2a 2a 20 74 6f 20 61 20 54 45 4d 50 20  er.** to a TEMP 
15c10 74 61 62 6c 65 20 61 74 20 74 68 65 20 53 51 4c  table at the SQL
15c20 20 6c 65 76 65 6c 2c 20 6f 72 20 74 6f 20 61 20   level, or to a 
15c30 74 61 62 6c 65 20 6f 70 65 6e 65 64 20 62 79 0a  table opened by.
15c40 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  ** this opcode. 
15c50 20 54 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   Then this opcod
15c60 65 20 77 61 73 20 63 61 6c 6c 20 4f 70 65 6e 56  e was call OpenV
15c70 69 72 74 75 61 6c 2e 20 20 42 75 74 0a 2a 2a 20  irtual.  But.** 
15c80 74 68 61 74 20 63 72 65 61 74 65 64 20 63 6f 6e  that created con
15c90 66 75 73 69 6f 6e 20 77 69 74 68 20 74 68 65 20  fusion with the 
15ca0 77 68 6f 6c 65 20 76 69 72 74 75 61 6c 2d 74 61  whole virtual-ta
15cb0 62 6c 65 20 69 64 65 61 2e 0a 2a 2f 0a 63 61 73  ble idea..*/.cas
15cc0 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  e OP_OpenEphemer
15cd0 61 6c 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20  al: {.  int i = 
15ce0 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f  pOp->p1;.  Curso
15cf0 72 20 2a 70 43 78 3b 0a 20 20 73 74 61 74 69 63  r *pCx;.  static
15d00 20 63 6f 6e 73 74 20 69 6e 74 20 6f 70 65 6e 46   const int openF
15d10 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51  lags = .      SQ
15d20 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52  LITE_OPEN_READWR
15d30 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  ITE |.      SQLI
15d40 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c  TE_OPEN_CREATE |
15d50 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
15d60 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20  EN_EXCLUSIVE |. 
15d70 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
15d80 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c  _DELETEONCLOSE |
15d90 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
15da0 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b  EN_TRANSIENT_DB;
15db0 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ..  assert( i>=0
15dc0 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
15dd0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 69 2c  cateCursor(p, i,
15de0 20 70 4f 70 2c 20 2d 31 2c 20 31 29 3b 0a 20 20   pOp, -1, 1);.  
15df0 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
15e00 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
15e10 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
15e20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
15e30 65 46 61 63 74 6f 72 79 28 64 62 2c 20 30 2c 20  eFactory(db, 0, 
15e40 31 2c 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  1, SQLITE_DEFAUL
15e50 54 5f 54 45 4d 50 5f 43 41 43 48 45 5f 53 49 5a  T_TEMP_CACHE_SIZ
15e60 45 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 0a 20 20  E, openFlags,.  
15e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e80 20 20 20 20 20 20 20 20 20 26 70 43 78 2d 3e 70           &pCx->p
15e90 42 74 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  Bt);.  if( rc==S
15ea0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
15eb0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
15ec0 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d  eBeginTrans(pCx-
15ed0 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20 20  >pBt, 1);.  }.  
15ee0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
15ef0 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61  K ){.    /* If a
15f00 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78   transient index
15f10 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 63 72   is required, cr
15f20 65 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69  eate it by calli
15f30 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  ng.    ** sqlite
15f40 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
15f50 65 28 29 20 77 69 74 68 20 74 68 65 20 42 54 52  e() with the BTR
15f60 45 45 5f 5a 45 52 4f 44 41 54 41 20 66 6c 61 67  EE_ZERODATA flag
15f70 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f   before.    ** o
15f80 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20  pening it. If a 
15f90 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20  transient table 
15fa0 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73  is required, jus
15fb0 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a 2a  t use the.    **
15fc0 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
15fd0 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69 74  reated table wit
15fe0 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61  h root-page 1 (a
15ff0 6e 20 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e  n INTKEY table).
16000 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
16010 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
16020 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67   ){.      int pg
16030 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  no;.      assert
16040 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
16050 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20  4_KEYINFO );.   
16060 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
16070 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
16080 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c  pCx->pBt, &pgno,
16090 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 29   BTREE_ZERODATA)
160a0 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  ; .      if( rc=
160b0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
160c0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67        assert( pg
160d0 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b  no==MASTER_ROOT+
160e0 31 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  1 );.        rc 
160f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
16100 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70  rsor(pCx->pBt, p
16110 67 6e 6f 2c 20 31 2c 20 0a 20 20 20 20 20 20 20  gno, 1, .       
16120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16130 20 20 20 20 20 20 20 20 20 28 4b 65 79 49 6e 66           (KeyInf
16140 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43  o*)pOp->p4.z, pC
16150 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  x->pCursor);.   
16160 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e       pCx->pKeyIn
16170 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
16180 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20 70  yInfo;.        p
16190 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  Cx->pKeyInfo->en
161a0 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a  c = ENC(p->db);.
161b0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43        }.      pC
161c0 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a  x->isTable = 0;.
161d0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
161e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
161f0 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42  eeCursor(pCx->pB
16200 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20  t, MASTER_ROOT, 
16210 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75 72 73  1, 0, pCx->pCurs
16220 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e  or);.      pCx->
16230 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20  isTable = 1;.   
16240 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73   }.  }.  pCx->is
16250 49 6e 64 65 78 20 3d 20 21 70 43 78 2d 3e 69 73  Index = !pCx->is
16260 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b 0a  Table;.  break;.
16270 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
16280 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 2a  enPseudo P1 P2 *
16290 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20   * *.**.** Open 
162a0 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61  a new cursor tha
162b0 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61  t points to a fa
162c0 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  ke table that co
162d0 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a  ntains a single.
162e0 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20  ** row of data. 
162f0 20 41 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20   Any attempt to 
16300 77 72 69 74 65 20 61 20 73 65 63 6f 6e 64 20 72  write a second r
16310 6f 77 20 6f 66 20 64 61 74 61 20 63 61 75 73 65  ow of data cause
16320 73 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 72  s the.** first r
16330 6f 77 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64  ow to be deleted
16340 2e 20 20 41 6c 6c 20 64 61 74 61 20 69 73 20 64  .  All data is d
16350 65 6c 65 74 65 64 20 77 68 65 6e 20 74 68 65 20  eleted when the 
16360 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6c 6f  cursor is.** clo
16370 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65  sed..**.** A pse
16380 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65  udo-table create
16390 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
163a0 20 69 73 20 75 73 65 66 75 6c 20 66 6f 72 20 68   is useful for h
163b0 6f 6c 64 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 45  olding the.** NE
163c0 57 20 6f 72 20 4f 4c 44 20 74 61 62 6c 65 73 20  W or OLD tables 
163d0 69 6e 20 61 20 74 72 69 67 67 65 72 2e 20 20 41  in a trigger.  A
163e0 6c 73 6f 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  lso used to hold
163f0 20 74 68 65 20 61 20 73 69 6e 67 6c 65 0a 2a 2a   the a single.**
16400 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d   row output from
16410 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74   the sorter so t
16420 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20  hat the row can 
16430 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e  be decomposed in
16440 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c  to.** individual
16450 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74   columns using t
16460 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
16470 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ode..**.** When 
16480 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 65 78 65  OP_Insert is exe
16490 63 75 74 65 64 20 74 6f 20 69 6e 73 65 72 74 20  cuted to insert 
164a0 61 20 72 6f 77 20 69 6e 20 74 6f 20 74 68 65 20  a row in to the 
164b0 70 73 65 75 64 6f 20 74 61 62 6c 65 2c 0a 2a 2a  pseudo table,.**
164c0 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c   the pseudo-tabl
164d0 65 20 63 75 72 73 6f 72 20 6d 61 79 20 6f 72 20  e cursor may or 
164e0 6d 61 79 20 6e 6f 74 20 6d 61 6b 65 20 69 74 27  may not make it'
164f0 73 20 6f 77 6e 20 63 6f 70 79 20 6f 66 20 74 68  s own copy of th
16500 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 72 6f  e.** original ro
16510 77 20 64 61 74 61 2e 20 49 66 20 50 32 20 69 73  w data. If P2 is
16520 20 30 2c 20 74 68 65 6e 20 74 68 65 20 70 73 65   0, then the pse
16530 75 64 6f 2d 74 61 62 6c 65 20 77 69 6c 6c 20 63  udo-table will c
16540 6f 70 79 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69  opy the.** origi
16550 6e 61 6c 20 72 6f 77 20 64 61 74 61 2e 20 4f 74  nal row data. Ot
16560 68 65 72 77 69 73 65 2c 20 61 20 70 6f 69 6e 74  herwise, a point
16570 65 72 20 74 6f 20 74 68 65 20 6f 72 69 67 69 6e  er to the origin
16580 61 6c 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 0a 2a  al memory cell.*
16590 2a 20 69 73 20 73 74 6f 72 65 64 2e 20 49 6e 20  * is stored. In 
165a0 74 68 69 73 20 63 61 73 65 2c 20 74 68 65 20 76  this case, the v
165b0 64 62 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74  dbe program must
165c0 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65   ensure that the
165d0 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   .** memory cell
165e0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
165f0 72 6f 77 20 64 61 74 61 20 69 73 20 6e 6f 74 20  row data is not 
16600 6f 76 65 72 77 72 69 74 74 65 6e 20 75 6e 74 69  overwritten unti
16610 6c 20 74 68 65 0a 2a 2a 20 70 73 65 75 64 6f 20  l the.** pseudo 
16620 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 20  table is closed 
16630 28 6f 72 20 61 20 6e 65 77 20 72 6f 77 20 69 73  (or a new row is
16640 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 69   inserted into i
16650 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  t)..*/.case OP_O
16660 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 69  penPseudo: {.  i
16670 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
16680 20 20 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20    Cursor *pCx;. 
16690 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29 3b   assert( i>=0 );
166a0 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
166b0 65 43 75 72 73 6f 72 28 70 2c 20 69 2c 20 26 70  eCursor(p, i, &p
166c0 4f 70 5b 2d 31 5d 2c 20 2d 31 2c 20 30 29 3b 0a  Op[-1], -1, 0);.
166d0 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
166e0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
166f0 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
16700 20 20 70 43 78 2d 3e 70 73 65 75 64 6f 54 61 62    pCx->pseudoTab
16710 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 65  le = 1;.  pCx->e
16720 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65 20  phemPseudoTable 
16730 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78  = pOp->p2;.  pCx
16740 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20  ->isTable = 1;. 
16750 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20   pCx->isIndex = 
16760 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
16770 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20  * Opcode: Close 
16780 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
16790 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20   Close a cursor 
167a0 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
167b0 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20  d as P1.  If P1 
167c0 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e  is not.** curren
167d0 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69  tly open, this i
167e0 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20  nstruction is a 
167f0 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  no-op..*/.case O
16800 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 69 6e 74  P_Close: {.  int
16810 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
16820 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20  assert( i>=0 && 
16830 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  i<p->nCursor );.
16840 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
16850 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
16860 43 73 72 5b 69 5d 29 3b 0a 20 20 70 2d 3e 61 70  Csr[i]);.  p->ap
16870 43 73 72 5b 69 5d 20 3d 20 30 3b 0a 20 20 62 72  Csr[i] = 0;.  br
16880 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
16890 65 3a 20 4d 6f 76 65 47 65 20 50 31 20 50 32 20  e: MoveGe P1 P2 
168a0 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  P3 P4 *.**.** If
168b0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
168c0 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
168d0 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
168e0 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
168f0 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 69  ), .** use the i
16900 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
16910 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
16920 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
16930 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
16940 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
16950 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
16960 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
16970 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
16980 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
16990 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
169a0 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
169b0 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
169c0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
169d0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
169e0 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79  e smallest entry
169f0 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65   that .** is gre
16a00 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
16a10 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
16a20 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
16a30 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
16a40 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
16a50 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
16a60 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
16a70 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
16a80 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 73  to P2..**.** A s
16a90 70 65 63 69 61 6c 20 66 65 61 74 75 72 65 20 6f  pecial feature o
16aa0 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 28 61  f this opcode (a
16ab0 6e 64 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f  nd different fro
16ac0 6d 20 74 68 65 0a 2a 2a 20 72 65 6c 61 74 65 64  m the.** related
16ad0 20 4f 50 5f 4d 6f 76 65 47 74 2c 20 4f 50 5f 4d   OP_MoveGt, OP_M
16ae0 6f 76 65 4c 74 2c 20 61 6e 64 20 4f 50 5f 4d 6f  oveLt, and OP_Mo
16af0 76 65 4c 65 29 20 69 73 20 74 68 61 74 20 69 66  veLe) is that if
16b00 20 50 32 20 69 73 0a 2a 2a 20 7a 65 72 6f 20 61   P2 is.** zero a
16b10 6e 64 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20  nd P1 is an SQL 
16b20 74 61 62 6c 65 20 28 61 20 62 2d 74 72 65 65 20  table (a b-tree 
16b30 77 69 74 68 20 69 6e 74 65 67 65 72 20 6b 65 79  with integer key
16b40 73 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 73  s) then.** the s
16b50 65 65 6b 20 69 73 20 64 65 66 65 72 72 65 64 20  eek is deferred 
16b60 75 6e 74 69 6c 20 69 74 20 69 73 20 61 63 74 75  until it is actu
16b70 61 6c 6c 79 20 6e 65 65 64 65 64 2e 20 20 49 74  ally needed.  It
16b80 20 6d 69 67 68 74 20 62 65 0a 2a 2a 20 74 68 65   might be.** the
16b90 20 63 61 73 65 20 74 68 61 74 20 74 68 65 20 63   case that the c
16ba0 75 72 73 6f 72 20 69 73 20 6e 65 76 65 72 20 61  ursor is never a
16bb0 63 63 65 73 73 65 64 2e 20 20 42 79 20 64 65 66  ccessed.  By def
16bc0 65 72 72 69 6e 67 20 74 68 65 0a 2a 2a 20 73 65  erring the.** se
16bd0 65 6b 2c 20 77 65 20 61 76 6f 69 64 20 75 6e 6e  ek, we avoid unn
16be0 65 63 65 73 73 61 72 79 20 73 65 65 6b 73 2e 0a  ecessary seeks..
16bf0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
16c00 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
16c10 20 44 69 73 74 69 6e 63 74 2c 20 4d 6f 76 65 4c   Distinct, MoveL
16c20 74 2c 20 4d 6f 76 65 47 74 2c 20 4d 6f 76 65 4c  t, MoveGt, MoveL
16c30 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
16c40 4d 6f 76 65 47 74 20 50 31 20 50 32 20 50 33 20  MoveGt P1 P2 P3 
16c50 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  P4 *.**.** If cu
16c60 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
16c70 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
16c80 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
16c90 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
16ca0 0a 2a 2a 20 75 73 65 20 74 68 65 20 69 6e 74 65  .** use the inte
16cb0 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ger value in reg
16cc0 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
16cd0 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
16ce0 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
16cf0 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
16d00 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
16d10 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
16d20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
16d30 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
16d40 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
16d50 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
16d60 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
16d70 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
16d80 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73   points to the s
16d90 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68  mallest entry th
16da0 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  at .** is greate
16db0 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  r than the key v
16dc0 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
16dd0 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72  re no records gr
16de0 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74  eater than .** t
16df0 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
16e00 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
16e10 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
16e20 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
16e30 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73  d, NotFound, Dis
16e40 74 69 6e 63 74 2c 20 4d 6f 76 65 4c 74 2c 20 4d  tinct, MoveLt, M
16e50 6f 76 65 47 65 2c 20 4d 6f 76 65 4c 65 0a 2a 2f  oveGe, MoveLe.*/
16e60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65  ./* Opcode: Move
16e70 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  Lt P1 P2 P3 P4 *
16e80 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f   .**.** If curso
16e90 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
16ea0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
16eb0 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
16ec0 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
16ed0 20 75 73 65 20 74 68 65 20 69 6e 74 65 67 65 72   use the integer
16ee0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
16ef0 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
16f00 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
16f10 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
16f20 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
16f30 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
16f40 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
16f50 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
16f60 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
16f70 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
16f80 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
16f90 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
16fa0 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
16fb0 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67  ints to the larg
16fc0 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
16fd0 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
16fe0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
16ff0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
17000 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e  ecords less than
17010 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
17020 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
17030 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
17040 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
17050 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
17060 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 4d 6f 76  d, Distinct, Mov
17070 65 47 74 2c 20 4d 6f 76 65 47 65 2c 20 4d 6f 76  eGt, MoveGe, Mov
17080 65 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  eLe.*/./* Opcode
17090 3a 20 4d 6f 76 65 4c 65 20 50 31 20 50 32 20 50  : MoveLe P1 P2 P
170a0 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20  3 P4 *.**.** If 
170b0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
170c0 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
170d0 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
170e0 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
170f0 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 69 6e  , .** use the in
17100 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
17110 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
17120 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
17130 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
17140 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
17150 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
17160 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
17170 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
17180 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
17190 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
171a0 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
171b0 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
171c0 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
171d0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
171e0 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68  largest entry th
171f0 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74  at .** is less t
17200 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
17210 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
17220 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
17230 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20  ecords .** less 
17240 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
17250 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
17260 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
17270 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
17280 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
17290 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
172a0 69 73 74 69 6e 63 74 2c 20 4d 6f 76 65 47 74 2c  istinct, MoveGt,
172b0 20 4d 6f 76 65 47 65 2c 20 4d 6f 76 65 4c 74 0a   MoveGe, MoveLt.
172c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 4c  */.case OP_MoveL
172d0 74 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  t:         /* ju
172e0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
172f0 4f 50 5f 4d 6f 76 65 4c 65 3a 20 20 20 20 20 20  OP_MoveLe:      
17300 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
17310 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 47  */.case OP_MoveG
17320 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  e:         /* ju
17330 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
17340 4f 50 5f 4d 6f 76 65 47 74 3a 20 7b 20 20 20 20  OP_MoveGt: {    
17350 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
17360 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70  */.  int i = pOp
17370 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f 72 20 2a  ->p1;.  Cursor *
17380 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69  pC;..  assert( i
17390 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
173a0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
173b0 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73  >apCsr[i];.  ass
173c0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
173d0 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  if( pC->pCursor!
173e0 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65  =0 ){.    int re
173f0 73 2c 20 6f 63 3b 0a 20 20 20 20 6f 63 20 3d 20  s, oc;.    oc = 
17400 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 20  pOp->opcode;.   
17410 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
17420 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73  ;.    if( pC->is
17430 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 69  Table ){.      i
17440 36 34 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65  64 iKey = sqlite
17450 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
17460 6e 33 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  n3);.      if( p
17470 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20  Op->p2==0 ){.   
17480 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
17490 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4d 6f 76  ->opcode==OP_Mov
174a0 65 47 65 20 29 3b 0a 20 20 20 20 20 20 20 20 70  eGe );.        p
174b0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
174c0 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20 20 20 20  = iKey;.        
174d0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
174e0 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 70 43   = 0;.        pC
174f0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
17500 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72   = 1;.        br
17510 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
17520 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
17530 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
17540 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
17550 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c  0, (u64)iKey, 0,
17560 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66   &res);.      if
17570 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
17580 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
17590 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
175a0 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
175b0 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20    pC->lastRowid 
175c0 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20 20 70 43  = iKey;.      pC
175d0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
175e0 20 72 65 73 3d 3d 30 3b 0a 20 20 20 20 7d 65 6c   res==0;.    }el
175f0 73 65 7b 0a 20 20 20 20 20 20 55 6e 70 61 63 6b  se{.      Unpack
17600 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 20 20  edRecord r;.    
17610 20 20 69 6e 74 20 6e 46 69 65 6c 64 20 3d 20 70    int nField = p
17620 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 20 20  Op->p4.i;.      
17630 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
17640 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
17650 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e  .      assert( n
17660 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 20  Field>0 );.     
17670 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
17680 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
17690 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 6e 46 69    r.nField = nFi
176a0 65 6c 64 3b 0a 20 20 20 20 20 20 69 66 28 20 6f  eld;.      if( o
176b0 63 3d 3d 4f 50 5f 4d 6f 76 65 47 74 20 7c 7c 20  c==OP_MoveGt || 
176c0 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 4c 65 20 29 7b  oc==OP_MoveLe ){
176d0 0a 20 20 20 20 20 20 20 20 72 2e 66 6c 61 67 73  .        r.flags
176e0 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52   = UNPACKED_INCR
176f0 4b 45 59 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  KEY;.      }else
17700 7b 0a 20 20 20 20 20 20 20 20 72 2e 66 6c 61 67  {.        r.flag
17710 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  s = 0;.      }. 
17720 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70       r.aMem = &p
17730 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
17740 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
17750 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
17760 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
17770 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72  or, &r, 0, 0, &r
17780 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
17790 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
177a0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
177b0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
177c0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
177d0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
177e0 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  = 0;.    }.    p
177f0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
17800 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
17810 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
17820 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66  HE_STALE;.#ifdef
17830 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20   SQLITE_TEST.   
17840 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
17850 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
17860 20 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 4d      if( oc==OP_M
17870 6f 76 65 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  oveGe || oc==OP_
17880 4d 6f 76 65 47 74 20 29 7b 0a 20 20 20 20 20 20  MoveGt ){.      
17890 69 66 28 20 72 65 73 3c 30 20 29 7b 0a 20 20 20  if( res<0 ){.   
178a0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
178b0 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 70  3BtreeNext(pC->p
178c0 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
178d0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
178e0 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
178f0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
17900 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  or;.        pC->
17910 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
17920 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
17930 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a         res = 0;.
17940 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
17950 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
17960 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 4c 74 20 7c   oc==OP_MoveLt |
17970 7c 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 4c 65 20  | oc==OP_MoveLe 
17980 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73  );.      if( res
17990 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72  >=0 ){.        r
179a0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
179b0 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75  Previous(pC->pCu
179c0 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
179d0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
179e0 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
179f0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
17a00 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f  ;.        pC->ro
17a10 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
17a20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
17a30 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68       /* res migh
17a40 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62 65  t be negative be
17a50 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20  cause the table 
17a60 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b  is empty.  Check
17a70 20 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a 20 73   to.        ** s
17a80 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68  ee if this is th
17a90 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 20 20  e case..        
17aa0 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  */.        res =
17ab0 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66   sqlite3BtreeEof
17ac0 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
17ad0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
17ae0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
17af0 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65  >0 );.    if( re
17b00 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  s ){.      pc = 
17b10 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
17b20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 21   }.  }else if( !
17b30 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20  pC->pseudoTable 
17b40 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68  ){.    /* This h
17b50 61 70 70 65 6e 73 20 77 68 65 6e 20 61 74 74 65  appens when atte
17b60 6d 70 74 69 6e 67 20 74 6f 20 6f 70 65 6e 20 74  mpting to open t
17b70 68 65 20 73 71 6c 69 74 65 33 5f 6d 61 73 74 65  he sqlite3_maste
17b80 72 20 74 61 62 6c 65 0a 20 20 20 20 2a 2a 20 66  r table.    ** f
17b90 6f 72 20 72 65 61 64 20 61 63 63 65 73 73 20 72  or read access r
17ba0 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d  eturns SQLITE_EM
17bb0 50 54 59 2e 20 49 6e 20 74 68 69 73 20 63 61 73  PTY. In this cas
17bc0 65 20 61 6c 77 61 79 73 0a 20 20 20 20 2a 2a 20  e always.    ** 
17bd0 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 28 73  take the jump (s
17be0 69 6e 63 65 20 74 68 65 72 65 20 61 72 65 20 6e  ince there are n
17bf0 6f 20 72 65 63 6f 72 64 73 20 69 6e 20 74 68 65  o records in the
17c00 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a   table)..    */.
17c10 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
17c20 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
17c30 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
17c40 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20   Found P1 P2 P3 
17c50 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74  * *.**.** Regist
17c60 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
17c70 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
17c80 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 50  y MakeRecord.  P
17c90 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a 2a  1 is an index..*
17ca0 2a 20 49 66 20 61 6e 20 65 6e 74 72 79 20 74 68  * If an entry th
17cb0 61 74 20 6d 61 74 63 68 65 73 20 74 68 65 20 76  at matches the v
17cc0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
17cd0 20 70 33 20 65 78 69 73 74 73 20 69 6e 20 50 31   p3 exists in P1
17ce0 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
17cf0 20 50 32 2e 20 20 49 66 20 74 68 65 20 50 33 20   P2.  If the P3 
17d00 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d  value does not m
17d10 61 74 63 68 20 61 6e 79 20 65 6e 74 72 79 20 69  atch any entry i
17d20 6e 20 50 31 0a 2a 2a 20 74 68 65 6e 20 66 61 6c  n P1.** then fal
17d30 6c 20 74 68 72 75 2e 20 20 54 68 65 20 50 31 20  l thru.  The P1 
17d40 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 70  cursor is left p
17d50 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d  ointing at the m
17d60 61 74 63 68 69 6e 67 20 65 6e 74 72 79 0a 2a 2a  atching entry.**
17d70 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a   if it exists..*
17d80 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
17d90 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ction is used to
17da0 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 49   implement the I
17db0 4e 20 6f 70 65 72 61 74 6f 72 20 77 68 65 72 65  N operator where
17dc0 20 74 68 65 0a 2a 2a 20 6c 65 66 74 2d 68 61 6e   the.** left-han
17dd0 64 20 73 69 64 65 20 69 73 20 61 20 53 45 4c 45  d side is a SELE
17de0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 50  CT statement.  P
17df0 31 20 6d 61 79 20 62 65 20 61 20 74 72 75 65 20  1 may be a true 
17e00 69 6e 64 65 78 2c 20 6f 72 20 69 74 0a 2a 2a 20  index, or it.** 
17e10 6d 61 79 20 62 65 20 61 20 74 65 6d 70 6f 72 61  may be a tempora
17e20 72 79 20 69 6e 64 65 78 20 74 68 61 74 20 68 6f  ry index that ho
17e30 6c 64 73 20 74 68 65 20 72 65 73 75 6c 74 73 20  lds the results 
17e40 6f 66 20 74 68 65 20 53 45 4c 45 43 54 0a 2a 2a  of the SELECT.**
17e50 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 20 54 68   statement.   Th
17e60 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
17e70 73 20 61 6c 73 6f 20 75 73 65 64 20 74 6f 20 69  s also used to i
17e80 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  mplement the.** 
17e90 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
17ea0 20 69 6e 20 53 45 4c 45 43 54 20 73 74 61 74 65   in SELECT state
17eb0 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ments..**.** Thi
17ec0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 68  s instruction ch
17ed0 65 63 6b 73 20 69 66 20 69 6e 64 65 78 20 50 31  ecks if index P1
17ee0 20 63 6f 6e 74 61 69 6e 73 20 61 20 72 65 63 6f   contains a reco
17ef0 72 64 20 66 6f 72 20 77 68 69 63 68 20 0a 2a 2a  rd for which .**
17f00 20 74 68 65 20 66 69 72 73 74 20 4e 20 73 65 72   the first N ser
17f10 69 61 6c 69 7a 65 64 20 76 61 6c 75 65 73 20 65  ialized values e
17f20 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68 65  xactly match the
17f30 20 4e 20 73 65 72 69 61 6c 69 7a 65 64 20 76 61   N serialized va
17f40 6c 75 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 72  lues.** in the r
17f50 65 63 6f 72 64 20 69 6e 20 72 65 67 69 73 74 65  ecord in registe
17f60 72 20 50 33 2c 20 77 68 65 72 65 20 4e 20 69 73  r P3, where N is
17f70 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
17f80 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 0a 2a  r of values in.*
17f90 2a 20 74 68 65 20 50 33 20 72 65 63 6f 72 64 20  * the P3 record 
17fa0 28 74 68 65 20 50 33 20 72 65 63 6f 72 64 20 69  (the P3 record i
17fb0 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  s a prefix of th
17fc0 65 20 50 31 20 72 65 63 6f 72 64 29 2e 20 0a 2a  e P1 record). .*
17fd0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e  *.** See also: N
17fe0 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75  otFound, IsUniqu
17ff0 65 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a  e, NotExists.*/.
18000 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f  /* Opcode: NotFo
18010 75 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  und P1 P2 P3 * *
18020 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
18030 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
18040 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
18050 61 6b 65 52 65 63 6f 72 64 2e 20 20 50 31 20 69  akeRecord.  P1 i
18060 73 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 2e 20 20  s.** an index.  
18070 49 66 20 6e 6f 20 65 6e 74 72 79 20 65 78 69 73  If no entry exis
18080 74 73 20 69 6e 20 50 31 20 74 68 61 74 20 6d 61  ts in P1 that ma
18090 74 63 68 65 73 20 74 68 65 20 62 6c 6f 62 20 74  tches the blob t
180a0 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50  hen jump.** to P
180b0 32 2e 20 20 49 66 20 61 6e 20 65 6e 74 72 79 20  2.  If an entry 
180c0 64 6f 65 73 20 65 78 69 73 74 69 6e 67 2c 20 66  does existing, f
180d0 61 6c 6c 20 74 68 72 6f 75 67 68 2e 20 20 54 68  all through.  Th
180e0 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74  e cursor is left
180f0 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  .** pointing to 
18100 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 6d  the entry that m
18110 61 74 63 68 65 73 2e 0a 2a 2a 0a 2a 2a 20 53 65  atches..**.** Se
18120 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
18130 6f 74 45 78 69 73 74 73 2c 20 49 73 55 6e 69 71  otExists, IsUniq
18140 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  ue.*/.case OP_No
18150 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a  tFound:       /*
18160 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
18170 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20  se OP_Found: {  
18180 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
18190 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20  n3 */.  int i = 
181a0 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e 74 20 61  pOp->p1;.  int a
181b0 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 30  lreadyExists = 0
181c0 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a  ;.  Cursor *pC;.
181d0 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
181e0 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
181f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
18200 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20  pCsr[i]!=0 );.  
18210 69 66 28 20 28 70 43 20 3d 20 70 2d 3e 61 70 43  if( (pC = p->apC
18220 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 21  sr[i])->pCursor!
18230 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65  =0 ){.    int re
18240 73 3b 0a 20 20 20 20 55 6e 70 61 63 6b 65 64 52  s;.    UnpackedR
18250 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a  ecord *pIdxKey;.
18260 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
18270 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
18280 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d     assert( pIn3-
18290 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
182a0 62 20 29 3b 0a 20 20 20 20 70 49 64 78 4b 65 79  b );.    pIdxKey
182b0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
182c0 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70  cordUnpack(pC->p
182d0 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e  KeyInfo, pIn3->n
182e0 2c 20 70 49 6e 33 2d 3e 7a 2c 0a 20 20 20 20 20  , pIn3->z,.     
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18310 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f   aTempRec, sizeo
18320 66 28 61 54 65 6d 70 52 65 63 29 29 3b 0a 20 20  f(aTempRec));.  
18330 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30    if( pIdxKey==0
18340 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e   ){.      goto n
18350 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20  o_mem;.    }.   
18360 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
18370 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20  ==OP_Found ){.  
18380 20 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61      pIdxKey->fla
18390 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 50  gs |= UNPACKED_P
183a0 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20  REFIX_MATCH;.   
183b0 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69   }.    rc = sqli
183c0 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
183d0 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
183e0 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20  or, pIdxKey, 0, 
183f0 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 73 71  0, &res);.    sq
18400 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 55  lite3VdbeDeleteU
18410 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70 49  npackedRecord(pI
18420 64 78 4b 65 79 29 3b 0a 20 20 20 20 69 66 28 20  dxKey);.    if( 
18430 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
18440 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
18450 20 20 7d 0a 20 20 20 20 61 6c 72 65 61 64 79 45    }.    alreadyE
18460 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29  xists = (res==0)
18470 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
18480 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
18490 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
184a0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
184b0 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
184c0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64  opcode==OP_Found
184d0 20 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72 65   ){.    if( alre
184e0 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d  adyExists ) pc =
184f0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
18500 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 21  }else{.    if( !
18510 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
18520 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
18530 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
18540 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 55  ../* Opcode: IsU
18550 6e 69 71 75 65 20 50 31 20 50 32 20 50 33 20 50  nique P1 P2 P3 P
18560 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33  4 *.**.** The P3
18570 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 61 69   register contai
18580 6e 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  ns an integer re
18590 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 20 43 61  cord number.  Ca
185a0 6c 6c 20 74 68 69 73 0a 2a 2a 20 72 65 63 6f 72  ll this.** recor
185b0 64 20 6e 75 6d 62 65 72 20 52 2e 20 20 54 68 65  d number R.  The
185c0 20 50 34 20 72 65 67 69 73 74 65 72 20 63 6f 6e   P4 register con
185d0 74 61 69 6e 73 20 61 6e 20 69 6e 64 65 78 20 6b  tains an index k
185e0 65 79 20 63 72 65 61 74 65 64 0a 2a 2a 20 75 73  ey created.** us
185f0 69 6e 67 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20  ing MakeRecord. 
18600 20 43 61 6c 6c 20 69 74 20 4b 2e 0a 2a 2a 0a 2a   Call it K..**.*
18610 2a 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78  * P1 is an index
18620 2e 20 20 53 6f 20 69 74 20 68 61 73 20 6e 6f 20  .  So it has no 
18630 64 61 74 61 20 61 6e 64 20 69 74 73 20 6b 65 79  data and its key
18640 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 0a 2a   consists of a.*
18650 2a 20 72 65 63 6f 72 64 20 67 65 6e 65 72 61 74  * record generat
18660 65 64 20 62 79 20 4f 50 5f 4d 61 6b 65 52 65 63  ed by OP_MakeRec
18670 6f 72 64 20 77 68 65 72 65 20 74 68 65 20 6c 61  ord where the la
18680 73 74 20 66 69 65 6c 64 20 69 73 20 74 68 65 20  st field is the 
18690 0a 2a 2a 20 72 6f 77 69 64 20 6f 66 20 74 68 65  .** rowid of the
186a0 20 65 6e 74 72 79 20 74 68 61 74 20 74 68 65 20   entry that the 
186b0 69 6e 64 65 78 20 72 65 66 65 72 73 20 74 6f 2e  index refers to.
186c0 0a 2a 2a 20 0a 2a 2a 20 54 68 69 73 20 69 6e 73  .** .** This ins
186d0 74 72 75 63 74 69 6f 6e 20 61 73 6b 73 20 69 66  truction asks if
186e0 20 74 68 65 72 65 20 69 73 20 61 6e 20 65 6e 74   there is an ent
186f0 72 79 20 69 6e 20 50 31 20 77 68 65 72 65 20 74  ry in P1 where t
18700 68 65 0a 2a 2a 20 66 69 65 6c 64 73 20 6d 61 74  he.** fields mat
18710 63 68 65 73 20 4b 20 62 75 74 20 74 68 65 20 72  ches K but the r
18720 6f 77 69 64 20 69 73 20 64 69 66 66 65 72 65 6e  owid is differen
18730 74 20 66 72 6f 6d 20 52 2e 0a 2a 2a 20 49 66 20  t from R..** If 
18740 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68  there is no such
18750 20 65 6e 74 72 79 2c 20 74 68 65 6e 20 74 68 65   entry, then the
18760 72 65 20 69 73 20 61 6e 20 69 6d 6d 65 64 69 61  re is an immedia
18770 74 65 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32  te.** jump to P2
18780 2e 20 20 49 66 20 61 6e 79 20 65 6e 74 72 79 20  .  If any entry 
18790 64 6f 65 73 20 65 78 69 73 74 20 77 68 65 72 65  does exist where
187a0 20 74 68 65 20 69 6e 64 65 78 20 73 74 72 69 6e   the index strin
187b0 67 0a 2a 2a 20 6d 61 74 63 68 65 73 20 4b 20 62  g.** matches K b
187c0 75 74 20 74 68 65 20 72 65 63 6f 72 64 20 6e 75  ut the record nu
187d0 6d 62 65 72 20 69 73 20 6e 6f 74 20 52 2c 20 74  mber is not R, t
187e0 68 65 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 2a  hen the record.*
187f0 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61  * number for tha
18800 74 20 65 6e 74 72 79 20 69 73 20 77 72 69 74 74  t entry is writt
18810 65 6e 20 69 6e 74 6f 20 50 33 20 61 6e 64 20 63  en into P3 and c
18820 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20  ontrol.** falls 
18830 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
18840 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
18850 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
18860 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 74 45 78   NotFound, NotEx
18870 69 73 74 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63  ists, Found.*/.c
18880 61 73 65 20 4f 50 5f 49 73 55 6e 69 71 75 65 3a  ase OP_IsUnique:
18890 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
188a0 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  p, in3 */.  int 
188b0 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43  i = pOp->p1;.  C
188c0 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 42 74  ursor *pCx;.  Bt
188d0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
188e0 20 4d 65 6d 20 2a 70 4b 3b 0a 20 20 69 36 34 20   Mem *pK;.  i64 
188f0 52 3b 0a 0a 20 20 2f 2a 20 50 6f 70 20 74 68 65  R;..  /* Pop the
18900 20 76 61 6c 75 65 20 52 20 6f 66 66 20 74 68 65   value R off the
18910 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61 63   top of the stac
18920 6b 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  k.  */.  assert(
18930 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
18940 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65  _INT32 );.  asse
18950 72 74 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20  rt( pOp->p4.i>0 
18960 26 26 20 70 4f 70 2d 3e 70 34 2e 69 3c 3d 70 2d  && pOp->p4.i<=p-
18970 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4b 20 3d 20  >nMem );.  pK = 
18980 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 34  &p->aMem[pOp->p4
18990 2e 69 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  .i];.  sqlite3Vd
189a0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
189b0 70 49 6e 33 29 3b 0a 20 20 52 20 3d 20 70 49 6e  pIn3);.  R = pIn
189c0 33 2d 3e 75 2e 69 3b 0a 20 20 61 73 73 65 72 74  3->u.i;.  assert
189d0 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
189e0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 78 20  Cursor );.  pCx 
189f0 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20  = p->apCsr[i];. 
18a00 20 61 73 73 65 72 74 28 20 70 43 78 21 3d 30 20   assert( pCx!=0 
18a10 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 78  );.  pCrsr = pCx
18a20 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28  ->pCursor;.  if(
18a30 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20   pCrsr!=0 ){.   
18a40 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 69 36   int res;.    i6
18a50 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20  4 v;            
18a60 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
18a70 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 74 68  record number th
18a80 61 74 20 6d 61 74 63 68 65 73 20 4b 20 2a 2f 0a  at matches K */.
18a90 20 20 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f      UnpackedReco
18aa0 72 64 20 2a 70 49 64 78 4b 65 79 3b 20 20 20 2f  rd *pIdxKey;   /
18ab0 2a 20 55 6e 70 61 63 6b 65 64 20 76 65 72 73 69  * Unpacked versi
18ac0 6f 6e 20 6f 66 20 50 34 20 2a 2f 0a 0a 20 20 20  on of P4 */..   
18ad0 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 4b 20   /* Make sure K 
18ae0 69 73 20 61 20 73 74 72 69 6e 67 20 61 6e 64 20  is a string and 
18af0 6d 61 6b 65 20 7a 4b 65 79 20 70 6f 69 6e 74 20  make zKey point 
18b00 74 6f 20 4b 0a 20 20 20 20 2a 2f 0a 20 20 20 20  to K.    */.    
18b10 61 73 73 65 72 74 28 20 70 4b 2d 3e 66 6c 61 67  assert( pK->flag
18b20 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
18b30 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71      pIdxKey = sq
18b40 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64 55  lite3VdbeRecordU
18b50 6e 70 61 63 6b 28 70 43 78 2d 3e 70 4b 65 79 49  npack(pCx->pKeyI
18b60 6e 66 6f 2c 20 70 4b 2d 3e 6e 2c 20 70 4b 2d 3e  nfo, pK->n, pK->
18b70 7a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  z,.             
18b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b90 20 20 20 20 20 20 20 20 20 61 54 65 6d 70 52 65           aTempRe
18ba0 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52  c, sizeof(aTempR
18bb0 65 63 29 29 3b 0a 20 20 20 20 69 66 28 20 70 49  ec));.    if( pI
18bc0 64 78 4b 65 79 3d 3d 30 20 29 7b 0a 20 20 20 20  dxKey==0 ){.    
18bd0 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
18be0 20 20 20 7d 0a 20 20 20 20 70 49 64 78 4b 65 79     }.    pIdxKey
18bf0 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41 43  ->flags |= UNPAC
18c00 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44  KED_IGNORE_ROWID
18c10 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 61 72 63 68  ;..    /* Search
18c20 20 66 6f 72 20 61 6e 20 65 6e 74 72 79 20 69 6e   for an entry in
18c30 20 50 31 20 77 68 65 72 65 20 61 6c 6c 20 62 75   P1 where all bu
18c40 74 20 74 68 65 20 6c 61 73 74 20 72 6f 77 69 64  t the last rowid
18c50 20 6d 61 74 63 68 20 4b 0a 20 20 20 20 2a 2a 20   match K.    ** 
18c60 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73  If there is no s
18c70 75 63 68 20 65 6e 74 72 79 2c 20 6a 75 6d 70 20  uch entry, jump 
18c80 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
18c90 32 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  2..    */.    as
18ca0 73 65 72 74 28 20 70 43 78 2d 3e 64 65 66 65 72  sert( pCx->defer
18cb0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
18cc0 20 20 20 20 70 43 78 2d 3e 63 61 63 68 65 53 74      pCx->cacheSt
18cd0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
18ce0 4c 45 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  LE;.    rc = sql
18cf0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
18d00 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 70  npacked(pCrsr, p
18d10 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72  IdxKey, 0, 0, &r
18d20 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  es);.    if( rc!
18d30 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18d40 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44      sqlite3VdbeD
18d50 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65 63  eleteUnpackedRec
18d60 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20 20  ord(pIdxKey);.  
18d70 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
18d80 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
18d90 20 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30   }.    if( res<0
18da0 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   ){.      rc = s
18db0 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
18dc0 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
18dd0 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
18de0 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
18df0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  >p2 - 1;.       
18e00 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65   sqlite3VdbeDele
18e10 74 65 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  teUnpackedRecord
18e20 28 70 49 64 78 4b 65 79 29 3b 0a 20 20 20 20 20  (pIdxKey);.     
18e30 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
18e40 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d  }.    }.    rc =
18e50 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b   sqlite3VdbeIdxK
18e60 65 79 43 6f 6d 70 61 72 65 28 70 43 78 2c 20 70  eyCompare(pCx, p
18e70 49 64 78 4b 65 79 2c 20 26 72 65 73 29 3b 20 0a  IdxKey, &res); .
18e80 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44      sqlite3VdbeD
18e90 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65 63  eleteUnpackedRec
18ea0 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20 20  ord(pIdxKey);.  
18eb0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
18ec0 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
18ed0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
18ee0 20 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a     if( res>0 ){.
18ef0 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
18f00 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62 72  p2 - 1;.      br
18f10 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  eak;.    }..    
18f20 2f 2a 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74  /* At this point
18f30 2c 20 70 43 72 73 72 20 69 73 20 70 6f 69 6e 74  , pCrsr is point
18f40 69 6e 67 20 74 6f 20 61 6e 20 65 6e 74 72 79 20  ing to an entry 
18f50 69 6e 20 50 31 20 77 68 65 72 65 20 61 6c 6c 20  in P1 where all 
18f60 62 75 74 0a 20 20 20 20 2a 2a 20 74 68 65 20 66  but.    ** the f
18f70 69 6e 61 6c 20 65 6e 74 72 79 20 28 74 68 65 20  inal entry (the 
18f80 72 6f 77 69 64 29 20 6d 61 74 63 68 65 73 20 4b  rowid) matches K
18f90 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  .  Check to see 
18fa0 69 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 66 69  if the.    ** fi
18fb0 6e 61 6c 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e  nal rowid column
18fc0 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72   is different fr
18fd0 6f 6d 20 52 2e 20 20 49 66 20 69 74 20 65 71 75  om R.  If it equ
18fe0 61 6c 73 20 52 20 74 68 65 6e 20 6a 75 6d 70 0a  als R then jump.
18ff0 20 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65      ** immediate
19000 6c 79 20 74 6f 20 50 32 2e 0a 20 20 20 20 2a 2f  ly to P2..    */
19010 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
19020 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 70 43  3VdbeIdxRowid(pC
19030 72 73 72 2c 20 26 76 29 3b 0a 20 20 20 20 69 66  rsr, &v);.    if
19040 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
19050 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
19060 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
19070 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
19080 76 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20 70 63  v==R ){.      pc
19090 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
190a0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
190b0 20 7d 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66   }..    /* The f
190c0 69 6e 61 6c 20 76 61 72 69 6e 74 20 6f 66 20 74  inal varint of t
190d0 68 65 20 6b 65 79 20 69 73 20 64 69 66 66 65 72  he key is differ
190e0 65 6e 74 20 66 72 6f 6d 20 52 2e 20 20 53 74 6f  ent from R.  Sto
190f0 72 65 20 69 74 20 62 61 63 6b 0a 20 20 20 20 2a  re it back.    *
19100 2a 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  * into register 
19110 52 33 2e 20 20 28 54 68 65 20 72 65 63 6f 72 64  R3.  (The record
19120 20 6e 75 6d 62 65 72 20 6f 66 20 61 6e 20 65 6e   number of an en
19130 74 72 79 20 74 68 61 74 20 76 69 6f 6c 61 74 65  try that violate
19140 73 0a 20 20 20 20 2a 2a 20 61 20 55 4e 49 51 55  s.    ** a UNIQU
19150 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 29 0a 20  E constraint.). 
19160 20 20 20 2a 2f 0a 20 20 20 20 70 49 6e 33 2d 3e     */.    pIn3->
19170 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 61 73 73  u.i = v;.    ass
19180 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
19190 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 7d 0a  &MEM_Int );.  }.
191a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
191b0 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73  pcode: NotExists
191c0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
191d0 0a 2a 2a 20 55 73 65 20 74 68 65 20 63 6f 6e 74  .** Use the cont
191e0 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
191f0 50 33 20 61 73 20 61 20 69 6e 74 65 67 65 72 20  P3 as a integer 
19200 6b 65 79 2e 20 20 49 66 20 61 20 72 65 63 6f 72  key.  If a recor
19210 64 20 0a 2a 2a 20 77 69 74 68 20 74 68 61 74 20  d .** with that 
19220 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  key does not exi
19230 73 74 20 69 6e 20 74 61 62 6c 65 20 6f 66 20 50  st in table of P
19240 31 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  1, then jump to 
19250 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 72  P2. .** If the r
19260 65 63 6f 72 64 20 64 6f 65 73 20 65 78 69 73 74  ecord does exist
19270 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 75  , then fall thru
19280 2e 20 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  .  The cursor is
19290 20 6c 65 66 74 20 0a 2a 2a 20 70 6f 69 6e 74 69   left .** pointi
192a0 6e 67 20 74 6f 20 74 68 65 20 72 65 63 6f 72 64  ng to the record
192b0 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a   if it exists..*
192c0 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65  *.** The differe
192d0 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68 69 73  nce between this
192e0 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 4e   operation and N
192f0 6f 74 46 6f 75 6e 64 20 69 73 20 74 68 61 74 20  otFound is that 
19300 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  this.** operatio
19310 6e 20 61 73 73 75 6d 65 73 20 74 68 65 20 6b 65  n assumes the ke
19320 79 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  y is an integer 
19330 61 6e 64 20 74 68 61 74 20 50 31 20 69 73 20 61  and that P1 is a
19340 20 74 61 62 6c 65 20 77 68 65 72 65 61 73 0a 2a   table whereas.*
19350 2a 20 4e 6f 74 46 6f 75 6e 64 20 61 73 73 75 6d  * NotFound assum
19360 65 73 20 6b 65 79 20 69 73 20 61 20 62 6c 6f 62  es key is a blob
19370 20 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f   constructed fro
19380 6d 20 4d 61 6b 65 52 65 63 6f 72 64 20 61 6e 64  m MakeRecord and
19390 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 69 6e 64  .** P1 is an ind
193a0 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ex..**.** See al
193b0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
193c0 75 6e 64 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f  und, IsUnique.*/
193d0 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73  .case OP_NotExis
193e0 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ts: {        /* 
193f0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
19400 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
19410 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20    Cursor *pC;.  
19420 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
19430 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
19440 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
19450 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
19460 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20  apCsr[i]!=0 );. 
19470 20 69 66 28 20 28 70 43 72 73 72 20 3d 20 28 70   if( (pCrsr = (p
19480 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29  C = p->apCsr[i])
19490 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b  ->pCursor)!=0 ){
194a0 0a 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  .    int res;.  
194b0 20 20 75 36 34 20 69 4b 65 79 3b 0a 20 20 20 20    u64 iKey;.    
194c0 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
194d0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
194e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e  .    assert( p->
194f0 61 70 43 73 72 5b 69 5d 2d 3e 69 73 54 61 62 6c  apCsr[i]->isTabl
19500 65 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20  e );.    iKey = 
19510 69 6e 74 54 6f 4b 65 79 28 70 49 6e 33 2d 3e 75  intToKey(pIn3->u
19520 2e 69 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  .i);.    rc = sq
19530 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
19540 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
19550 30 2c 20 69 4b 65 79 2c 20 30 2c 26 72 65 73 29  0, iKey, 0,&res)
19560 3b 0a 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f  ;.    pC->lastRo
19570 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b  wid = pIn3->u.i;
19580 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
19590 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 3b 0a  Valid = res==0;.
195a0 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
195b0 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
195c0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
195d0 5f 53 54 41 4c 45 3b 0a 20 20 20 20 2f 2a 20 72  _STALE;.    /* r
195e0 65 73 20 6d 69 67 68 74 20 62 65 20 75 6e 69 6e  es might be unin
195f0 69 74 69 61 6c 69 7a 65 64 20 69 66 20 72 63 21  itialized if rc!
19600 3d 53 51 4c 49 54 45 5f 4f 4b 2e 20 20 42 75 74  =SQLITE_OK.  But
19610 20 69 66 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f   if rc!=SQLITE_O
19620 4b 0a 20 20 20 20 2a 2a 20 70 72 6f 63 65 73 73  K.    ** process
19630 69 6e 67 20 69 73 20 61 62 6f 75 74 20 74 6f 20  ing is about to 
19640 61 62 6f 72 74 20 73 6f 20 77 65 20 72 65 61 6c  abort so we real
19650 6c 79 20 64 6f 20 6e 6f 74 20 63 61 72 65 20 77  ly do not care w
19660 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 20 20  hether or not.  
19670 20 20 2a 2a 20 74 68 65 20 66 6f 6c 6c 6f 77 69    ** the followi
19680 6e 67 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  ng jump is taken
19690 2e 20 20 28 49 6e 20 6f 74 68 65 72 20 77 6f 72  .  (In other wor
196a0 64 73 2c 20 64 6f 20 6e 6f 74 20 73 74 72 65 73  ds, do not stres
196b0 73 20 6f 76 65 72 0a 20 20 20 20 2a 2a 20 74 68  s over.    ** th
196c0 65 20 65 72 72 6f 72 20 74 68 61 74 20 76 61 6c  e error that val
196d0 67 72 69 6e 64 20 73 6f 6d 65 74 69 6d 65 73 20  grind sometimes 
196e0 73 68 6f 77 73 20 6f 6e 20 74 68 65 20 6e 65 78  shows on the nex
196f0 74 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 6e  t statement when
19700 0a 20 20 20 20 2a 2a 20 72 75 6e 6e 69 6e 67 20  .    ** running 
19710 69 6f 65 72 72 2e 74 65 73 74 20 61 6e 64 20 73  ioerr.test and s
19720 69 6d 69 6c 61 72 20 66 61 69 6c 75 72 65 2d 72  imilar failure-r
19730 65 63 6f 76 65 72 79 20 74 65 73 74 20 73 63 72  ecovery test scr
19740 69 70 74 73 2e 29 20 2a 2f 0a 20 20 20 20 69 66  ipts.) */.    if
19750 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20  ( res!=0 ){.    
19760 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
19770 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   1;.      assert
19780 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
19790 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20  id==0 );.    }. 
197a0 20 7d 65 6c 73 65 20 69 66 28 20 21 70 43 2d 3e   }else if( !pC->
197b0 70 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20  pseudoTable ){. 
197c0 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
197d0 6e 73 20 77 68 65 6e 20 61 6e 20 61 74 74 65 6d  ns when an attem
197e0 70 74 20 74 6f 20 6f 70 65 6e 20 61 20 72 65 61  pt to open a rea
197f0 64 20 63 75 72 73 6f 72 20 6f 6e 20 74 68 65 20  d cursor on the 
19800 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 5f 6d  .    ** sqlite_m
19810 61 73 74 65 72 20 74 61 62 6c 65 20 72 65 74 75  aster table retu
19820 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54 59  rns SQLITE_EMPTY
19830 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73  ..    */.    ass
19840 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
19850 20 29 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   );.    pc = pOp
19860 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61 73  ->p2 - 1;.    as
19870 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49  sert( pC->rowidI
19880 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 7d  sValid==0 );.  }
19890 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
198a0 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65  Opcode: Sequence
198b0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
198c0 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74  ** Find the next
198d0 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65   available seque
198e0 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63  nce number for c
198f0 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69  ursor P1..** Wri
19900 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  te the sequence 
19910 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69  number into regi
19920 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20  ster P2..** The 
19930 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
19940 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  on the cursor is
19950 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74   incremented aft
19960 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72  er this.** instr
19970 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73  uction.  .*/.cas
19980 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b  e OP_Sequence: {
19990 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
199a0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
199b0 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
199c0 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e  p1;.  assert( i>
199d0 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73  =0 && i<p->nCurs
199e0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
199f0 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29  p->apCsr[i]!=0 )
19a00 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
19a10 70 2d 3e 61 70 43 73 72 5b 69 5d 2d 3e 73 65 71  p->apCsr[i]->seq
19a20 43 6f 75 6e 74 2b 2b 3b 0a 20 20 4d 65 6d 53 65  Count++;.  MemSe
19a30 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
19a40 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
19a50 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
19a60 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32  : NewRowid P1 P2
19a70 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47 65   P3 * *.**.** Ge
19a80 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20  t a new integer 
19a90 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61  record number (a
19aa0 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73  .k.a "rowid") us
19ab0 65 64 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f  ed as the key to
19ac0 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65   a table..** The
19ad0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69   record number i
19ae0 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
19af0 20 75 73 65 64 20 61 73 20 61 20 6b 65 79 20 69   used as a key i
19b00 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
19b10 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63 75 72  * table that cur
19b20 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f  sor P1 points to
19b30 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72  .  The new recor
19b40 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74  d number is writ
19b50 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74  ten.** written t
19b60 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
19b70 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65  *.** If P3>0 the
19b80 6e 20 50 33 20 69 73 20 61 20 72 65 67 69 73 74  n P3 is a regist
19b90 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  er that holds th
19ba0 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f  e largest previo
19bb0 75 73 6c 79 0a 2a 2a 20 67 65 6e 65 72 61 74 65  usly.** generate
19bc0 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  d record number.
19bd0 20 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20    No new record 
19be0 6e 75 6d 62 65 72 73 20 61 72 65 20 61 6c 6c 6f  numbers are allo
19bf0 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 0a 2a  wed to be less.*
19c00 2a 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75  * than this valu
19c10 65 2e 20 20 57 68 65 6e 20 74 68 69 73 20 76 61  e.  When this va
19c20 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73 20  lue reaches its 
19c30 6d 61 78 69 6d 75 6d 2c 20 61 20 53 51 4c 49 54  maximum, a SQLIT
19c40 45 5f 46 55 4c 4c 0a 2a 2a 20 65 72 72 6f 72 20  E_FULL.** error 
19c50 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20 20 54  is generated.  T
19c60 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 69  he P3 register i
19c70 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
19c80 68 65 20 67 65 6e 65 72 61 74 65 64 0a 2a 2a 20  he generated.** 
19c90 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 20  record number.  
19ca0 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73  This P3 mechanis
19cb0 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c  m is used to hel
19cc0 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a  p implement the.
19cd0 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ** AUTOINCREMENT
19ce0 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73   feature..*/.cas
19cf0 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b  e OP_NewRowid: {
19d00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
19d10 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
19d20 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
19d30 70 31 3b 0a 20 20 69 36 34 20 76 20 3d 20 30 3b  p1;.  i64 v = 0;
19d40 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  .  Cursor *pC;. 
19d50 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
19d60 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b   i<p->nCursor );
19d70 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
19d80 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69  Csr[i]!=0 );.  i
19d90 66 28 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73  f( (pC = p->apCs
19da0 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 3d 3d  r[i])->pCursor==
19db0 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  0 ){.    /* The 
19dc0 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74  zero initializat
19dd0 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c  ion above is all
19de0 20 74 68 61 74 20 69 73 20 6e 65 65 64 65 64 20   that is needed 
19df0 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
19e00 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69  /* The next rowi
19e10 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  d or record numb
19e20 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65  er (different te
19e30 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65  rms for the same
19e40 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69  .    ** thing) i
19e50 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20  s obtained in a 
19e60 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74  two-step algorit
19e70 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  hm..    **.    *
19e80 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d  * First we attem
19e90 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  pt to find the l
19ea0 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
19eb0 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e  rowid and add on
19ec0 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74  e.    ** to that
19ed0 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61  .  But if the la
19ee0 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
19ef0 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20  owid is already 
19f00 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20  the maximum.    
19f10 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65  ** positive inte
19f20 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20  ger, we have to 
19f30 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
19f40 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a  the second.    *
19f50 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20  * probabilistic 
19f60 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a  algorithm.    **
19f70 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f  .    ** The seco
19f80 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  nd algorithm is 
19f90 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69  to select a rowi
19fa0 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
19fb0 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74  see if.    ** it
19fc0 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20   already exists 
19fd0 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
19fe0 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  f it does not ex
19ff0 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20  ist, we have.   
1a000 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20   ** succeeded.  
1a010 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f  If the random ro
1a020 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20  wid does exist, 
1a030 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20  we select a new 
1a040 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74  one.    ** and t
1a050 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20  ry again, up to 
1a060 31 30 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20  1000 times..    
1a070 2a 2a 0a 20 20 20 20 2a 2a 20 46 6f 72 20 61 20  **.    ** For a 
1a080 74 61 62 6c 65 20 77 69 74 68 20 6c 65 73 73 20  table with less 
1a090 74 68 61 6e 20 32 20 62 69 6c 6c 69 6f 6e 20 65  than 2 billion e
1a0a0 6e 74 72 69 65 73 2c 20 74 68 65 20 70 72 6f 62  ntries, the prob
1a0b0 61 62 69 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f  ability.    ** o
1a0c0 66 20 6e 6f 74 20 66 69 6e 64 69 6e 67 20 61 20  f not finding a 
1a0d0 75 6e 75 73 65 64 20 72 6f 77 69 64 20 69 73 20  unused rowid is 
1a0e0 61 62 6f 75 74 20 31 2e 30 65 2d 33 30 30 2e 20  about 1.0e-300. 
1a0f0 20 54 68 69 73 20 69 73 20 61 20 0a 20 20 20 20   This is a .    
1a100 2a 2a 20 6e 6f 6e 2d 7a 65 72 6f 20 70 72 6f 62  ** non-zero prob
1a110 61 62 69 6c 69 74 79 2c 20 62 75 74 20 69 74 20  ability, but it 
1a120 69 73 20 73 74 69 6c 6c 20 76 61 6e 69 73 68 69  is still vanishi
1a130 6e 67 6c 79 20 73 6d 61 6c 6c 20 61 6e 64 20 73  ngly small and s
1a140 68 6f 75 6c 64 0a 20 20 20 20 2a 2a 20 6e 65 76  hould.    ** nev
1a150 65 72 20 63 61 75 73 65 20 61 20 70 72 6f 62 6c  er cause a probl
1a160 65 6d 2e 20 20 59 6f 75 20 61 72 65 20 6d 75 63  em.  You are muc
1a170 68 2c 20 6d 75 63 68 20 6d 6f 72 65 20 6c 69 6b  h, much more lik
1a180 65 6c 79 20 74 6f 20 68 61 76 65 20 61 0a 20 20  ely to have a.  
1a190 20 20 2a 2a 20 68 61 72 64 77 61 72 65 20 66 61    ** hardware fa
1a1a0 69 6c 75 72 65 20 74 68 61 6e 20 66 6f 72 20 74  ilure than for t
1a1b0 68 69 73 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f  his algorithm to
1a1c0 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 0a 20 20   fail..    **.  
1a1d0 20 20 2a 2a 20 54 68 65 20 61 6e 61 6c 79 73 69    ** The analysi
1a1e0 73 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75  s in the previou
1a1f0 73 20 70 61 72 61 67 72 61 70 68 20 61 73 73 75  s paragraph assu
1a200 6d 65 73 20 74 68 61 74 20 79 6f 75 20 68 61 76  mes that you hav
1a210 65 20 61 20 67 6f 6f 64 0a 20 20 20 20 2a 2a 20  e a good.    ** 
1a220 73 6f 75 72 63 65 20 6f 66 20 72 61 6e 64 6f 6d  source of random
1a230 20 6e 75 6d 62 65 72 73 2e 20 20 49 73 20 61 20   numbers.  Is a 
1a240 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e  library function
1a250 20 6c 69 6b 65 20 6c 72 61 6e 64 34 38 28 29 0a   like lrand48().
1a260 20 20 20 20 2a 2a 20 67 6f 6f 64 20 65 6e 6f 75      ** good enou
1a270 67 68 3f 20 20 4d 61 79 62 65 2e 20 4d 61 79 62  gh?  Maybe. Mayb
1a280 65 20 6e 6f 74 2e 20 49 74 27 73 20 68 61 72 64  e not. It's hard
1a290 20 74 6f 20 6b 6e 6f 77 20 77 68 65 74 68 65 72   to know whether
1a2a0 20 74 68 65 72 65 0a 20 20 20 20 2a 2a 20 6d 69   there.    ** mi
1a2b0 67 68 74 20 62 65 20 73 75 62 74 6c 65 20 62 75  ght be subtle bu
1a2c0 67 73 20 69 73 20 73 6f 6d 65 20 69 6d 70 6c 65  gs is some imple
1a2d0 6d 65 6e 74 61 74 69 6f 6e 73 20 6f 66 20 6c 72  mentations of lr
1a2e0 61 6e 64 34 38 28 29 20 74 68 61 74 0a 20 20 20  and48() that.   
1a2f0 20 2a 2a 20 63 6f 75 6c 64 20 63 61 75 73 65 20   ** could cause 
1a300 70 72 6f 62 6c 65 6d 73 2e 20 54 6f 20 61 76 6f  problems. To avo
1a310 69 64 20 75 6e 63 65 72 74 61 69 6e 74 79 2c 20  id uncertainty, 
1a320 53 51 4c 69 74 65 20 75 73 65 73 20 69 74 73 20  SQLite uses its 
1a330 6f 77 6e 20 0a 20 20 20 20 2a 2a 20 72 61 6e 64  own .    ** rand
1a340 6f 6d 20 6e 75 6d 62 65 72 20 67 65 6e 65 72 61  om number genera
1a350 74 6f 72 20 62 61 73 65 64 20 6f 6e 20 74 68 65  tor based on the
1a360 20 52 43 34 20 61 6c 67 6f 72 69 74 68 6d 2e 0a   RC4 algorithm..
1a370 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 6f      **.    ** To
1a380 20 70 72 6f 6d 6f 74 65 20 6c 6f 63 61 6c 69 74   promote localit
1a390 79 20 6f 66 20 72 65 66 65 72 65 6e 63 65 20 66  y of reference f
1a3a0 6f 72 20 72 65 70 65 74 69 74 69 76 65 20 69 6e  or repetitive in
1a3b0 73 65 72 74 73 2c 20 74 68 65 0a 20 20 20 20 2a  serts, the.    *
1a3c0 2a 20 66 69 72 73 74 20 66 65 77 20 61 74 74 65  * first few atte
1a3d0 6d 70 74 73 20 61 74 20 63 68 6f 6f 73 69 6e 67  mpts at choosing
1a3e0 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20   a random rowid 
1a3f0 70 69 63 6b 20 76 61 6c 75 65 73 20 6a 75 73 74  pick values just
1a400 20 61 20 6c 69 74 74 6c 65 0a 20 20 20 20 2a 2a   a little.    **
1a410 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68 65   larger than the
1a420 20 70 72 65 76 69 6f 75 73 20 72 6f 77 69 64 2e   previous rowid.
1a430 20 20 54 68 69 73 20 68 61 73 20 62 65 65 6e 20    This has been 
1a440 73 68 6f 77 6e 20 65 78 70 65 72 69 6d 65 6e 74  shown experiment
1a450 61 6c 6c 79 0a 20 20 20 20 2a 2a 20 74 6f 20 64  ally.    ** to d
1a460 6f 75 62 6c 65 20 74 68 65 20 73 70 65 65 64 20  ouble the speed 
1a470 6f 66 20 74 68 65 20 43 4f 50 59 20 6f 70 65 72  of the COPY oper
1a480 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20  ation..    */.  
1a490 20 20 69 6e 74 20 72 65 73 2c 20 72 78 3d 53 51    int res, rx=SQ
1a4a0 4c 49 54 45 5f 4f 4b 2c 20 63 6e 74 3b 0a 20 20  LITE_OK, cnt;.  
1a4b0 20 20 69 36 34 20 78 3b 0a 20 20 20 20 63 6e 74    i64 x;.    cnt
1a4c0 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 28 73   = 0;.    if( (s
1a4d0 71 6c 69 74 65 33 42 74 72 65 65 46 6c 61 67 73  qlite3BtreeFlags
1a4e0 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 26 28 42  (pC->pCursor)&(B
1a4f0 54 52 45 45 5f 49 4e 54 4b 45 59 7c 42 54 52 45  TREE_INTKEY|BTRE
1a500 45 5f 5a 45 52 4f 44 41 54 41 29 29 20 21 3d 0a  E_ZERODATA)) !=.
1a510 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f            BTREE_
1a520 49 4e 54 4b 45 59 20 29 7b 0a 20 20 20 20 20 20  INTKEY ){.      
1a530 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
1a540 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
1a550 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1a560 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
1a570 20 20 20 61 73 73 65 72 74 28 20 28 73 71 6c 69     assert( (sqli
1a580 74 65 33 42 74 72 65 65 46 6c 61 67 73 28 70 43  te3BtreeFlags(pC
1a590 2d 3e 70 43 75 72 73 6f 72 29 20 26 20 42 54 52  ->pCursor) & BTR
1a5a0 45 45 5f 49 4e 54 4b 45 59 29 21 3d 30 20 29 3b  EE_INTKEY)!=0 );
1a5b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 73 71  .    assert( (sq
1a5c0 6c 69 74 65 33 42 74 72 65 65 46 6c 61 67 73 28  lite3BtreeFlags(
1a5d0 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 26 20 42  pC->pCursor) & B
1a5e0 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 29 3d 3d  TREE_ZERODATA)==
1a5f0 30 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  0 );..#ifdef SQL
1a600 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a  ITE_32BIT_ROWID.
1a610 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52  #   define MAX_R
1a620 4f 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a  OWID 0x7fffffff.
1a630 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d  #else.    /* Som
1a640 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70  e compilers comp
1a650 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74  lain about const
1a660 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ants of the form
1a670 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
1a680 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65  fff..    ** Othe
1a690 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75  rs complain abou
1a6a0 74 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66  t 0x7fffffffffff
1a6b0 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f  fffffLL.  The fo
1a6c0 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65  llowing macro se
1a6d0 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72  ems.    ** to pr
1a6e0 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61  ovide the consta
1a6f0 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20  nt while making 
1a700 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61  all compilers ha
1a710 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20  ppy..    */.#   
1a720 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
1a730 20 20 28 20 28 28 28 75 36 34 29 30 78 37 66 66    ( (((u64)0x7ff
1a740 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75  fffff)<<32) | (u
1a750 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a  64)0xffffffff ).
1a760 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20  #endif..    if( 
1a770 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f  !pC->useRandomRo
1a780 77 69 64 20 29 7b 0a 20 20 20 20 20 20 69 66 28  wid ){.      if(
1a790 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61   pC->nextRowidVa
1a7a0 6c 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 76  lid ){.        v
1a7b0 20 3d 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64   = pC->nextRowid
1a7c0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
1a7d0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1a7e0 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d  te3BtreeLast(pC-
1a7f0 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
1a800 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
1a810 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1a820 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
1a830 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1a840 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1a850 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20     if( res ){.  
1a860 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 0a 20          v = 1;. 
1a870 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1a880 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42          sqlite3B
1a890 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e  treeKeySize(pC->
1a8a0 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  pCursor, &v);.  
1a8b0 20 20 20 20 20 20 20 20 76 20 3d 20 6b 65 79 54          v = keyT
1a8c0 6f 49 6e 74 28 76 29 3b 0a 20 20 20 20 20 20 20  oInt(v);.       
1a8d0 20 20 20 69 66 28 20 76 3d 3d 4d 41 58 5f 52 4f     if( v==MAX_RO
1a8e0 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20  WID ){.         
1a8f0 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d     pC->useRandom
1a900 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20  Rowid = 1;.     
1a910 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1a920 20 20 20 20 20 20 20 20 76 2b 2b 3b 0a 20 20 20          v++;.   
1a930 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1a940 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69 66 6e   }.      }..#ifn
1a950 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1a960 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
1a970 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20      if( pOp->p3 
1a980 29 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d 20 2a  ){.        Mem *
1a990 70 4d 65 6d 3b 0a 20 20 20 20 20 20 20 20 61 73  pMem;.        as
1a9a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
1a9b0 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  && pOp->p3<=p->n
1a9c0 4d 65 6d 20 29 3b 20 2f 2a 20 50 33 20 69 73 20  Mem ); /* P3 is 
1a9d0 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
1a9e0 65 6c 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 70  ell */.        p
1a9f0 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Mem = &p->aMem[p
1aa00 4f 70 2d 3e 70 33 5d 3b 0a 09 52 45 47 49 53 54  Op->p3];..REGIST
1aa10 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
1aa20 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20  , pMem);.       
1aa30 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
1aa40 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b  ntegerify(pMem);
1aa50 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1aa60 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
1aa70 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20  MEM_Int)!=0 );  
1aa80 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73  /* mem(P3) holds
1aa90 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20   an integer */. 
1aaa0 20 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d         if( pMem-
1aab0 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20  >u.i==MAX_ROWID 
1aac0 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  || pC->useRandom
1aad0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20  Rowid ){.       
1aae0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46     rc = SQLITE_F
1aaf0 55 4c 4c 3b 0a 20 20 20 20 20 20 20 20 20 20 67  ULL;.          g
1ab00 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1ab10 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
1ab20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3c  }.        if( v<
1ab30 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20  pMem->u.i+1 ){. 
1ab40 20 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65           v = pMe
1ab50 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20  m->u.i + 1;.    
1ab60 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 4d      }.        pM
1ab70 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20  em->u.i = v;.   
1ab80 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
1ab90 20 20 20 69 66 28 20 76 3c 4d 41 58 5f 52 4f 57     if( v<MAX_ROW
1aba0 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43  ID ){.        pC
1abb0 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c 69 64  ->nextRowidValid
1abc0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 70 43   = 1;.        pC
1abd0 2d 3e 6e 65 78 74 52 6f 77 69 64 20 3d 20 76 2b  ->nextRowid = v+
1abe0 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  1;.      }else{.
1abf0 20 20 20 20 20 20 20 20 70 43 2d 3e 6e 65 78 74          pC->next
1ac00 52 6f 77 69 64 56 61 6c 69 64 20 3d 20 30 3b 0a  RowidValid = 0;.
1ac10 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1ac20 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e    if( pC->useRan
1ac30 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
1ac40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1ac50 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 53 51 4c 49  3==0 );  /* SQLI
1ac60 54 45 5f 46 55 4c 4c 20 6d 75 73 74 20 68 61 76  TE_FULL must hav
1ac70 65 20 6f 63 63 75 72 72 65 64 20 70 72 69 6f 72  e occurred prior
1ac80 20 74 6f 20 74 68 69 73 20 2a 2f 0a 20 20 20 20   to this */.    
1ac90 20 20 76 20 3d 20 64 62 2d 3e 70 72 69 6f 72 4e    v = db->priorN
1aca0 65 77 52 6f 77 69 64 3b 0a 20 20 20 20 20 20 63  ewRowid;.      c
1acb0 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f  nt = 0;.      do
1acc0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 6e  {.        if( cn
1acd0 74 3d 3d 30 20 26 26 20 28 76 26 30 78 66 66 66  t==0 && (v&0xfff
1ace0 66 66 66 29 3d 3d 76 20 29 7b 0a 20 20 20 20 20  fff)==v ){.     
1acf0 20 20 20 20 20 76 2b 2b 3b 0a 20 20 20 20 20 20       v++;.      
1ad00 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1ad10 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f     sqlite3_rando
1ad20 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c  mness(sizeof(v),
1ad30 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20   &v);.          
1ad40 69 66 28 20 63 6e 74 3c 35 20 29 20 76 20 26 3d  if( cnt<5 ) v &=
1ad50 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20 20 20   0xffffff;.     
1ad60 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
1ad70 20 76 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65   v==0 ) continue
1ad80 3b 0a 20 20 20 20 20 20 20 20 78 20 3d 20 69 6e  ;.        x = in
1ad90 74 54 6f 4b 65 79 28 76 29 3b 0a 20 20 20 20 20  tToKey(v);.     
1ada0 20 20 20 72 78 20 3d 20 73 71 6c 69 74 65 33 42     rx = sqlite3B
1adb0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1adc0 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1add0 30 2c 20 28 75 36 34 29 78 2c 20 30 2c 20 26 72  0, (u64)x, 0, &r
1ade0 65 73 29 3b 0a 20 20 20 20 20 20 20 20 63 6e 74  es);.        cnt
1adf0 2b 2b 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65  ++;.      }while
1ae00 28 20 63 6e 74 3c 31 30 30 20 26 26 20 72 78 3d  ( cnt<100 && rx=
1ae10 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65  =SQLITE_OK && re
1ae20 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62  s==0 );.      db
1ae30 2d 3e 70 72 69 6f 72 4e 65 77 52 6f 77 69 64 20  ->priorNewRowid 
1ae40 3d 20 76 3b 0a 20 20 20 20 20 20 69 66 28 20 72  = v;.      if( r
1ae50 78 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  x==SQLITE_OK && 
1ae60 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
1ae70 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55    rc = SQLITE_FU
1ae80 4c 4c 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  LL;.        goto
1ae90 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1aea0 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
1aeb0 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64   }.    pC->rowid
1aec0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1aed0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1aee0 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
1aef0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1af00 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
1af10 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
1af20 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
1af30 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
1af40 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1af50 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20   Opcode: Insert 
1af60 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1af70 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e  *.** Write an en
1af80 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62  try into the tab
1af90 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e  le of cursor P1.
1afa0 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73    A new entry is
1afb0 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20 69  .** created if i
1afc0 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64  t doesn't alread
1afd0 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20 64  y exist or the d
1afe0 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74  ata for an exist
1aff0 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20  ing.** entry is 
1b000 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68  overwritten.  Th
1b010 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76 61  e data is the va
1b020 6c 75 65 20 73 74 6f 72 65 64 20 72 65 67 69 73  lue stored regis
1b030 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32  ter.** number P2
1b040 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f  . The key is sto
1b050 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
1b060 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74  P3. The key must
1b070 0a 2a 2a 20 62 65 20 61 6e 20 69 6e 74 65 67 65  .** be an intege
1b080 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  r..**.** If the 
1b090 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
1b0a0 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
1b0b0 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63  , then the row c
1b0c0 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a  hange count is.*
1b0d0 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  * incremented (o
1b0e0 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20  therwise not).  
1b0f0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41  If the OPFLAG_LA
1b100 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20  STROWID flag of 
1b110 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68  P5 is set,.** th
1b120 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72  en rowid is stor
1b130 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e  ed for subsequen
1b140 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a  t return by the.
1b150 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  ** sqlite3_last_
1b160 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66  insert_rowid() f
1b170 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69  unction (otherwi
1b180 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66  se it is unmodif
1b190 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61  ied)..**.** Para
1b1a0 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69  meter P4 may poi
1b1b0 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63  nt to a string c
1b1c0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61  ontaining the ta
1b1d0 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20  ble-name, or.** 
1b1e0 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20  may be NULL. If 
1b1f0 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  it is not NULL, 
1b200 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d  then the update-
1b210 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65  hook .** (sqlite
1b220 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  3.xUpdateCallbac
1b230 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f  k) is invoked fo
1b240 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73  llowing a succes
1b250 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a  sful insert..**.
1b260 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f  ** (WARNING/TODO
1b270 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65  : If P1 is a pse
1b280 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50  udo-cursor and P
1b290 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79  2 is dynamically
1b2a0 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74  .** allocated, t
1b2b0 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66  hen ownership of
1b2c0 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72   P2 is transferr
1b2d0 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f  ed to the pseudo
1b2e0 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72  -cursor.** and r
1b2f0 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d  egister P2 becom
1b300 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49  es ephemeral.  I
1b310 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
1b320 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20  changed, the.** 
1b330 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
1b340 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63  r P2 will then c
1b350 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72  hange.  Make sur
1b360 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a  e this does not.
1b370 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f  ** cause any pro
1b380 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68  blems.).**.** Th
1b390 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
1b3a0 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62  nly works on tab
1b3b0 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  les.  The equiva
1b3c0 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
1b3d0 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20  .** for indices 
1b3e0 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e  is OP_IdxInsert.
1b3f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  .*/.case OP_Inse
1b400 72 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61  rt: {.  Mem *pDa
1b410 74 61 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  ta = &p->aMem[pO
1b420 70 2d 3e 70 32 5d 3b 0a 20 20 4d 65 6d 20 2a 70  p->p2];.  Mem *p
1b430 4b 65 79 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Key = &p->aMem[p
1b440 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 69 36 34 20  Op->p3];..  i64 
1b450 69 4b 65 79 3b 20 20 20 2f 2a 20 54 68 65 20 69  iKey;   /* The i
1b460 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 72 20  nteger ROWID or 
1b470 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65 63 6f  key for the reco
1b480 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  rd to be inserte
1b490 64 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70  d */.  int i = p
1b4a0 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f 72  Op->p1;.  Cursor
1b4b0 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20   *pC;.  assert( 
1b4c0 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
1b4d0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1b4e0 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73  ->apCsr[i];.  as
1b4f0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1b500 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
1b510 72 73 6f 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 70  rsor!=0 || pC->p
1b520 73 65 75 64 6f 54 61 62 6c 65 20 29 3b 0a 20 20  seudoTable );.  
1b530 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c  assert( pKey->fl
1b540 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
1b550 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
1b560 73 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47 49  sTable );.  REGI
1b570 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
1b580 70 32 2c 20 70 44 61 74 61 29 3b 0a 20 20 52 45  p2, pData);.  RE
1b590 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
1b5a0 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 0a 20 20  ->p3, pKey);..  
1b5b0 69 4b 65 79 20 3d 20 69 6e 74 54 6f 4b 65 79 28  iKey = intToKey(
1b5c0 70 4b 65 79 2d 3e 75 2e 69 29 3b 0a 20 20 69 66  pKey->u.i);.  if
1b5d0 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
1b5e0 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
1b5f0 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28  nChange++;.  if(
1b600 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
1b610 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62  G_LASTROWID ) db
1b620 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 4b  ->lastRowid = pK
1b630 65 79 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20 70  ey->u.i;.  if( p
1b640 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c 69  C->nextRowidVali
1b650 64 20 26 26 20 70 4b 65 79 2d 3e 75 2e 69 3e 3d  d && pKey->u.i>=
1b660 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 20 29 7b  pC->nextRowid ){
1b670 0a 20 20 20 20 70 43 2d 3e 6e 65 78 74 52 6f 77  .    pC->nextRow
1b680 69 64 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d  idValid = 0;.  }
1b690 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c  .  if( pData->fl
1b6a0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
1b6b0 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d  {.    pData->z =
1b6c0 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e   0;.    pData->n
1b6d0 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
1b6e0 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61     assert( pData
1b6f0 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42  ->flags & (MEM_B
1b700 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a  lob|MEM_Str) );.
1b710 20 20 7d 0a 20 20 69 66 28 20 70 43 2d 3e 70 73    }.  if( pC->ps
1b720 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20  eudoTable ){.   
1b730 20 69 66 28 20 21 70 43 2d 3e 65 70 68 65 6d 50   if( !pC->ephemP
1b740 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20  seudoTable ){.  
1b750 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
1b760 65 28 64 62 2c 20 70 43 2d 3e 70 44 61 74 61 29  e(db, pC->pData)
1b770 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  ;.    }.    pC->
1b780 69 4b 65 79 20 3d 20 69 4b 65 79 3b 0a 20 20 20  iKey = iKey;.   
1b790 20 70 43 2d 3e 6e 44 61 74 61 20 3d 20 70 44 61   pC->nData = pDa
1b7a0 74 61 2d 3e 6e 3b 0a 20 20 20 20 69 66 28 20 70  ta->n;.    if( p
1b7b0 44 61 74 61 2d 3e 7a 3d 3d 70 44 61 74 61 2d 3e  Data->z==pData->
1b7c0 7a 4d 61 6c 6c 6f 63 20 7c 7c 20 70 43 2d 3e 65  zMalloc || pC->e
1b7d0 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65 20  phemPseudoTable 
1b7e0 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e 70 44 61  ){.      pC->pDa
1b7f0 74 61 20 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a 20  ta = pData->z;. 
1b800 20 20 20 20 20 69 66 28 20 21 70 43 2d 3e 65 70       if( !pC->ep
1b810 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65 20 29  hemPseudoTable )
1b820 7b 0a 20 20 20 20 20 20 20 20 70 44 61 74 61 2d  {.        pData-
1b830 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 44  >flags &= ~MEM_D
1b840 79 6e 3b 0a 20 20 20 20 20 20 20 20 70 44 61 74  yn;.        pDat
1b850 61 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  a->flags |= MEM_
1b860 45 70 68 65 6d 3b 0a 20 20 20 20 20 20 20 20 70  Ephem;.        p
1b870 44 61 74 61 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  Data->zMalloc = 
1b880 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
1b890 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 43 2d 3e  else{.      pC->
1b8a0 70 44 61 74 61 20 3d 20 73 71 6c 69 74 65 33 4d  pData = sqlite3M
1b8b0 61 6c 6c 6f 63 28 20 70 43 2d 3e 6e 44 61 74 61  alloc( pC->nData
1b8c0 2b 32 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  +2 );.      if( 
1b8d0 21 70 43 2d 3e 70 44 61 74 61 20 29 20 67 6f 74  !pC->pData ) got
1b8e0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20  o no_mem;.      
1b8f0 6d 65 6d 63 70 79 28 70 43 2d 3e 70 44 61 74 61  memcpy(pC->pData
1b900 2c 20 70 44 61 74 61 2d 3e 7a 2c 20 70 43 2d 3e  , pData->z, pC->
1b910 6e 44 61 74 61 29 3b 0a 20 20 20 20 20 20 70 43  nData);.      pC
1b920 2d 3e 70 44 61 74 61 5b 70 43 2d 3e 6e 44 61 74  ->pData[pC->nDat
1b930 61 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43  a] = 0;.      pC
1b940 2d 3e 70 44 61 74 61 5b 70 43 2d 3e 6e 44 61 74  ->pData[pC->nDat
1b950 61 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  a+1] = 0;.    }.
1b960 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
1b970 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 0;.  }else{.  
1b980 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 0a 20 20 20    int nZero;.   
1b990 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
1b9a0 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
1b9b0 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44        nZero = pD
1b9c0 61 74 61 2d 3e 75 2e 69 3b 0a 20 20 20 20 7d 65  ata->u.i;.    }e
1b9d0 6c 73 65 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f  lse{.      nZero
1b9e0 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
1b9f0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1ba00 65 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72  eInsert(pC->pCur
1ba10 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20  sor, 0, iKey,.  
1ba20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba30 20 20 20 20 20 20 20 20 20 20 70 44 61 74 61 2d            pData-
1ba40 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a  >z, pData->n, nZ
1ba50 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ero,.           
1ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba70 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
1ba80 47 5f 41 50 50 45 4e 44 29 3b 0a 20 20 7d 0a 20  G_APPEND);.  }. 
1ba90 20 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56   .  pC->rowidIsV
1baa0 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  alid = 0;.  pC->
1bab0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1bac0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
1bad0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1bae0 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ALE;..  /* Invok
1baf0 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
1bb00 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
1bb10 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  /.  if( rc==SQLI
1bb20 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70  TE_OK && db->xUp
1bb30 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
1bb40 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
1bb50 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
1bb60 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69   = db->aDb[pC->i
1bb70 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 63  Db].zName;.    c
1bb80 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 20  onst char *zTbl 
1bb90 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20  = pOp->p4.z;.   
1bba0 20 69 6e 74 20 6f 70 20 3d 20 28 28 70 4f 70 2d   int op = ((pOp-
1bbb0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  >p5 & OPFLAG_ISU
1bbc0 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f  PDATE) ? SQLITE_
1bbd0 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f  UPDATE : SQLITE_
1bbe0 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73  INSERT);.    ass
1bbf0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1bc00 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64   );.    db->xUpd
1bc10 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
1bc20 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20  pUpdateArg, op, 
1bc30 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29  zDb, zTbl, iKey)
1bc40 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
1bc50 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a  ->iDb>=0 );.  }.
1bc60 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1bc70 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31  pcode: Delete P1
1bc80 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
1bc90 20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f   Delete the reco
1bca0 72 64 20 61 74 20 77 68 69 63 68 20 74 68 65 20  rd at which the 
1bcb0 50 31 20 63 75 72 73 6f 72 20 69 73 20 63 75 72  P1 cursor is cur
1bcc0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e  rently pointing.
1bcd0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  .**.** The curso
1bce0 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70  r will be left p
1bcf0 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65  ointing at eithe
1bd00 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68  r the next or th
1bd10 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65  e previous.** re
1bd20 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c  cord in the tabl
1bd30 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74  e. If it is left
1bd40 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
1bd50 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68   next record, th
1bd60 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e  en.** the next N
1bd70 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
1bd80 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e  will be a no-op.
1bd90 20 20 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b    Hence it is OK
1bda0 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20   to delete.** a 
1bdb0 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68  record from with
1bdc0 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e  in an Next loop.
1bdd0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
1bde0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
1bdf0 67 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20  g of P2 is set, 
1be00 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61  then the row cha
1be10 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20  nge count is.** 
1be20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
1be30 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a  erwise not)..**.
1be40 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62  ** P1 must not b
1be50 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  e pseudo-table. 
1be60 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20   It has to be a 
1be70 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a  real table with.
1be80 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  ** multiple rows
1be90 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
1bea0 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
1beb0 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  it is the name o
1bec0 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
1bed0 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69   P1 is.** pointi
1bee0 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61  ng to.  The upda
1bef0 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20  te hook will be 
1bf00 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65  invoked, if it e
1bf10 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20  xists..** If P4 
1bf20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e  is not NULL then
1bf30 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
1bf40 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f  ust have been po
1bf50 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e  sitioned.** usin
1bf60 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72  g OP_NotFound pr
1bf70 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20  ior to invoking 
1bf80 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  this opcode..*/.
1bf90 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20  case OP_Delete: 
1bfa0 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  {.  int i = pOp-
1bfb0 3e 70 31 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b  >p1;.  i64 iKey;
1bfc0 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  .  Cursor *pC;..
1bfd0 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
1bfe0 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
1bff0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1c000 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  r[i];.  assert( 
1c010 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1c020 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
1c030 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61  0 );  /* Only va
1c040 6c 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62  lid for real tab
1c050 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61  les, no pseudota
1c060 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  bles */..  /* If
1c070 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
1c080 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64   will be invoked
1c090 2c 20 73 65 74 20 69 4b 65 79 20 74 6f 20 74 68  , set iKey to th
1c0a0 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 0a 20  e rowid of the. 
1c0b0 20 2a 2a 20 72 6f 77 20 62 65 69 6e 67 20 64 65   ** row being de
1c0c0 6c 65 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66  leted..  */.  if
1c0d0 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  ( db->xUpdateCal
1c0e0 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34  lback && pOp->p4
1c0f0 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  .z ){.    assert
1c100 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1c110 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1c120 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 3b  >rowidIsValid );
1c130 20 20 2f 2a 20 6c 61 73 74 52 6f 77 69 64 20 73    /* lastRowid s
1c140 65 74 20 62 79 20 70 72 65 76 69 6f 75 73 20 4f  et by previous O
1c150 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20  P_NotFound */.  
1c160 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73    iKey = pC->las
1c170 74 52 6f 77 69 64 3b 0a 20 20 7d 0a 0a 20 20 72  tRowid;.  }..  r
1c180 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
1c190 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
1c1a0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1c1b0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1c1c0 72 6f 72 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ror;.  rc = sqli
1c1d0 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70  te3BtreeDelete(p
1c1e0 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70  C->pCursor);.  p
1c1f0 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c 69  C->nextRowidVali
1c200 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  d = 0;.  pC->cac
1c210 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1c220 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e  _STALE;..  /* In
1c230 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d  voke the update-
1c240 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
1c250 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53  . */.  if( rc==S
1c260 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e  QLITE_OK && db->
1c270 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
1c280 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  && pOp->p4.z ){.
1c290 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
1c2a0 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43  zDb = db->aDb[pC
1c2b0 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20  ->iDb].zName;.  
1c2c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
1c2d0 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  bl = pOp->p4.z;.
1c2e0 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
1c2f0 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
1c300 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44  ateArg, SQLITE_D
1c310 45 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62 6c  ELETE, zDb, zTbl
1c320 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73  , iKey);.    ass
1c330 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
1c340 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  );.  }.  if( pOp
1c350 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p2 & OPFLAG_NC
1c360 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
1c370 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ge++;.  break;.}
1c380 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
1c390 65 74 43 6f 75 6e 74 20 50 31 20 2a 20 2a 0a 2a  etCount P1 * *.*
1c3a0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1c3b0 20 72 65 73 65 74 73 20 74 68 65 20 56 4d 73 20   resets the VMs 
1c3c0 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20  internal change 
1c3d0 63 6f 75 6e 74 65 72 20 74 6f 20 30 2e 20 49 66  counter to 0. If
1c3e0 20 50 31 20 69 73 20 74 72 75 65 2c 0a 2a 2a 20   P1 is true,.** 
1c3f0 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  then the value o
1c400 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75  f the change cou
1c410 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20 74  nter is copied t
1c420 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
1c430 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20  andle.** change 
1c440 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65  counter (returne
1c450 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74 20  d by subsequent 
1c460 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33  calls to sqlite3
1c470 5f 63 68 61 6e 67 65 73 28 29 29 0a 2a 2a 20 62  _changes()).** b
1c480 65 66 6f 72 65 20 69 74 20 69 73 20 72 65 73 65  efore it is rese
1c490 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  t. This is used 
1c4a0 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
1c4b0 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ams..*/.case OP_
1c4c0 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20  ResetCount: {.  
1c4d0 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
1c4e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
1c4f0 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
1c500 6e 43 68 61 6e 67 65 29 3b 0a 20 20 7d 0a 20 20  nChange);.  }.  
1c510 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  p->nChange = 0;.
1c520 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1c530 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50  pcode: RowData P
1c540 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1c550 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
1c560 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70  ster P2 the comp
1c570 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20 66 6f  lete row data fo
1c580 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
1c590 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65  There is no inte
1c5a0 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
1c5b0 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20  e data.  .** It 
1c5c0 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f  is just copied o
1c5d0 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73  nto the P2 regis
1c5e0 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a  ter exactly as .
1c5f0 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69  ** it is found i
1c600 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
1c610 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ile..**.** If th
1c620 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
1c630 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   be pointing to 
1c640 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74  a valid row (not
1c650 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20   a NULL row).** 
1c660 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  of a real table,
1c670 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
1c680 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ble..*/./* Opcod
1c690 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32 20  e: RowKey P1 P2 
1c6a0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
1c6b0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
1c6c0 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
1c6d0 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73  row key for curs
1c6e0 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20  or P1..** There 
1c6f0 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61  is no interpreta
1c700 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61  tion of the data
1c710 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69  .  .** The key i
1c720 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68  s copied onto th
1c730 65 20 50 33 20 72 65 67 69 73 74 65 72 20 65 78  e P3 register ex
1c740 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20  actly as .** it 
1c750 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  is found in the 
1c760 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
1c770 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63  *.** If the P1 c
1c780 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f  ursor must be po
1c790 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69  inting to a vali
1c7a0 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c  d row (not a NUL
1c7b0 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72  L row).** of a r
1c7c0 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
1c7d0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
1c7e0 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79  /.case OP_RowKey
1c7f0 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74  :.case OP_RowDat
1c800 61 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70  a: {.  int i = p
1c810 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f 72  Op->p1;.  Cursor
1c820 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
1c830 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e   *pCrsr;.  u32 n
1c840 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  ;..  pOut = &p->
1c850 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 0a  aMem[pOp->p2];..
1c860 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52    /* Note that R
1c870 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74  owKey and RowDat
1c880 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61  a are really exa
1c890 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e  ctly the same in
1c8a0 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61  struction */.  a
1c8b0 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
1c8c0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1c8d0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69   pC = p->apCsr[i
1c8e0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  ];.  assert( pC-
1c8f0 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d  >isTable || pOp-
1c900 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 4b  >opcode==OP_RowK
1c910 65 79 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ey );.  assert( 
1c920 70 43 2d 3e 69 73 49 6e 64 65 78 20 7c 7c 20 70  pC->isIndex || p
1c930 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52  Op->opcode==OP_R
1c940 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65  owData );.  asse
1c950 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1c960 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52  ssert( pC->nullR
1c970 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ow==0 );.  asser
1c980 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
1c990 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  le==0 );.  asser
1c9a0 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
1c9b0 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
1c9c0 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 72 63  C->pCursor;.  rc
1c9d0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
1c9e0 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
1c9f0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
1ca00 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1ca10 6f 72 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  or;.  if( pC->is
1ca20 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 69 36 34  Index ){.    i64
1ca30 20 6e 36 34 3b 0a 20 20 20 20 61 73 73 65 72 74   n64;.    assert
1ca40 28 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  ( !pC->isTable )
1ca50 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  ;.    sqlite3Btr
1ca60 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c  eeKeySize(pCrsr,
1ca70 20 26 6e 36 34 29 3b 0a 20 20 20 20 69 66 28 20   &n64);.    if( 
1ca80 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  n64>db->aLimit[S
1ca90 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
1caa0 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  TH] ){.      got
1cab0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
1cac0 0a 20 20 20 20 6e 20 3d 20 6e 36 34 3b 0a 20 20  .    n = n64;.  
1cad0 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
1cae0 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28  e3BtreeDataSize(
1caf0 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20  pCrsr, &n);.    
1cb00 69 66 28 20 6e 3e 64 62 2d 3e 61 4c 69 6d 69 74  if( n>db->aLimit
1cb10 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
1cb20 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
1cb30 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
1cb40 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c   }.  }.  if( sql
1cb50 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
1cb60 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20  pOut, n, 0) ){. 
1cb70 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
1cb80 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20    }.  pOut->n = 
1cb90 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  n;.  MemSetTypeF
1cba0 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c  lag(pOut, MEM_Bl
1cbb0 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69  ob);.  if( pC->i
1cbc0 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63  sIndex ){.    rc
1cbd0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
1cbe0 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ey(pCrsr, 0, n, 
1cbf0 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73  pOut->z);.  }els
1cc00 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
1cc10 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72  te3BtreeData(pCr
1cc20 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e  sr, 0, n, pOut->
1cc30 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  z);.  }.  pOut->
1cc40 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
1cc50 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
1cc60 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
1cc70 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a  cast to text */.
1cc80 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
1cc90 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
1cca0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1ccb0 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20  de: Rowid P1 P2 
1ccc0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  * * *.**.** Stor
1ccd0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
1cce0 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
1ccf0 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  h is the key of 
1cd00 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
1cd10 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75  that.** P1 is cu
1cd20 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f  rrently point to
1cd30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
1cd40 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
1cd50 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
1cd60 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
1cd70 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  t i = pOp->p1;. 
1cd80 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69   Cursor *pC;.  i
1cd90 36 34 20 76 3b 0a 0a 20 20 61 73 73 65 72 74 28  64 v;..  assert(
1cda0 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
1cdb0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1cdc0 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61  p->apCsr[i];.  a
1cdd0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1cde0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
1cdf0 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
1ce00 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  C);.  if( rc ) g
1ce10 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1ce20 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 43  _error;.  if( pC
1ce30 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29  ->rowidIsValid )
1ce40 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61  {.    v = pC->la
1ce50 73 74 52 6f 77 69 64 3b 0a 20 20 7d 65 6c 73 65  stRowid;.  }else
1ce60 20 69 66 28 20 70 43 2d 3e 70 73 65 75 64 6f 54   if( pC->pseudoT
1ce70 61 62 6c 65 20 29 7b 0a 20 20 20 20 76 20 3d 20  able ){.    v = 
1ce80 6b 65 79 54 6f 49 6e 74 28 70 43 2d 3e 69 4b 65  keyToInt(pC->iKe
1ce90 79 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  y);.  }else if( 
1cea0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
1ceb0 20 20 20 2f 2a 20 4c 65 61 76 65 20 74 68 65 20     /* Leave the 
1cec0 72 6f 77 69 64 20 73 65 74 20 74 6f 20 61 20 4e  rowid set to a N
1ced0 55 4c 4c 20 2a 2f 0a 20 20 20 20 62 72 65 61 6b  ULL */.    break
1cee0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
1cef0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
1cf00 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  or!=0 );.    sql
1cf10 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
1cf20 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76  (pC->pCursor, &v
1cf30 29 3b 0a 20 20 20 20 76 20 3d 20 6b 65 79 54 6f  );.    v = keyTo
1cf40 49 6e 74 28 76 29 3b 0a 20 20 7d 0a 20 20 70 4f  Int(v);.  }.  pO
1cf50 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 4d  ut->u.i = v;.  M
1cf60 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
1cf70 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
1cf80 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1cf90 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20  ode: NullRow P1 
1cfa0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f  * * * *.**.** Mo
1cfb0 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50 31  ve the cursor P1
1cfc0 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20   to a null row. 
1cfd0 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   Any OP_Column o
1cfe0 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61  perations.** tha
1cff0 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68  t occur while th
1d000 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74  e cursor is on t
1d010 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c  he null row will
1d020 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65   always.** write
1d030 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65   a NULL..*/.case
1d040 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20   OP_NullRow: {. 
1d050 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31   int i = pOp->p1
1d060 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a  ;.  Cursor *pC;.
1d070 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
1d080 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
1d090 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1d0a0 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28  sr[i];.  assert(
1d0b0 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e   pC!=0 );.  pC->
1d0c0 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1d0d0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1d0e0 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
1d0f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74  ./* Opcode: Last
1d100 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1d110 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20  ** The next use 
1d120 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20  of the Rowid or 
1d130 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69  Column or Next i
1d140 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50  nstruction for P
1d150 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72  1 .** will refer
1d160 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74   to the last ent
1d170 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ry in the databa
1d180 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
1d190 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  x..** If the tab
1d1a0 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65  le or index is e
1d1b0 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74  mpty and P2>0, t
1d1c0 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
1d1d0 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
1d1e0 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20  f P2 is 0 or if 
1d1f0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
1d200 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c  ex is not empty,
1d210 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
1d220 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
1d230 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  g instruction..*
1d240 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20  /.case OP_Last: 
1d250 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
1d260 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f   */.  int i = pO
1d270 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f 72 20  p->p1;.  Cursor 
1d280 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
1d290 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
1d2a0 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e  s;..  assert( i>
1d2b0 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73  =0 && i<p->nCurs
1d2c0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1d2d0 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65  apCsr[i];.  asse
1d2e0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
1d2f0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
1d300 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
1d310 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d  rsr!=0 );.  rc =
1d320 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1d330 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a  t(pCrsr, &res);.
1d340 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1d350 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  res;.  pC->defer
1d360 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
1d370 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1d380 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1d390 20 20 69 66 28 20 72 65 73 20 26 26 20 70 4f 70    if( res && pOp
1d3a0 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20 70 63  ->p2>0 ){.    pc
1d3b0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1d3c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1d3d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
1d3e0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1d3f0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64  ** This opcode d
1d400 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68 65 20  oes exactly the 
1d410 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50  same thing as OP
1d420 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74 20 74  _Rewind except t
1d430 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d  hat.** it increm
1d440 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65  ents an undocume
1d450 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69  nted global vari
1d460 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  able used for te
1d470 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72  sting..**.** Sor
1d480 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69  ting is accompli
1d490 73 68 65 64 20 62 79 20 77 72 69 74 69 6e 67 20  shed by writing 
1d4a0 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73  records into a s
1d4b0 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a  orting index,.**
1d4c0 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20   then rewinding 
1d4d0 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70  that index and p
1d4e0 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66  laying it back f
1d4f0 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  rom beginning to
1d500 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65  .** end.  We use
1d510 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63   the OP_Sort opc
1d520 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f  ode instead of O
1d530 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74  P_Rewind to do t
1d540 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20  he.** rewinding 
1d550 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62  so that the glob
1d560 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c  al variable will
1d570 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   be incremented 
1d580 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f  and.** regressio
1d590 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65 74 65  n tests can dete
1d5a0 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72  rmine whether or
1d5b0 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a   not the optimiz
1d5c0 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74  er is.** correct
1d5d0 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75  ly optimizing ou
1d5e0 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65  t sorts..*/.case
1d5f0 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20   OP_Sort: {     
1d600 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69     /* jump */.#i
1d610 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
1d620 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  .  sqlite3_sort_
1d630 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74  count++;.  sqlit
1d640 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d  e3_search_count-
1d650 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 20 46  -;.#endif.  /* F
1d660 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
1d670 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a   OP_Rewind */.}.
1d680 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e  /* Opcode: Rewin
1d690 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
1d6a0 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65  .** The next use
1d6b0 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72   of the Rowid or
1d6c0 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20   Column or Next 
1d6d0 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20  instruction for 
1d6e0 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65  P1 .** will refe
1d6f0 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  r to the first e
1d700 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61  ntry in the data
1d710 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
1d720 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74  dex..** If the t
1d730 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
1d740 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c   empty and P2>0,
1d750 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
1d760 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
1d770 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69   If P2 is 0 or i
1d780 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
1d790 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
1d7a0 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  y, fall through.
1d7b0 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
1d7c0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
1d7d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69  .*/.case OP_Rewi
1d7e0 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
1d7f0 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 69 20  jump */.  int i 
1d800 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72  = pOp->p1;.  Cur
1d810 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
1d820 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
1d830 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
1d840 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
1d850 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1d860 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20   p->apCsr[i];.  
1d870 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1d880 0a 20 20 69 66 28 20 28 70 43 72 73 72 20 3d 20  .  if( (pCrsr = 
1d890 70 43 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20  pC->pCursor)!=0 
1d8a0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
1d8b0 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
1d8c0 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  rsr, &res);.    
1d8d0 70 43 2d 3e 61 74 46 69 72 73 74 20 3d 20 72 65  pC->atFirst = re
1d8e0 73 3d 3d 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65  s==0;.    pC->de
1d8f0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1d900 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
1d910 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1d920 41 4c 45 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ALE;.  }else{.  
1d930 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d 0a 20    res = 1;.  }. 
1d940 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 72   pC->nullRow = r
1d950 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  es;.  assert( pO
1d960 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
1d970 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69  p2<p->nOp );.  i
1d980 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  f( res ){.    pc
1d990 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1d9a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1d9b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20  /* Opcode: Next 
1d9c0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1d9d0 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72  * Advance cursor
1d9e0 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
1d9f0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78  oints to the nex
1da00 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  t key/data pair 
1da10 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
1da20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
1da30 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20  ere are no more 
1da40 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
1da50 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
1da60 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
1da70 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
1da80 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
1da90 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61  ursor advance wa
1daa0 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
1dab0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
1dac0 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  y to P2..**.** T
1dad0 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
1dae0 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
1daf0 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
1db00 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  udo-table..**.**
1db10 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a   See also: Prev.
1db20 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  */./* Opcode: Pr
1db30 65 76 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ev P1 P2 * * *.*
1db40 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72  *.** Back up cur
1db50 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
1db60 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1db70 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74  previous key/dat
1db80 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a  a pair in its.**
1db90 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
1dba0 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f    If there is no
1dbb0 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61   previous key/va
1dbc0 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
1dbd0 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
1dbe0 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
1dbf0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
1dc00 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
1dc10 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65  backup was succe
1dc20 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
1dc30 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
1dc40 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
1dc50 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
1dc60 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
1dc70 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
1dc80 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  le..*/.case OP_P
1dc90 72 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  rev:          /*
1dca0 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
1dcb0 5f 4e 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20  _Next: {        
1dcc0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 43 75 72  /* jump */.  Cur
1dcd0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
1dce0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
1dcf0 74 20 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f  t res;..  CHECK_
1dd00 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
1dd10 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1dd20 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1dd30 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1dd40 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1dd50 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d  ->p1];.  if( pC=
1dd60 3d 30 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  =0 ){.    break;
1dd70 20 20 2f 2a 20 53 65 65 20 74 69 63 6b 65 74 20    /* See ticket 
1dd80 23 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 70  #2273 */.  }.  p
1dd90 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
1dda0 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
1ddb0 72 73 72 20 29 3b 0a 20 20 72 65 73 20 3d 20 31  rsr );.  res = 1
1ddc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1ddd0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
1dde0 30 20 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d  0 );.  rc = pOp-
1ddf0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78 74  >opcode==OP_Next
1de00 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e   ? sqlite3BtreeN
1de10 65 78 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  ext(pCrsr, &res)
1de20 20 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   :.             
1de30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de40 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
1de50 76 69 6f 75 73 28 70 43 72 73 72 2c 20 26 72 65  vious(pCrsr, &re
1de60 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  s);.  pC->nullRo
1de70 77 20 3d 20 72 65 73 3b 0a 20 20 70 43 2d 3e 63  w = res;.  pC->c
1de80 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1de90 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
1dea0 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63  res==0 ){.    pc
1deb0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1dec0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
1ded0 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
1dee0 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
1def0 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e  endif.  }.  pC->
1df00 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1df10 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1df20 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65   Opcode: IdxInse
1df30 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  rt P1 P2 P3 * *.
1df40 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
1df50 32 20 68 6f 6c 64 73 20 61 20 53 51 4c 20 69 6e  2 holds a SQL in
1df60 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69  dex key made usi
1df70 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 49 64  ng the.** MakeId
1df80 78 52 65 63 20 69 6e 73 74 72 75 63 74 69 6f 6e  xRec instruction
1df90 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  s.  This opcode 
1dfa0 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a  writes that key.
1dfb0 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65  ** into the inde
1dfc0 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20  x P1.  Data for 
1dfd0 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c  the entry is nil
1dfe0 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20  ..**.** P3 is a 
1dff0 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76 69 64  flag that provid
1e000 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  es a hint to the
1e010 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20 74 68   b-tree layer th
1e020 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72  at this.** inser
1e030 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62  t is likely to b
1e040 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a  e an append..**.
1e050 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
1e060 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  ion only works f
1e070 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65  or indices.  The
1e080 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74   equivalent inst
1e090 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74  ruction.** for t
1e0a0 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65  ables is OP_Inse
1e0b0 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  rt..*/.case OP_I
1e0c0 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20  dxInsert: {     
1e0d0 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 69     /* in2 */.  i
1e0e0 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
1e0f0 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20    Cursor *pC;.  
1e100 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1e110 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
1e120 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
1e130 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
1e140 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20  apCsr[i]!=0 );. 
1e150 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66   assert( pIn2->f
1e160 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
1e170 29 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72 20  );.  if( (pCrsr 
1e180 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  = (pC = p->apCsr
1e190 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21 3d  [i])->pCursor)!=
1e1a0 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
1e1b0 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
1e1c0 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78 70 61  );.    rc = Expa
1e1d0 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20  ndBlob(pIn2);.  
1e1e0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1e1f0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  _OK ){.      int
1e200 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b   nKey = pIn2->n;
1e210 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
1e220 72 20 2a 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e  r *zKey = pIn2->
1e230 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  z;.      rc = sq
1e240 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
1e250 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b  (pCrsr, zKey, nK
1e260 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f  ey, "", 0, 0, pO
1e270 70 2d 3e 70 33 29 3b 0a 20 20 20 20 20 20 61 73  p->p3);.      as
1e280 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
1e290 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
1e2a0 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74       pC->cacheSt
1e2b0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1e2c0 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  LE;.    }.  }.  
1e2d0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1e2e0 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 4d 20  ode: IdxDeleteM 
1e2f0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
1e300 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** The content o
1e310 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73  f P3 registers s
1e320 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73  tarting at regis
1e330 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61  ter P2 form.** a
1e340 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1e350 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64   key. This opcod
1e360 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65  e removes that e
1e370 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a  ntry from the .*
1e380 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62  * index opened b
1e390 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a  y cursor P1..*/.
1e3a0 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74  case OP_IdxDelet
1e3b0 65 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70  e: {.  int i = p
1e3c0 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f 72  Op->p1;.  Cursor
1e3d0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
1e3e0 20 2a 70 43 72 73 72 3b 0a 20 20 61 73 73 65 72   *pCrsr;.  asser
1e3f0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
1e400 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e410 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70  2>0 && pOp->p2+p
1e420 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
1e430 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  );.  assert( i>=
1e440 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f  0 && i<p->nCurso
1e450 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1e460 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b  ->apCsr[i]!=0 );
1e470 0a 20 20 69 66 28 20 28 70 43 72 73 72 20 3d 20  .  if( (pCrsr = 
1e480 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69  (pC = p->apCsr[i
1e490 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20  ])->pCursor)!=0 
1e4a0 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 3b 0a  ){.    int res;.
1e4b0 20 20 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f      UnpackedReco
1e4c0 72 64 20 72 3b 0a 20 20 20 20 72 2e 70 4b 65 79  rd r;.    r.pKey
1e4d0 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
1e4e0 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
1e4f0 64 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20  d = pOp->p3;.   
1e500 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20   r.flags = 0;.  
1e510 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e 61    r.aMem = &p->a
1e520 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
1e530 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1e540 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1e550 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20  d(pCrsr, &r, 0, 
1e560 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66  0, &res);.    if
1e570 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1e580 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  && res==0 ){.   
1e590 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1e5a0 74 72 65 65 44 65 6c 65 74 65 28 70 43 72 73 72  treeDelete(pCrsr
1e5b0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73  );.    }.    ass
1e5c0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
1e5d0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
1e5e0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1e5f0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1e600 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1e610 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52  ./* Opcode: IdxR
1e620 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  owid P1 P2 * * *
1e630 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
1e640 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  o register P2 an
1e650 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
1e660 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79  s the last entry
1e670 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61   in the record a
1e680 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  t.** the end of 
1e690 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f  the index key po
1e6a0 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72 73  inted to by curs
1e6b0 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74  or P1.  This int
1e6c0 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a  eger should be.*
1e6d0 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  * the rowid of t
1e6e0 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
1e6f0 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64  o which this ind
1e700 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e  ex entry points.
1e710 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1e720 20 52 6f 77 69 64 2c 20 4d 61 6b 65 49 64 78 52   Rowid, MakeIdxR
1e730 65 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ec..*/.case OP_I
1e740 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  dxRowid: {      
1e750 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
1e760 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
1e770 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
1e780 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
1e790 73 72 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43  sr;.  Cursor *pC
1e7a0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  ;..  assert( i>=
1e7b0 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f  0 && i<p->nCurso
1e7c0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1e7d0 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b  ->apCsr[i]!=0 );
1e7e0 0a 20 20 69 66 28 20 28 70 43 72 73 72 20 3d 20  .  if( (pCrsr = 
1e7f0 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69  (pC = p->apCsr[i
1e800 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20  ])->pCursor)!=0 
1e810 29 7b 0a 20 20 20 20 69 36 34 20 72 6f 77 69 64  ){.    i64 rowid
1e820 3b 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ;..    assert( p
1e830 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1e840 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  o==0 );.    asse
1e850 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
1e860 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 70  =0 );.    if( !p
1e870 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
1e880 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1e890 56 64 62 65 49 64 78 52 6f 77 69 64 28 70 43 72  VdbeIdxRowid(pCr
1e8a0 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20  sr, &rowid);.   
1e8b0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1e8c0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
1e8d0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1e8e0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
1e8f0 0a 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70  .      MemSetTyp
1e900 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
1e910 49 6e 74 29 3b 0a 20 20 20 20 20 20 70 4f 75 74  Int);.      pOut
1e920 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20  ->u.i = rowid;. 
1e930 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
1e940 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1e950 49 64 78 47 45 20 50 31 20 50 32 20 50 33 20 50  IdxGE P1 P2 P3 P
1e960 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  4 P5.**.** The P
1e970 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
1e980 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
1e990 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
1e9a0 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
1e9b0 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
1e9c0 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  e ROWID.  Compar
1e9d0 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
1e9e0 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
1e9f0 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
1ea00 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
1ea10 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
1ea20 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74  g the ROWID on t
1ea30 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a  he P1 index..**.
1ea40 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
1ea50 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61  ex entry is grea
1ea60 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
1ea70 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
1ea80 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20  ue.** then jump 
1ea90 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73  to P2.  Otherwis
1eaa0 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
1eab0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
1eac0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  uction..**.** If
1ead0 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20   P5 is non-zero 
1eae0 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  then the key val
1eaf0 75 65 20 69 73 20 69 6e 63 72 65 61 73 65 64 20  ue is increased 
1eb00 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a  by an epsilon .*
1eb10 2a 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 63  * prior to the c
1eb20 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73  omparison.  This
1eb30 20 6d 61 6b 65 20 74 68 65 20 6f 70 63 6f 64 65   make the opcode
1eb40 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 47 54   work like IdxGT
1eb50 20 65 78 63 65 70 74 0a 2a 2a 20 74 68 61 74 20   except.** that 
1eb60 69 66 20 74 68 65 20 6b 65 79 20 66 72 6f 6d 20  if the key from 
1eb70 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61  register P3 is a
1eb80 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b   prefix of the k
1eb90 65 79 20 69 6e 20 74 68 65 20 63 75 72 73 6f 72  ey in the cursor
1eba0 2c 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20  ,.** the result 
1ebb0 69 73 20 66 61 6c 73 65 20 77 68 65 72 65 61 73  is false whereas
1ebc0 20 69 74 20 77 6f 75 6c 64 20 62 65 20 74 72 75   it would be tru
1ebd0 65 20 77 69 74 68 20 49 64 78 47 54 2e 0a 2a 2f  e with IdxGT..*/
1ebe0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
1ebf0 54 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a  T P1 P2 P3 * P5.
1ec00 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
1ec10 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
1ec20 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
1ec30 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
1ec40 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
1ec50 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57  at omits the ROW
1ec60 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  ID.  Compare thi
1ec70 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
1ec80 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  nst the index .*
1ec90 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  * that P1 is cur
1eca0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
1ecb0 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
1ecc0 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31   ROWID on the P1
1ecd0 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66   index..**.** If
1ece0 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
1ecf0 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  try is less than
1ed00 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74   the key value t
1ed10 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1ed20 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  ** Otherwise fal
1ed30 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
1ed40 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
1ed50 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  n..**.** If P5 i
1ed60 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20  s non-zero then 
1ed70 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73  the key value is
1ed80 20 69 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e   increased by an
1ed90 20 65 70 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a   epsilon prior .
1eda0 2a 2a 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72  ** to the compar
1edb0 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65  ison.  This make
1edc0 73 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72  s the opcode wor
1edd0 6b 20 6c 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f  k like IdxLE..*/
1ede0 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20  .case OP_IdxLT: 
1edf0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1ee00 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1ee10 5f 49 64 78 47 45 3a 20 7b 20 20 20 20 20 20 20  _IdxGE: {       
1ee20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1ee30 0a 20 20 69 6e 74 20 69 3d 20 70 4f 70 2d 3e 70  .  int i= pOp->p
1ee40 31 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b  1;.  Cursor *pC;
1ee50 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ..  assert( i>=0
1ee60 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
1ee70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
1ee80 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a  >apCsr[i]!=0 );.
1ee90 20 20 69 66 28 20 28 70 43 20 3d 20 70 2d 3e 61    if( (pC = p->a
1eea0 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f  pCsr[i])->pCurso
1eeb0 72 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20  r!=0 ){.    int 
1eec0 72 65 73 3b 0a 20 20 20 20 55 6e 70 61 63 6b 65  res;.    Unpacke
1eed0 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 20 20 61  dRecord r;.    a
1eee0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
1eef0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
1ef00 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1ef10 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p5==0 || pOp->p
1ef20 35 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65  5==1 );.    asse
1ef30 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1ef40 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20  =P4_INT32 );.   
1ef50 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
1ef60 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
1ef70 72 2e 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e  r.nField = pOp->
1ef80 70 34 2e 69 3b 0a 20 20 20 20 69 66 28 20 70 4f  p4.i;.    if( pO
1ef90 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 72  p->p5 ){.      r
1efa0 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45  .flags = UNPACKE
1efb0 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55 4e 50 41  D_INCRKEY | UNPA
1efc0 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49  CKED_IGNORE_ROWI
1efd0 44 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  D;.    }else{.  
1efe0 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e      r.flags = UN
1eff0 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f  PACKED_IGNORE_RO
1f000 57 49 44 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  WID;.    }.    r
1f010 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d  .aMem = &p->aMem
1f020 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 72  [pOp->p3];.    r
1f030 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
1f040 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 70 43 2c  dxKeyCompare(pC,
1f050 20 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20   &r, &res);.    
1f060 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
1f070 3d 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20  =OP_IdxLT ){.   
1f080 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20     res = -res;. 
1f090 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1f0a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
1f0b0 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 29 3b  ode==OP_IdxGE );
1f0c0 0a 20 20 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20  .      res++;.  
1f0d0 20 20 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3e    }.    if( res>
1f0e0 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  0 ){.      pc = 
1f0f0 70 4f 70 2d 3e 70 32 20 2d 20 31 20 3b 0a 20 20  pOp->p2 - 1 ;.  
1f100 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
1f110 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
1f120 65 73 74 72 6f 79 20 50 31 20 50 32 20 50 33 20  estroy P1 P2 P3 
1f130 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  * *.**.** Delete
1f140 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62   an entire datab
1f150 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
1f160 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  ex whose root pa
1f170 67 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ge in the databa
1f180 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69  se.** file is gi
1f190 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a  ven by P1..**.**
1f1a0 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   The table being
1f1b0 20 64 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e   destroyed is in
1f1c0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1f1d0 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30  se file if P3==0
1f1e0 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74  .  If.** P3==1 t
1f1f0 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f  hen the table to
1f200 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20   be clear is in 
1f210 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
1f220 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74  tabase file.** t
1f230 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  hat is used to s
1f240 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61  tore tables crea
1f250 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  te using CREATE 
1f260 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e  TEMPORARY TABLE.
1f270 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  .**.** If AUTOVA
1f280 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20  CUUM is enabled 
1f290 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69  then it is possi
1f2a0 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72  ble that another
1f2b0 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69   root page.** mi
1f2c0 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74  ght be moved int
1f2d0 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65  o the newly dele
1f2e0 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ted root page in
1f2f0 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61   order to keep a
1f300 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73  ll.** root pages
1f310 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74   contiguous at t
1f320 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
1f330 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
1f340 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c  he former.** val
1f350 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70  ue of the root p
1f360 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d  age that moved -
1f370 20 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72   its value befor
1f380 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72  e the move occur
1f390 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72  red -.** is stor
1f3a0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
1f3b0 32 2e 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a  2.  If no page .
1f3c0 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20  ** movement was 
1f3d0 72 65 71 75 69 72 65 64 20 28 62 65 63 61 75 73  required (becaus
1f3e0 65 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  e the table bein
1f3f0 67 20 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c  g dropped was al
1f400 72 65 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61  ready .** the la
1f410 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61  st one in the da
1f420 74 61 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a  tabase) then a z
1f430 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ero is stored in
1f440 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
1f450 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
1f460 73 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20  s disabled then 
1f470 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64  a zero is stored
1f480 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
1f490 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1f4a0 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f   Clear.*/.case O
1f4b0 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20  P_Destroy: {    
1f4c0 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
1f4d0 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f  ase */.  int iMo
1f4e0 76 65 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b  ved;.  int iCnt;
1f4f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1f500 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
1f510 45 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b  E.  Vdbe *pVdbe;
1f520 0a 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20 66  .  iCnt = 0;.  f
1f530 6f 72 28 70 56 64 62 65 3d 64 62 2d 3e 70 56 64  or(pVdbe=db->pVd
1f540 62 65 3b 20 70 56 64 62 65 3b 20 70 56 64 62 65  be; pVdbe; pVdbe
1f550 3d 70 56 64 62 65 2d 3e 70 4e 65 78 74 29 7b 0a  =pVdbe->pNext){.
1f560 20 20 20 20 69 66 28 20 70 56 64 62 65 2d 3e 6d      if( pVdbe->m
1f570 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43  agic==VDBE_MAGIC
1f580 5f 52 55 4e 20 26 26 20 70 56 64 62 65 2d 3e 69  _RUN && pVdbe->i
1f590 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32 20 26 26  nVtabMethod<2 &&
1f5a0 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30 20 29 7b   pVdbe->pc>=0 ){
1f5b0 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b 3b 0a 20  .      iCnt++;. 
1f5c0 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a 20     }.  }.#else. 
1f5d0 20 69 43 6e 74 20 3d 20 64 62 2d 3e 61 63 74 69   iCnt = db->acti
1f5e0 76 65 56 64 62 65 43 6e 74 3b 0a 23 65 6e 64 69  veVdbeCnt;.#endi
1f5f0 66 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20 29  f.  if( iCnt>1 )
1f600 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
1f610 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d  E_LOCKED;.    p-
1f620 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f  >errorAction = O
1f630 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65  E_Abort;.  }else
1f640 7b 0a 20 20 20 20 69 6e 74 20 69 44 62 20 3d 20  {.    int iDb = 
1f650 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73  pOp->p3;.    ass
1f660 65 72 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a  ert( iCnt==1 );.
1f670 20 20 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e      assert( (p->
1f680 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
1f690 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 20 20  iDb))!=0 );.    
1f6a0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1f6b0 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61  eDropTable(db->a
1f6c0 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70  Db[iDb].pBt, pOp
1f6d0 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a  ->p1, &iMoved);.
1f6e0 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
1f6f0 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
1f700 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  );.    pOut->u.i
1f710 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64   = iMoved;.#ifnd
1f720 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
1f730 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66  UTOVACUUM.    if
1f740 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1f750 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a  && iMoved!=0 ){.
1f760 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f        sqlite3Roo
1f770 74 50 61 67 65 4d 6f 76 65 64 28 26 64 62 2d 3e  tPageMoved(&db->
1f780 61 44 62 5b 69 44 62 5d 2c 20 69 4d 6f 76 65 64  aDb[iDb], iMoved
1f790 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
1f7a0 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62  }.#endif.  }.  b
1f7b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1f7c0 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20  de: Clear P1 P2 
1f7d0 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  *.**.** Delete a
1f7e0 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  ll contents of t
1f7f0 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
1f800 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
1f810 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e   root page.** in
1f820 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
1f830 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50  le is given by P
1f840 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20  1.  But, unlike 
1f850 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a  Destroy, do not.
1f860 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61  ** remove the ta
1f870 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f  ble or index fro
1f880 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
1f890 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74  ile..**.** The t
1f8a0 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
1f8b0 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
1f8c0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
1f8d0 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P2==0.  If.** P
1f8e0 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  2==1 then the ta
1f8f0 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
1f900 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
1f910 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
1f920 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
1f930 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
1f940 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
1f950 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
1f960 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  TABLE..**.** See
1f970 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a   also: Destroy.*
1f980 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a  /.case OP_Clear:
1f990 20 7b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d   {.  assert( (p-
1f9a0 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
1f9b0 3c 70 4f 70 2d 3e 70 32 29 29 21 3d 30 20 29 3b  <pOp->p2))!=0 );
1f9c0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1f9d0 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28 64  treeClearTable(d
1f9e0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e  b->aDb[pOp->p2].
1f9f0 70 42 74 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  pBt, pOp->p1);. 
1fa00 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1fa10 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c  code: CreateTabl
1fa20 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
1fa30 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e  .** Allocate a n
1fa40 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20  ew table in the 
1fa50 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
1fa60 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69  le if P1==0 or i
1fa70 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61  n the.** auxilia
1fa80 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
1fa90 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20   if P1==1 or in 
1faa0 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
1fab0 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e  base if.** P1>1.
1fac0 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74    Write the root
1fad0 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
1fae0 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  the new table in
1faf0 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
1fb00 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66  2.**.** The diff
1fb10 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61  erence between a
1fb20 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e   table and an in
1fb30 64 65 78 20 69 73 20 74 68 69 73 3a 20 20 41 20  dex is this:  A 
1fb40 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61  table must.** ha
1fb50 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65  ve a 4-byte inte
1fb60 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20  ger key and can 
1fb70 68 61 76 65 20 61 72 62 69 74 72 61 72 79 20 64  have arbitrary d
1fb80 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a  ata.  An index.*
1fb90 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61  * has an arbitra
1fba0 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61  ry key but no da
1fbb0 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ta..**.** See al
1fbc0 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a  so: CreateIndex.
1fbd0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72  */./* Opcode: Cr
1fbe0 65 61 74 65 49 6e 64 65 78 20 50 31 20 50 32 20  eateIndex P1 P2 
1fbf0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f  * * *.**.** Allo
1fc00 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78  cate a new index
1fc10 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
1fc20 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
1fc30 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  ==0 or in the.**
1fc40 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
1fc50 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
1fc60 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63  1 or in an attac
1fc70 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a  hed database if.
1fc80 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20  ** P1>1.  Write 
1fc90 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  the root page nu
1fca0 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20  mber of the new 
1fcb0 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  table into.** re
1fcc0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
1fcd0 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   See documentati
1fce0 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54  on on OP_CreateT
1fcf0 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  able for additio
1fd00 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
1fd10 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61  .*/.case OP_Crea
1fd20 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20  teIndex:        
1fd30 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
1fd40 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f  elease */.case O
1fd50 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b  P_CreateTable: {
1fd60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
1fd70 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
1fd80 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e    int pgno;.  in
1fd90 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70  t flags;.  Db *p
1fda0 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  Db;.  assert( pO
1fdb0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1fdc0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
1fdd0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
1fde0 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
1fdf0 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70  ->p1))!=0 );.  p
1fe00 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f  Db = &db->aDb[pO
1fe10 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1fe20 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b  ( pDb->pBt!=0 );
1fe30 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1fe40 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62  de==OP_CreateTab
1fe50 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61  le ){.    /* fla
1fe60 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45  gs = BTREE_INTKE
1fe70 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20  Y; */.    flags 
1fe80 3d 20 42 54 52 45 45 5f 4c 45 41 46 44 41 54 41  = BTREE_LEAFDATA
1fe90 7c 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20  |BTREE_INTKEY;. 
1fea0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67   }else{.    flag
1feb0 73 20 3d 20 42 54 52 45 45 5f 5a 45 52 4f 44 41  s = BTREE_ZERODA
1fec0 54 41 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  TA;.  }.  rc = s
1fed0 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
1fee0 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c  eTable(pDb->pBt,
1fef0 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a   &pgno, flags);.
1ff00 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1ff10 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d  _OK ){.    pOut-
1ff20 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 20  >u.i = pgno;.   
1ff30 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
1ff40 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
1ff50 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1ff60 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65  /* Opcode: Parse
1ff70 53 63 68 65 6d 61 20 50 31 20 50 32 20 2a 20 50  Schema P1 P2 * P
1ff80 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61  4 *.**.** Read a
1ff90 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74  nd parse all ent
1ffa0 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51  ries from the SQ
1ffb0 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c  LITE_MASTER tabl
1ffc0 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  e of database P1
1ffd0 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74  .** that match t
1ffe0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1fff0 50 34 2e 20 20 50 32 20 69 73 20 74 68 65 20 22  P4.  P2 is the "
20000 66 6f 72 63 65 22 20 66 6c 61 67 2e 20 20 20 41  force" flag.   A
20010 6c 77 61 79 73 20 64 6f 0a 2a 2a 20 74 68 65 20  lways do.** the 
20020 70 61 72 73 69 6e 67 20 69 66 20 50 32 20 69 73  parsing if P2 is
20030 20 74 72 75 65 2e 20 20 49 66 20 50 32 20 69 73   true.  If P2 is
20040 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 74 68 69   false, then thi
20050 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 0a 2a  s routine is a.*
20060 2a 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 73  * no-op if the s
20070 63 68 65 6d 61 20 69 73 20 6e 6f 74 20 63 75 72  chema is not cur
20080 72 65 6e 74 6c 79 20 6c 6f 61 64 65 64 2e 20 20  rently loaded.  
20090 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
200a0 69 66 20 50 32 0a 2a 2a 20 69 73 20 66 61 6c 73  if P2.** is fals
200b0 65 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41  e, the SQLITE_MA
200c0 53 54 45 52 20 74 61 62 6c 65 20 69 73 20 6f 6e  STER table is on
200d0 6c 79 20 70 61 72 73 65 64 20 69 66 20 74 68 65  ly parsed if the
200e0 20 72 65 73 74 20 6f 66 20 74 68 65 0a 2a 2a 20   rest of the.** 
200f0 73 63 68 65 6d 61 20 69 73 20 61 6c 72 65 61 64  schema is alread
20100 79 20 6c 6f 61 64 65 64 20 69 6e 74 6f 20 74 68  y loaded into th
20110 65 20 73 79 6d 62 6f 6c 20 74 61 62 6c 65 2e 0a  e symbol table..
20120 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
20130 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61  e invokes the pa
20140 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61  rser to create a
20150 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
20160 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75  hine,.** then ru
20170 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75  ns the new virtu
20180 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20  al machine.  It 
20190 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74  is thus a re-ent
201a0 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  rant opcode..*/.
201b0 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68  case OP_ParseSch
201c0 65 6d 61 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ema: {.  char *z
201d0 53 71 6c 3b 0a 20 20 69 6e 74 20 69 44 62 20 3d  Sql;.  int iDb =
201e0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 63 6f 6e 73   pOp->p1;.  cons
201f0 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b  t char *zMaster;
20200 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74  .  InitData init
20210 44 61 74 61 3b 0a 0a 20 20 61 73 73 65 72 74 28  Data;..  assert(
20220 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
20230 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 69 66 28 20  b->nDb );.  if( 
20240 21 70 4f 70 2d 3e 70 32 20 26 26 20 21 44 62 48  !pOp->p2 && !DbH
20250 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69  asProperty(db, i
20260 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  Db, DB_SchemaLoa
20270 64 65 64 29 20 29 7b 0a 20 20 20 20 62 72 65 61  ded) ){.    brea
20280 6b 3b 0a 20 20 7d 0a 20 20 7a 4d 61 73 74 65 72  k;.  }.  zMaster
20290 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28   = SCHEMA_TABLE(
202a0 69 44 62 29 3b 0a 20 20 69 6e 69 74 44 61 74 61  iDb);.  initData
202b0 2e 64 62 20 3d 20 64 62 3b 0a 20 20 69 6e 69 74  .db = db;.  init
202c0 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e  Data.iDb = pOp->
202d0 70 31 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e 70  p1;.  initData.p
202e0 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45  zErrMsg = &p->zE
202f0 72 72 4d 73 67 3b 0a 20 20 7a 53 71 6c 20 3d 20  rrMsg;.  zSql = 
20300 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
20310 62 2c 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20  b,.     "SELECT 
20320 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20  name, rootpage, 
20330 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73  sql FROM '%q'.%s
20340 20 57 48 45 52 45 20 25 73 22 2c 0a 20 20 20 20   WHERE %s",.    
20350 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e   db->aDb[iDb].zN
20360 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f  ame, zMaster, pO
20370 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 69 66 28 20  p->p4.z);.  if( 
20380 7a 53 71 6c 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  zSql==0 ) goto n
20390 6f 5f 6d 65 6d 3b 0a 20 20 28 76 6f 69 64 29 73  o_mem;.  (void)s
203a0 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
203b0 64 62 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  db);.  assert( d
203c0 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20  b->init.busy==0 
203d0 29 3b 0a 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75  );.  db->init.bu
203e0 73 79 20 3d 20 31 3b 0a 20 20 69 6e 69 74 44 61  sy = 1;.  initDa
203f0 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  ta.rc = SQLITE_O
20400 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 21 64 62  K;.  assert( !db
20410 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
20420 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
20430 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20  _exec(db, zSql, 
20440 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
20450 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20  ack, &initData, 
20460 30 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  0);.  if( rc==SQ
20470 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69  LITE_OK ) rc = i
20480 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 73 71  nitData.rc;.  sq
20490 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
204a0 7a 53 71 6c 29 3b 0a 20 20 64 62 2d 3e 69 6e 69  zSql);.  db->ini
204b0 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 28 76  t.busy = 0;.  (v
204c0 6f 69 64 29 73 71 6c 69 74 65 33 53 61 66 65 74  oid)sqlite3Safet
204d0 79 4f 6e 28 64 62 29 3b 0a 20 20 69 66 28 20 72  yOn(db);.  if( r
204e0 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
204f0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
20500 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  em;.  }.  break;
20510 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e    .}..#if !defin
20520 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
20530 4e 41 4c 59 5a 45 29 20 26 26 20 21 64 65 66 69  NALYZE) && !defi
20540 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
20550 50 41 52 53 45 52 29 0a 2f 2a 20 4f 70 63 6f 64  PARSER)./* Opcod
20560 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20  e: LoadAnalysis 
20570 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
20580 20 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65   Read the sqlite
20590 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72  _stat1 table for
205a0 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64   database P1 and
205b0 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e   load the conten
205c0 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62  t.** of that tab
205d0 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65  le into the inte
205e0 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20  rnal index hash 
205f0 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c  table.  This wil
20600 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61  l cause.** the a
20610 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73  nalysis to be us
20620 65 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e  ed when preparin
20630 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74  g all subsequent
20640 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73   queries..*/.cas
20650 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69  e OP_LoadAnalysi
20660 73 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 20 3d  s: {.  int iDb =
20670 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65   pOp->p1;.  asse
20680 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
20690 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72  b<db->nDb );.  r
206a0 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  c = sqlite3Analy
206b0 73 69 73 4c 6f 61 64 28 64 62 2c 20 69 44 62 29  sisLoad(db, iDb)
206c0 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23  ;.  break;  .}.#
206d0 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
206e0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
206f0 41 4c 59 5a 45 29 20 26 26 20 21 64 65 66 69 6e  ALYZE) && !defin
20700 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ed(SQLITE_OMIT_P
20710 41 52 53 45 52 29 20 20 2a 2f 0a 0a 2f 2a 20 4f  ARSER)  */../* O
20720 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65  pcode: DropTable
20730 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
20740 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
20750 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
20760 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
20770 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
20780 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61  .** the table na
20790 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
207a0 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
207b0 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74  called after a t
207c0 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70  able.** is dropp
207d0 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ed in order to k
207e0 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  eep the internal
207f0 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
20800 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
20810 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
20820 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
20830 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
20840 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69  pTable: {.  sqli
20850 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
20860 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d  teTable(db, pOp-
20870 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
20880 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
20890 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65  Opcode: DropInde
208a0 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  x P1 * * P4 *.**
208b0 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
208c0 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
208d0 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
208e0 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
208f0 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e  e.** the index n
20900 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
20910 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
20920 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e   called after an
20930 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f   index.** is dro
20940 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  pped in order to
20950 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e   keep the intern
20960 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
20970 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
20980 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
20990 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
209a0 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
209b0 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71  ropIndex: {.  sq
209c0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
209d0 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f  leteIndex(db, pO
209e0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
209f0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
20a00 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72  * Opcode: DropTr
20a10 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20  igger P1 * * P4 
20a20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
20a30 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
20a40 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
20a50 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
20a60 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69  cribe.** the tri
20a70 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e  gger named P4 in
20a80 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
20a90 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
20aa0 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a  ter a trigger.**
20ab0 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f   is dropped in o
20ac0 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65  rder to keep the
20ad0 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
20ae0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
20af0 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
20b00 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
20b10 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
20b20 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65  se OP_DropTrigge
20b30 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  r: {.  sqlite3Un
20b40 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
20b50 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31  gger(db, pOp->p1
20b60 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
20b70 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
20b80 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  ef SQLITE_OMIT_I
20b90 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f  NTEGRITY_CHECK./
20ba0 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72  * Opcode: Integr
20bb0 69 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a  ityCk P1 P2 P3 *
20bc0 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20   P5.**.** Do an 
20bd0 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20  analysis of the 
20be0 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64  currently open d
20bf0 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20  atabase.  Store 
20c00 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  in.** register P
20c10 31 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e  1 the text of an
20c20 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64   error message d
20c30 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72  escribing any pr
20c40 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f  oblems..** If no
20c50 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f   problems are fo
20c60 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c  und, store a NUL
20c70 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  L in register P1
20c80 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  ..**.** The regi
20c90 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73  ster P3 contains
20ca0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
20cb0 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65  ber of allowed e
20cc0 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73  rrors..** At mos
20cd0 74 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73  t reg(P3) errors
20ce0 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65   will be reporte
20cf0 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  d..** In other w
20d00 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73  ords, the analys
20d10 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e  is stops as soon
20d20 20 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f   as reg(P1) erro
20d30 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e  rs are .** seen.
20d40 20 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64    Reg(P1) is upd
20d50 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75  ated with the nu
20d60 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
20d70 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  emaining..**.** 
20d80 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  The root page nu
20d90 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62  mbers of all tab
20da0 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  les in the datab
20db0 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a  ase are integer.
20dc0 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ** stored in reg
20dd0 28 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c  (P1), reg(P1+1),
20de0 20 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e   reg(P1+2), ....
20df0 20 20 54 68 65 72 65 20 61 72 65 20 50 32 20 74    There are P2 t
20e00 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a  ables.** total..
20e10 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
20e20 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65  ot zero, the che
20e30 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68  ck is done on th
20e40 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
20e50 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f  base.** file, no
20e60 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  t the main datab
20e70 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
20e80 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
20e90 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
20ea0 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63   the integrity_c
20eb0 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  heck pragma..*/.
20ec0 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74  case OP_Integrit
20ed0 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f  yCk: {.  int nRo
20ee0 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ot;      /* Numb
20ef0 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20  er of tables to 
20f00 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20  check.  (Number 
20f10 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20  of root pages.) 
20f20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b  */.  int *aRoot;
20f30 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
20f40 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72   rootpage number
20f50 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20  s for tables to 
20f60 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20  be checked */.  
20f70 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20  int j;          
20f80 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
20f90 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
20fa0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
20fb0 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65  f errors reporte
20fc0 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20  d */.  char *z; 
20fd0 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
20fe0 66 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f  f the error repo
20ff0 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45  rt */.  Mem *pnE
21000 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73  rr;     /* Regis
21010 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63  ter keeping trac
21020 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  k of errors rema
21030 69 6e 69 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e 52  ining */.  .  nR
21040 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  oot = pOp->p2;. 
21050 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30   assert( nRoot>0
21060 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71   );.  aRoot = sq
21070 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
21080 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29  (db, sizeof(int)
21090 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20  *(nRoot+1) );.  
210a0 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67  if( aRoot==0 ) g
210b0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73  oto no_mem;.  as
210c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
210d0 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  && pOp->p3<=p->n
210e0 4d 65 6d 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d  Mem );.  pnErr =
210f0 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
21100 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  3];.  assert( (p
21110 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45  nErr->flags & ME
21120 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61  M_Int)!=0 );.  a
21130 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
21140 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
21150 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
21160 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d  .  pIn1 = &p->aM
21170 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66  em[pOp->p1];.  f
21180 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b  or(j=0; j<nRoot;
21190 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74   j++){.    aRoot
211a0 5b 6a 5d 20 3d 20 73 71 6c 69 74 65 33 56 64 62  [j] = sqlite3Vdb
211b0 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b  eIntValue(&pIn1[
211c0 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74  j]);.  }.  aRoot
211d0 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  [j] = 0;.  asser
211e0 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e  t( pOp->p5<db->n
211f0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
21200 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
21210 28 31 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30  (1<<pOp->p5))!=0
21220 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65   );.  z = sqlite
21230 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43  3BtreeIntegrityC
21240 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70  heck(db->aDb[pOp
21250 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74  ->p5].pBt, aRoot
21260 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20  , nRoot,.       
21270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21280 20 20 20 20 20 20 20 20 20 20 70 6e 45 72 72 2d            pnErr-
21290 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20  >u.i, &nErr);.  
212a0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
212b0 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72  , aRoot);.  pnEr
212c0 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a  r->u.i -= nErr;.
212d0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
212e0 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
212f0 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a   if( nErr==0 ){.
21300 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30      assert( z==0
21310 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   );.  }else if( 
21320 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  z==0 ){.    goto
21330 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65   no_mem;.  }else
21340 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
21350 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c  eMemSetStr(pIn1,
21360 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55   z, -1, SQLITE_U
21370 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65  TF8, sqlite3_fre
21380 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45  e);.  }.  UPDATE
21390 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
213a0 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
213b0 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
213c0 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
213d0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
213e0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
213f0 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
21400 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  CK */../* Opcode
21410 3a 20 46 69 66 6f 57 72 69 74 65 20 50 31 20 2a  : FifoWrite P1 *
21420 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
21430 74 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 66  te the integer f
21440 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 20  rom register P1 
21450 69 6e 74 6f 20 74 68 65 20 46 69 66 6f 2e 0a 2a  into the Fifo..*
21460 2f 0a 63 61 73 65 20 4f 50 5f 46 69 66 6f 57 72  /.case OP_FifoWr
21470 69 74 65 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ite: {        /*
21480 20 69 6e 31 20 2a 2f 0a 20 20 70 2d 3e 73 46 69   in1 */.  p->sFi
21490 66 6f 2e 64 62 20 3d 20 64 62 3b 0a 20 20 69 66  fo.db = db;.  if
214a0 28 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 66  ( sqlite3VdbeFif
214b0 6f 50 75 73 68 28 26 70 2d 3e 73 46 69 66 6f 2c  oPush(&p->sFifo,
214c0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
214d0 61 6c 75 65 28 70 49 6e 31 29 29 3d 3d 53 51 4c  alue(pIn1))==SQL
214e0 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
214f0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
21500 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
21510 20 4f 70 63 6f 64 65 3a 20 46 69 66 6f 52 65 61   Opcode: FifoRea
21520 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
21530 0a 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 72  .** Attempt to r
21540 65 61 64 20 61 20 73 69 6e 67 6c 65 20 69 6e 74  ead a single int
21550 65 67 65 72 20 66 72 6f 6d 20 74 68 65 20 46 69  eger from the Fi
21560 66 6f 2e 20 20 53 74 6f 72 65 20 74 68 61 74 0a  fo.  Store that.
21570 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  ** integer in re
21580 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 0a 2a  gister P1..** .*
21590 2a 20 49 66 20 74 68 65 20 46 69 66 6f 20 69 73  * If the Fifo is
215a0 20 65 6d 70 74 79 20 6a 75 6d 70 20 74 6f 20 50   empty jump to P
215b0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 69  2..*/.case OP_Fi
215c0 66 6f 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20  foRead: {       
215d0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 43    /* jump */.  C
215e0 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
215f0 50 54 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  PT;.  assert( pO
21600 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
21610 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p1<=p->nMem );. 
21620 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
21630 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 4d 65 6d  [pOp->p1];.  Mem
21640 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
21650 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 69 66  , MEM_Int);.  if
21660 28 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 66  ( sqlite3VdbeFif
21670 6f 50 6f 70 28 26 70 2d 3e 73 46 69 66 6f 2c 20  oPop(&p->sFifo, 
21680 26 70 4f 75 74 2d 3e 75 2e 69 29 3d 3d 53 51 4c  &pOut->u.i)==SQL
21690 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20  ITE_DONE ){.    
216a0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
216b0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
216c0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
216d0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 2f 2a  _OMIT_TRIGGER./*
216e0 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 74 65 78 74   Opcode: Context
216f0 50 75 73 68 20 2a 20 2a 20 2a 20 0a 2a 2a 0a 2a  Push * * * .**.*
21700 2a 20 53 61 76 65 20 74 68 65 20 63 75 72 72 65  * Save the curre
21710 6e 74 20 56 64 62 65 20 63 6f 6e 74 65 78 74 20  nt Vdbe context 
21720 73 75 63 68 20 74 68 61 74 20 69 74 20 63 61 6e  such that it can
21730 20 62 65 20 72 65 73 74 6f 72 65 64 20 62 79 20   be restored by 
21740 61 20 43 6f 6e 74 65 78 74 50 6f 70 0a 2a 2a 20  a ContextPop.** 
21750 6f 70 63 6f 64 65 2e 20 54 68 65 20 63 6f 6e 74  opcode. The cont
21760 65 78 74 20 73 74 6f 72 65 73 20 74 68 65 20 6c  ext stores the l
21770 61 73 74 20 69 6e 73 65 72 74 20 72 6f 77 20 69  ast insert row i
21780 64 2c 20 74 68 65 20 6c 61 73 74 20 73 74 61 74  d, the last stat
21790 65 6d 65 6e 74 20 63 68 61 6e 67 65 0a 2a 2a 20  ement change.** 
217a0 63 6f 75 6e 74 2c 20 61 6e 64 20 74 68 65 20 63  count, and the c
217b0 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e 74  urrent statement
217c0 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 2e 0a 2a   change count..*
217d0 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 74 65 78  /.case OP_Contex
217e0 74 50 75 73 68 3a 20 7b 0a 20 20 69 6e 74 20 69  tPush: {.  int i
217f0 20 3d 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61   = p->contextSta
21800 63 6b 54 6f 70 2b 2b 3b 0a 20 20 43 6f 6e 74 65  ckTop++;.  Conte
21810 78 74 20 2a 70 43 6f 6e 74 65 78 74 3b 0a 0a 20  xt *pContext;.. 
21820 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29 3b   assert( i>=0 );
21830 0a 20 20 2f 2a 20 46 49 58 20 4d 45 3a 20 54 68  .  /* FIX ME: Th
21840 69 73 20 73 68 6f 75 6c 64 20 62 65 20 61 6c 6c  is should be all
21850 6f 63 61 74 65 64 20 61 73 20 70 61 72 74 20 6f  ocated as part o
21860 66 20 74 68 65 20 76 64 62 65 20 61 74 20 63 6f  f the vdbe at co
21870 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 20 20  mpile-time */.  
21880 69 66 28 20 69 3e 3d 70 2d 3e 63 6f 6e 74 65 78  if( i>=p->contex
21890 74 53 74 61 63 6b 44 65 70 74 68 20 29 7b 0a 20  tStackDepth ){. 
218a0 20 20 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61     p->contextSta
218b0 63 6b 44 65 70 74 68 20 3d 20 69 2b 31 3b 0a 20  ckDepth = i+1;. 
218c0 20 20 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61     p->contextSta
218d0 63 6b 20 3d 20 73 71 6c 69 74 65 33 44 62 52 65  ck = sqlite3DbRe
218e0 61 6c 6c 6f 63 4f 72 46 72 65 65 28 64 62 2c 20  allocOrFree(db, 
218f0 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 2c  p->contextStack,
21900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21920 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
21930 66 28 43 6f 6e 74 65 78 74 29 2a 28 69 2b 31 29  f(Context)*(i+1)
21940 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 63 6f  );.    if( p->co
21950 6e 74 65 78 74 53 74 61 63 6b 3d 3d 30 20 29 20  ntextStack==0 ) 
21960 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
21970 0a 20 20 70 43 6f 6e 74 65 78 74 20 3d 20 26 70  .  pContext = &p
21980 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 5b 69  ->contextStack[i
21990 5d 3b 0a 20 20 70 43 6f 6e 74 65 78 74 2d 3e 6c  ];.  pContext->l
219a0 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c  astRowid = db->l
219b0 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 43 6f 6e  astRowid;.  pCon
219c0 74 65 78 74 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  text->nChange = 
219d0 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 43  p->nChange;.  pC
219e0 6f 6e 74 65 78 74 2d 3e 73 46 69 66 6f 20 3d 20  ontext->sFifo = 
219f0 70 2d 3e 73 46 69 66 6f 3b 0a 20 20 73 71 6c 69  p->sFifo;.  sqli
21a00 74 65 33 56 64 62 65 46 69 66 6f 49 6e 69 74 28  te3VdbeFifoInit(
21a10 26 70 2d 3e 73 46 69 66 6f 2c 20 64 62 29 3b 0a  &p->sFifo, db);.
21a20 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
21a30 70 63 6f 64 65 3a 20 43 6f 6e 74 65 78 74 50 6f  pcode: ContextPo
21a40 70 20 2a 20 2a 20 2a 20 0a 2a 2a 0a 2a 2a 20 52  p * * * .**.** R
21a50 65 73 74 6f 72 65 20 74 68 65 20 56 64 62 65 20  estore the Vdbe 
21a60 63 6f 6e 74 65 78 74 20 74 6f 20 74 68 65 20 73  context to the s
21a70 74 61 74 65 20 69 74 20 77 61 73 20 69 6e 20 77  tate it was in w
21a80 68 65 6e 20 63 6f 6e 74 65 78 74 50 75 73 68 20  hen contextPush 
21a90 77 61 73 20 6c 61 73 74 0a 2a 2a 20 65 78 65 63  was last.** exec
21aa0 75 74 65 64 2e 20 54 68 65 20 63 6f 6e 74 65 78  uted. The contex
21ab0 74 20 73 74 6f 72 65 73 20 74 68 65 20 6c 61 73  t stores the las
21ac0 74 20 69 6e 73 65 72 74 20 72 6f 77 20 69 64 2c  t insert row id,
21ad0 20 74 68 65 20 6c 61 73 74 20 73 74 61 74 65 6d   the last statem
21ae0 65 6e 74 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f  ent.** change co
21af0 75 6e 74 2c 20 61 6e 64 20 74 68 65 20 63 75 72  unt, and the cur
21b00 72 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 63  rent statement c
21b10 68 61 6e 67 65 20 63 6f 75 6e 74 2e 0a 2a 2f 0a  hange count..*/.
21b20 63 61 73 65 20 4f 50 5f 43 6f 6e 74 65 78 74 50  case OP_ContextP
21b30 6f 70 3a 20 7b 0a 20 20 43 6f 6e 74 65 78 74 20  op: {.  Context 
21b40 2a 70 43 6f 6e 74 65 78 74 20 3d 20 26 70 2d 3e  *pContext = &p->
21b50 63 6f 6e 74 65 78 74 53 74 61 63 6b 5b 2d 2d 70  contextStack[--p
21b60 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 54 6f  ->contextStackTo
21b70 70 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d  p];.  assert( p-
21b80 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 54 6f 70  >contextStackTop
21b90 3e 3d 30 20 29 3b 0a 20 20 64 62 2d 3e 6c 61 73  >=0 );.  db->las
21ba0 74 52 6f 77 69 64 20 3d 20 70 43 6f 6e 74 65 78  tRowid = pContex
21bb0 74 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20  t->lastRowid;.  
21bc0 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 43 6f  p->nChange = pCo
21bd0 6e 74 65 78 74 2d 3e 6e 43 68 61 6e 67 65 3b 0a  ntext->nChange;.
21be0 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 66    sqlite3VdbeFif
21bf0 6f 43 6c 65 61 72 28 26 70 2d 3e 73 46 69 66 6f  oClear(&p->sFifo
21c00 29 3b 0a 20 20 70 2d 3e 73 46 69 66 6f 20 3d 20  );.  p->sFifo = 
21c10 70 43 6f 6e 74 65 78 74 2d 3e 73 46 69 66 6f 3b  pContext->sFifo;
21c20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
21c30 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51  if /* #ifndef SQ
21c40 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
21c50 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  R */..#ifndef SQ
21c60 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
21c70 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64  CREMENT./* Opcod
21c80 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20  e: MemMax P1 P2 
21c90 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  * * *.**.** Set 
21ca0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
21cb0 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20  ister P1 to the 
21cc0 6d 61 78 69 6d 75 6d 20 6f 66 20 69 74 73 20 63  maximum of its c
21cd0 75 72 72 65 6e 74 20 76 61 6c 75 65 0a 2a 2a 20  urrent value.** 
21ce0 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  and the value in
21cf0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
21d00 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
21d10 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65  tion throws an e
21d20 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f  rror if the memo
21d30 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69  ry cell is not i
21d40 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69  nitially.** an i
21d50 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
21d60 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20  OP_MemMax: {    
21d70 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20      /* in1, in2 
21d80 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
21d90 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
21da0 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
21db0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
21dc0 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  pIn2);.  if( pIn
21dd0 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69  1->u.i<pIn2->u.i
21de0 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  ){.    pIn1->u.i
21df0 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20   = pIn2->u.i;.  
21e00 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
21e10 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
21e20 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
21e30 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
21e40 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20  IfPos P1 P2 * * 
21e50 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76  *.**.** If the v
21e60 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
21e70 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61   P1 is 1 or grea
21e80 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ter, jump to P2.
21e90 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
21ea0 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
21eb0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
21ec0 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
21ed0 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
21ee0 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
21ef0 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
21f00 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
21f10 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
21f20 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20  ase OP_IfPos: { 
21f30 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
21f40 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  in1 */.  assert(
21f50 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
21f60 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49  _Int );.  if( pI
21f70 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20  n1->u.i>0 ){.   
21f80 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
21f90 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
21fa0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
21fb0 66 4e 65 67 20 50 31 20 50 32 20 2a 20 2a 20 2a  fNeg P1 P2 * * *
21fc0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  .**.** If the va
21fd0 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
21fe0 50 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  P1 is less than 
21ff0 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32  zero, jump to P2
22000 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  . .**.** It is i
22010 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68  llegal to use th
22020 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
22030 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  n a register tha
22040 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f  t does.** not co
22050 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
22060 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  .  An assertion 
22070 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c  fault will resul
22080 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f  t if you try..*/
22090 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20  .case OP_IfNeg: 
220a0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
220b0 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72  , in1 */.  asser
220c0 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
220d0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20  EM_Int );.  if( 
220e0 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20  pIn1->u.i<0 ){. 
220f0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
22100 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
22110 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
22120 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20   IfZero P1 P2 * 
22130 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  * *.**.** If the
22140 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
22150 65 72 20 50 31 20 69 73 20 65 78 61 63 74 6c 79  er P1 is exactly
22160 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20   0, jump to P2. 
22170 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
22180 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
22190 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
221a0 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
221b0 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
221c0 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
221d0 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
221e0 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
221f0 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
22200 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b  ase OP_IfZero: {
22210 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
22220 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74   in1 */.  assert
22230 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
22240 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70  M_Int );.  if( p
22250 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20  In1->u.i==0 ){. 
22260 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
22270 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
22280 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
22290 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33   AggStep * P2 P3
222a0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65   P4 P5.**.** Exe
222b0 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75  cute the step fu
222c0 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
222d0 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a  gregate.  The.**
222e0 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35   function has P5
222f0 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34   arguments.   P4
22300 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
22310 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20   the FuncDef.** 
22320 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73  structure that s
22330 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e  pecifies the fun
22340 63 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69  ction.  Use regi
22350 73 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68  ster.** P3 as th
22360 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a  e accumulator..*
22370 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75  *.** The P5 argu
22380 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20  ments are taken 
22390 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
223a0 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63   and its.** succ
223b0 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20  essors..*/.case 
223c0 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20  OP_AggStep: {.  
223d0 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  int n = pOp->p5;
223e0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
223f0 2a 70 4d 65 6d 2c 20 2a 70 52 65 63 3b 0a 20 20  *pMem, *pRec;.  
22400 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
22410 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  ctx;.  sqlite3_v
22420 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20  alue **apVal;.. 
22430 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b   assert( n>=0 );
22440 0a 20 20 70 52 65 63 20 3d 20 26 70 2d 3e 61 4d  .  pRec = &p->aM
22450 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
22460 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pVal = p->apArg;
22470 0a 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c  .  assert( apVal
22480 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f   || n==0 );.  fo
22490 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c  r(i=0; i<n; i++,
224a0 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 70   pRec++){.    ap
224b0 56 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20  Val[i] = pRec;. 
224c0 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f     storeTypeInfo
224d0 28 70 52 65 63 2c 20 65 6e 63 6f 64 69 6e 67 29  (pRec, encoding)
224e0 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e  ;.  }.  ctx.pFun
224f0 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
22500 63 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  c;.  assert( pOp
22510 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
22520 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
22530 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20  ctx.pMem = pMem 
22540 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
22550 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b  p3];.  pMem->n++
22560 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20  ;.  ctx.s.flags 
22570 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74  = MEM_Null;.  ct
22580 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78  x.s.z = 0;.  ctx
22590 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  .s.zMalloc = 0;.
225a0 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30    ctx.s.xDel = 0
225b0 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64  ;.  ctx.s.db = d
225c0 62 3b 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72  b;.  ctx.isError
225d0 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c   = 0;.  ctx.pCol
225e0 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78  l = 0;.  if( ctx
225f0 2e 70 46 75 6e 63 2d 3e 6e 65 65 64 43 6f 6c 6c  .pFunc->needColl
22600 53 65 71 20 29 7b 0a 20 20 20 20 61 73 73 65 72  Seq ){.    asser
22610 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b  t( pOp>p->aOp );
22620 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
22630 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f  [-1].p4type==P4_
22640 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61  COLLSEQ );.    a
22650 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
22660 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
22670 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f  q );.    ctx.pCo
22680 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e  ll = pOp[-1].p4.
22690 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63 74  pColl;.  }.  (ct
226a0 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29 28  x.pFunc->xStep)(
226b0 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b  &ctx, n, apVal);
226c0 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72  .  if( ctx.isErr
226d0 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  or ){.    sqlite
226e0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
226f0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
22700 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
22710 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20  text(&ctx.s));. 
22720 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72     rc = ctx.isEr
22730 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  ror;.  }.  sqlit
22740 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
22750 28 26 63 74 78 2e 73 29 3b 0a 20 20 62 72 65 61  (&ctx.s);.  brea
22760 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
22770 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20   AggFinal P1 P2 
22780 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65  * P4 *.**.** Exe
22790 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a  cute the finaliz
227a0 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  er function for 
227b0 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50  an aggregate.  P
227c0 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f  1 is.** the memo
227d0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
227e0 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61   is the accumula
227f0 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72  tor for the aggr
22800 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  egate..**.** P2 
22810 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
22820 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
22830 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
22840 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50  n takes and.** P
22850 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
22860 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f  o the FuncDef fo
22870 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e  r this function.
22880 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75    The P2.** argu
22890 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64  ment is not used
228a0 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   by this opcode.
228b0 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65    It is only the
228c0 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61  re to disambigua
228d0 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  te.** functions 
228e0 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61  that can take va
228f0 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66  rying numbers of
22900 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65   arguments.  The
22910 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20  .** P4 argument 
22920 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66  is only needed f
22930 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74  or the degenerat
22940 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20  e case where.** 
22950 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
22960 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f  n was not previo
22970 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a  usly called..*/.
22980 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c  case OP_AggFinal
22990 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
229a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
229b0 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
229c0 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d  =p->nMem );.  pM
229d0 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  em = &p->aMem[pO
229e0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
229f0 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
22a00 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f   ~(MEM_Null|MEM_
22a10 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63  Agg))==0 );.  rc
22a20 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
22a30 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20  mFinalize(pMem, 
22a40 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a  pOp->p4.pFunc);.
22a50 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
22a60 5f 45 52 52 4f 52 20 29 7b 0a 20 20 20 20 73 71  _ERROR ){.    sq
22a70 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
22a80 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
22a90 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
22aa0 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b  lue_text(pMem));
22ab0 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
22ac0 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
22ad0 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29  (pMem, encoding)
22ae0 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
22af0 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20  LOBSIZE(pMem);. 
22b00 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
22b10 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20  MemTooBig(pMem) 
22b20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
22b30 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  big;.  }.  break
22b40 3b 0a 7d 0a 0a 0a 23 69 66 20 21 64 65 66 69 6e  ;.}...#if !defin
22b50 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
22b60 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e  ACUUM) && !defin
22b70 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
22b80 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65  TTACH)./* Opcode
22b90 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a  : Vacuum * * * *
22ba0 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20   *.**.** Vacuum 
22bb0 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62  the entire datab
22bc0 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ase.  This opcod
22bd0 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74 68  e will cause oth
22be0 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61  er virtual.** ma
22bf0 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72 65  chines to be cre
22c00 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20 49  ated and run.  I
22c10 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61 6c  t may not be cal
22c20 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a  led from within.
22c30 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ** a transaction
22c40 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63  ..*/.case OP_Vac
22c50 75 75 6d 3a 20 7b 0a 20 20 69 66 28 20 73 71 6c  uum: {.  if( sql
22c60 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
22c70 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
22c80 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 20 0a 20  ue_to_misuse; . 
22c90 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e   rc = sqlite3Run
22ca0 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d  Vacuum(&p->zErrM
22cb0 73 67 2c 20 64 62 29 3b 0a 20 20 69 66 28 20 73  sg, db);.  if( s
22cc0 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
22cd0 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
22ce0 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
22cf0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
22d00 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
22d10 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
22d20 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65  ACUUM)./* Opcode
22d30 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20  : IncrVacuum P1 
22d40 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50  P2 * * *.**.** P
22d50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20  erform a single 
22d60 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72  step of the incr
22d70 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70  emental vacuum p
22d80 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74  rocedure on.** t
22d90 68 65 20 50 31 20 64 61 74 61 62 61 73 65 2e 20  he P1 database. 
22da0 49 66 20 74 68 65 20 76 61 63 75 75 6d 20 68 61  If the vacuum ha
22db0 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70  s finished, jump
22dc0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a   to instruction.
22dd0 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  ** P2. Otherwise
22de0 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
22df0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
22e00 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
22e10 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b  OP_IncrVacuum: {
22e20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
22e30 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
22e40 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
22e50 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
22e60 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
22e70 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
22e80 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
22e90 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74  p1))!=0 );.  pBt
22ea0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
22eb0 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20  p1].pBt;.  rc = 
22ec0 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72  sqlite3BtreeIncr
22ed0 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 69  Vacuum(pBt);.  i
22ee0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  f( rc==SQLITE_DO
22ef0 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  NE ){.    pc = p
22f00 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
22f10 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
22f20 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
22f30 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
22f40 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20  : Expire P1 * * 
22f50 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20  * *.**.** Cause 
22f60 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74  precompiled stat
22f70 65 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65  ements to become
22f80 20 65 78 70 69 72 65 64 2e 20 41 6e 20 65 78 70   expired. An exp
22f90 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a  ired statement.*
22fa0 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20  * fails with an 
22fb0 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53 51  error code of SQ
22fc0 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 66 20 69  LITE_SCHEMA if i
22fd0 74 20 69 73 20 65 76 65 72 20 65 78 65 63 75 74  t is ever execut
22fe0 65 64 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69  ed .** (via sqli
22ff0 74 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20  te3_step())..** 
23000 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20  .** If P1 is 0, 
23010 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61  then all SQL sta
23020 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65  tements become e
23030 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69 73  xpired. If P1 is
23040 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68   non-zero,.** th
23050 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72  en only the curr
23060 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
23070 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 66 66  statement is aff
23080 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20  ected. .*/.case 
23090 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69  OP_Expire: {.  i
230a0 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  f( !pOp->p1 ){. 
230b0 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
230c0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
230d0 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  ts(db);.  }else{
230e0 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
230f0 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
23100 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
23110 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
23120 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CACHE./* Opcode:
23130 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32   TableLock P1 P2
23140 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f   P3 P4 *.**.** O
23150 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20  btain a lock on 
23160 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
23170 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  le. This instruc
23180 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65  tion is only use
23190 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68  d when.** the sh
231a0 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75  ared-cache featu
231b0 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a  re is enabled. .
231c0 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 20  **.** If P1 is  
231d0 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
231e0 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c   database in sql
231f0 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68  ite3.aDb[] of th
23200 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e  e database.** on
23210 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20   which the lock 
23220 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20  is acquired.  A 
23230 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61  readlock is obta
23240 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72  ined if P3==0 or
23250 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b  .** a write lock
23260 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a   if P3==1..**.**
23270 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P2 contains the
23280 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68   root-page of th
23290 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e  e table to lock.
232a0 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69  .**.** P4 contai
232b0 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ns a pointer to 
232c0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
232d0 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b  table being lock
232e0 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  ed. This is only
232f0 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65  .** used to gene
23300 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65  rate an error me
23310 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63  ssage if the loc
23320 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61  k cannot be obta
23330 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ined..*/.case OP
23340 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20  _TableLock: {.  
23350 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  int p1 = pOp->p1
23360 3b 20 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c  ; .  u8 isWriteL
23370 6f 63 6b 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  ock = pOp->p3;. 
23380 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26   assert( p1>=0 &
23390 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  & p1<db->nDb );.
233a0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
233b0 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 31  reeMask & (1<<p1
233c0 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ))!=0 );.  asser
233d0 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d  t( isWriteLock==
233e0 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b  0 || isWriteLock
233f0 3d 3d 31 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==1 );.  rc = sq
23400 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61  lite3BtreeLockTa
23410 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e  ble(db->aDb[p1].
23420 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73  pBt, pOp->p2, is
23430 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 69 66  WriteLock);.  if
23440 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43  ( rc==SQLITE_LOC
23450 4b 45 44 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  KED ){.    const
23460 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e   char *z = pOp->
23470 70 34 2e 7a 3b 0a 20 20 20 20 73 71 6c 69 74 65  p4.z;.    sqlite
23480 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
23490 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74  ErrMsg, db, "dat
234a0 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c  abase table is l
234b0 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a  ocked: %s", z);.
234c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
234d0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
234e0 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
234f0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
23500 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
23510 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
23520 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50  : VBegin * * * P
23530 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  4 *.**.** P4 may
23540 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   be a pointer to
23550 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
23560 20 73 74 72 75 63 74 75 72 65 2e 20 49 66 20 73   structure. If s
23570 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20  o, call the .** 
23580 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f  xBegin method fo
23590 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a  r that table..**
235a0 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65  .** Also, whethe
235b0 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73  r or not P4 is s
235c0 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74  et, check that t
235d0 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67  his is not being
235e0 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20   called from.** 
235f0 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63  within a callbac
23600 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  k to a virtual t
23610 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74  able xSync() met
23620 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20 73  hod. If it is, s
23630 65 74 20 74 68 65 0a 2a 2a 20 65 72 72 6f 72 20  et the.** error 
23640 63 6f 64 65 20 74 6f 20 53 51 4c 49 54 45 5f 4c  code to SQLITE_L
23650 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f  OCKED..*/.case O
23660 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 73 71  P_VBegin: {.  sq
23670 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
23680 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
23690 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  b;.  rc = sqlite
236a0 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70  3VtabBegin(db, p
236b0 56 74 61 62 29 3b 0a 20 20 69 66 28 20 70 56 74  Vtab);.  if( pVt
236c0 61 62 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ab ){.    sqlite
236d0 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
236e0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
236f0 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d  zErrMsg = pVtab-
23700 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56  >zErrMsg;.    pV
23710 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  tab->zErrMsg = 0
23720 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
23730 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
23740 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
23750 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
23760 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
23770 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
23780 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a  de: VCreate P1 *
23790 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
237a0 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
237b0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
237c0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
237d0 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65  Call the xCreate
237e0 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74   method.** for t
237f0 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
23800 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b  se OP_VCreate: {
23810 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
23820 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62  tabCallCreate(db
23830 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
23840 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73  p4.z, &p->zErrMs
23850 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
23860 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
23870 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
23880 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
23890 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
238a0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
238b0 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20  : VDestroy P1 * 
238c0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
238d0 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
238e0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
238f0 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
23900 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f  Call the xDestro
23910 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74  y method.** of t
23920 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
23930 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20  se OP_VDestroy: 
23940 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  {.  p->inVtabMet
23950 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20  hod = 2;.  rc = 
23960 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
23970 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e  estroy(db, pOp->
23980 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
23990 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
239a0 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  d = 0;.  break;.
239b0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
239c0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
239d0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
239e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
239f0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
23a00 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20  ode: VOpen P1 * 
23a10 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
23a20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
23a30 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
23a40 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
23a50 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
23a60 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  e..** P1 is a cu
23a70 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68  rsor number.  Th
23a80 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20  is opcode opens 
23a90 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  a cursor to the 
23aa0 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
23ab0 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74   and stores that
23ac0 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a   cursor in P1..*
23ad0 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a  /.case OP_VOpen:
23ae0 20 7b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 75   {.  Cursor *pCu
23af0 72 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33  r = 0;.  sqlite3
23b00 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
23b10 74 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 0a  tabCursor = 0;..
23b20 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
23b30 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
23b40 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33  pVtab;.  sqlite3
23b50 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
23b60 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75   = (sqlite3_modu
23b70 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64  le *)pVtab->pMod
23b80 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 70  ule;..  assert(p
23b90 56 74 61 62 20 26 26 20 70 4d 6f 64 75 6c 65 29  Vtab && pModule)
23ba0 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  ;.  if( sqlite3S
23bb0 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67  afetyOff(db) ) g
23bc0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
23bd0 5f 6d 69 73 75 73 65 3b 0a 20 20 72 63 20 3d 20  _misuse;.  rc = 
23be0 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70  pModule->xOpen(p
23bf0 56 74 61 62 2c 20 26 70 56 74 61 62 43 75 72 73  Vtab, &pVtabCurs
23c00 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62  or);.  sqlite3Db
23c10 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72  Free(db, p->zErr
23c20 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d  Msg);.  p->zErrM
23c30 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72  sg = pVtab->zErr
23c40 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45  Msg;.  pVtab->zE
23c50 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69 66 28  rrMsg = 0;.  if(
23c60 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
23c70 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
23c80 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
23c90 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
23ca0 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49  ==rc ){.    /* I
23cb0 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65  nitialize sqlite
23cc0 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61  3_vtab_cursor ba
23cd0 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20  se class */.    
23ce0 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
23cf0 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20  ab = pVtab;..   
23d00 20 2f 2a 20 49 6e 69 74 69 61 6c 69 73 65 20 76   /* Initialise v
23d10 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63  dbe cursor objec
23d20 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20  t */.    pCur = 
23d30 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
23d40 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 70 4f 70 5b  , pOp->p1, &pOp[
23d50 2d 31 5d 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20  -1], -1, 0);.   
23d60 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20   if( pCur ){.   
23d70 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75     pCur->pVtabCu
23d80 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73  rsor = pVtabCurs
23d90 6f 72 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e  or;.      pCur->
23da0 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 43  pModule = pVtabC
23db0 75 72 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70 4d  ursor->pVtab->pM
23dc0 6f 64 75 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65  odule;.    }else
23dd0 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c  {.      db->mall
23de0 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
23df0 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c      pModule->xCl
23e00 6f 73 65 28 70 56 74 61 62 43 75 72 73 6f 72 29  ose(pVtabCursor)
23e10 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
23e20 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
23e30 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
23e40 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
23e50 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
23e60 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
23e70 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65  * Opcode: VFilte
23e80 72 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  r P1 P2 P3 P4 *.
23e90 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  **.** P1 is a cu
23ea0 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e  rsor opened usin
23eb0 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20  g VOpen.  P2 is 
23ec0 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75  an address to ju
23ed0 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20  mp to if.** the 
23ee0 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20  filtered result 
23ef0 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a  set is empty..**
23f00 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65 72  .** P4 is either
23f10 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e   NULL or a strin
23f20 67 20 74 68 61 74 20 77 61 73 20 67 65 6e 65 72  g that was gener
23f30 61 74 65 64 20 62 79 20 74 68 65 20 78 42 65 73  ated by the xBes
23f40 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64  tIndex.** method
23f50 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20   of the module. 
23f60 20 54 68 65 20 69 6e 74 65 72 70 72 65 74 61 74   The interpretat
23f70 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74  ion of the P4 st
23f80 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20  ring is left.** 
23f90 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d  to the module im
23fa0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  plementation..**
23fb0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
23fc0 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c  invokes the xFil
23fd0 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68  ter method on th
23fe0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
23ff0 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20  specified.** by 
24000 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72  P1.  The integer
24010 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61   query plan para
24020 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72  meter to xFilter
24030 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
24040 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65  gister.** P3. Re
24050 67 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72  gister P3+1 stor
24060 65 73 20 74 68 65 20 61 72 67 63 20 70 61 72 61  es the argc para
24070 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61 73 73  meter to be pass
24080 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69  ed to the.** xFi
24090 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67  lter method. Reg
240a0 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b  isters P3+2..P3+
240b0 31 2b 61 72 67 63 20 61 72 65 20 74 68 65 20 61  1+argc are the a
240c0 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  rgc.** additiona
240d0 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77 68 69  l parameters whi
240e0 63 68 20 61 72 65 20 70 61 73 73 65 64 20 74 6f  ch are passed to
240f0 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61  .** xFilter as a
24100 72 67 76 2e 20 52 65 67 69 73 74 65 72 20 50 33  rgv. Register P3
24110 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b  +2 becomes argv[
24120 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20 74  0] when passed t
24130 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a  o xFilter..**.**
24140 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   A jump is made 
24150 74 6f 20 50 32 20 69 66 20 74 68 65 20 72 65 73  to P2 if the res
24160 75 6c 74 20 73 65 74 20 61 66 74 65 72 20 66 69  ult set after fi
24170 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65  ltering would be
24180 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20   empty..*/.case 
24190 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20  OP_VFilter: {   
241a0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  /* jump */.  int
241b0 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75   nArg;.  int iQu
241c0 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  ery;.  const sql
241d0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
241e0 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75  dule;.  Mem *pQu
241f0 65 72 79 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  ery = &p->aMem[p
24200 4f 70 2d 3e 70 33 5d 3b 0a 20 20 4d 65 6d 20 2a  Op->p3];.  Mem *
24210 70 41 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b  pArgc = &pQuery[
24220 31 5d 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  1];.  sqlite3_vt
24230 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62  ab_cursor *pVtab
24240 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65  Cursor;.  sqlite
24250 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 0a  3_vtab *pVtab;..
24260 20 20 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d    Cursor *pCur =
24270 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
24280 31 5d 3b 0a 0a 20 20 52 45 47 49 53 54 45 52 5f  1];..  REGISTER_
24290 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
242a0 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74  Query);.  assert
242b0 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
242c0 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75  sor );.  pVtabCu
242d0 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74  rsor = pCur->pVt
242e0 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61  abCursor;.  pVta
242f0 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d  b = pVtabCursor-
24300 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
24310 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
24320 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74  le;..  /* Grab t
24330 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20  he index number 
24340 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74  and argc paramet
24350 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ers */.  assert(
24360 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26   (pQuery->flags&
24370 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70  MEM_Int)!=0 && p
24380 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  Argc->flags==MEM
24390 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d  _Int );.  nArg =
243a0 20 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69   pArgc->u.i;.  i
243b0 51 75 65 72 79 20 3d 20 70 51 75 65 72 79 2d 3e  Query = pQuery->
243c0 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  u.i;..  /* Invok
243d0 65 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  e the xFilter me
243e0 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20  thod */.  {.    
243f0 69 6e 74 20 72 65 73 20 3d 20 30 3b 0a 20 20 20  int res = 0;.   
24400 20 69 6e 74 20 69 3b 0a 20 20 20 20 4d 65 6d 20   int i;.    Mem 
24410 2a 2a 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41  **apArg = p->apA
24420 72 67 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d 20  rg;.    for(i = 
24430 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
24440 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20  .      apArg[i] 
24450 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20  = &pArgc[i+1];. 
24460 20 20 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e       storeTypeIn
24470 66 6f 28 61 70 41 72 67 5b 69 5d 2c 20 30 29 3b  fo(apArg[i], 0);
24480 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
24490 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
244a0 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
244b0 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
244c0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62  .    sqlite3Vtab
244d0 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 20  Lock(pVtab);.   
244e0 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
244f0 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70   = 1;.    rc = p
24500 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28  Module->xFilter(
24510 70 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75  pVtabCursor, iQu
24520 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  ery, pOp->p4.z, 
24530 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20  nArg, apArg);.  
24540 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
24550 64 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  d = 0;.    sqlit
24560 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
24570 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d  zErrMsg);.    p-
24580 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62  >zErrMsg = pVtab
24590 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70  ->zErrMsg;.    p
245a0 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  Vtab->zErrMsg = 
245b0 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  0;.    sqlite3Vt
245c0 61 62 55 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74  abUnlock(db, pVt
245d0 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  ab);.    if( rc=
245e0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
245f0 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c      res = pModul
24600 65 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72  e->xEof(pVtabCur
24610 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  sor);.    }.    
24620 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
24630 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61  yOn(db) ) goto a
24640 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
24650 73 65 3b 0a 0a 20 20 20 20 69 66 28 20 72 65 73  se;..    if( res
24660 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
24670 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
24680 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75  }.  }.  pCur->nu
24690 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72  llRow = 0;..  br
246a0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
246b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
246c0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
246d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
246e0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
246f0 2a 20 4f 70 63 6f 64 65 3a 20 56 52 6f 77 69 64  * Opcode: VRowid
24700 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
24710 2a 2a 20 53 74 6f 72 65 20 69 6e 74 6f 20 72 65  ** Store into re
24720 67 69 73 74 65 72 20 50 32 20 20 74 68 65 20 72  gister P2  the r
24730 6f 77 69 64 20 6f 66 0a 2a 2a 20 74 68 65 20 76  owid of.** the v
24740 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61  irtual-table tha
24750 74 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  t the P1 cursor 
24760 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 0a  is pointing to..
24770 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 6f 77 69  */.case OP_VRowi
24780 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
24790 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
247a0 61 73 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ase */.  sqlite3
247b0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
247c0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
247d0 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
247e0 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 52   sqlite_int64 iR
247f0 6f 77 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43  ow;.  Cursor *pC
24800 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
24810 70 2d 3e 70 31 5d 3b 0a 0a 20 20 61 73 73 65 72  p->p1];..  asser
24820 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
24830 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43  rsor );.  if( pC
24840 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  ur->nullRow ){. 
24850 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
24860 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56  pVtab = pCur->pV
24870 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
24880 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
24890 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
248a0 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
248b0 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 69 66 28  >xRowid );.  if(
248c0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
248d0 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
248e0 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
248f0 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
24900 2d 3e 78 52 6f 77 69 64 28 70 43 75 72 2d 3e 70  ->xRowid(pCur->p
24910 56 74 61 62 43 75 72 73 6f 72 2c 20 26 69 52 6f  VtabCursor, &iRo
24920 77 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  w);.  sqlite3DbF
24930 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
24940 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73  sg);.  p->zErrMs
24950 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  g = pVtab->zErrM
24960 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72  sg;.  pVtab->zEr
24970 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69 66 28 20  rMsg = 0;.  if( 
24980 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
24990 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
249a0 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
249b0 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
249c0 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
249d0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
249e0 52 6f 77 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  Row;.  break;.}.
249f0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
24a00 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
24a10 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
24a20 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
24a30 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
24a40 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32  e: VColumn P1 P2
24a50 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74   P3 * *.**.** St
24a60 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ore the value of
24a70 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d   the P2-th colum
24a80 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20  n of.** the row 
24a90 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74  of the virtual-t
24aa0 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a  able that the .*
24ab0 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 70  * P1 cursor is p
24ac0 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20  ointing to into 
24ad0 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a  register P3..*/.
24ae0 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a  case OP_VColumn:
24af0 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
24b00 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
24b10 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
24b20 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d   *pModule;.  Mem
24b30 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74   *pDest;.  sqlit
24b40 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74  e3_context sCont
24b50 65 78 74 3b 0a 0a 20 20 43 75 72 73 6f 72 20 2a  ext;..  Cursor *
24b60 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
24b70 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
24b80 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43  rt( pCur->pVtabC
24b90 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
24ba0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
24bb0 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
24bc0 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 70   );.  pDest = &p
24bd0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
24be0 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
24bf0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69  lRow ){.    sqli
24c00 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
24c10 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72  l(pDest);.    br
24c20 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
24c30 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
24c40 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
24c50 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
24c60 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
24c70 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c  t( pModule->xCol
24c80 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28  umn );.  memset(
24c90 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69  &sContext, 0, si
24ca0 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b  zeof(sContext));
24cb0 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75  ..  /* The outpu
24cc0 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61  t cell may alrea
24cd0 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72  dy have a buffer
24ce0 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65   allocated. Move
24cf0 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e  .  ** the curren
24d00 74 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43  t contents to sC
24d10 6f 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20 63  ontext.s so in c
24d20 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e  ase the user-fun
24d30 63 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20  ction .  ** can 
24d40 75 73 65 20 74 68 65 20 61 6c 72 65 61 64 79 20  use the already 
24d50 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72  allocated buffer
24d60 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f   instead of allo
24d70 63 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e  cating a .  ** n
24d80 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73  ew one..  */.  s
24d90 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
24da0 65 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70  e(&sContext.s, p
24db0 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54  Dest);.  MemSetT
24dc0 79 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65 78  ypeFlag(&sContex
24dd0 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  t.s, MEM_Null);.
24de0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
24df0 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f  fetyOff(db) ) go
24e00 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
24e10 6d 69 73 75 73 65 3b 0a 20 20 72 63 20 3d 20 70  misuse;.  rc = p
24e20 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28  Module->xColumn(
24e30 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
24e40 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f  r, &sContext, pO
24e50 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65  p->p2);.  sqlite
24e60 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
24e70 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45  ErrMsg);.  p->zE
24e80 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a  rrMsg = pVtab->z
24e90 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d  ErrMsg;.  pVtab-
24ea0 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 0a 20  >zErrMsg = 0;.. 
24eb0 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73   /* Copy the res
24ec0 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
24ed0 69 6f 6e 20 74 6f 20 74 68 65 20 50 33 20 72 65  ion to the P3 re
24ee0 67 69 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20  gister. We.  ** 
24ef0 64 6f 20 74 68 69 73 20 72 65 67 61 72 64 6c 65  do this regardle
24f00 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
24f10 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f 63   not an error oc
24f20 63 75 72 65 64 20 74 6f 20 65 6e 73 75 72 65 20  cured to ensure 
24f30 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63  any.  ** dynamic
24f40 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 73   allocation in s
24f50 43 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d 65 6d  Context.s (a Mem
24f60 20 73 74 72 75 63 74 29 20 69 73 20 20 72 65 6c   struct) is  rel
24f70 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71  eased..  */.  sq
24f80 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
24f90 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65 78  ncoding(&sContex
24fa0 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  t.s, encoding);.
24fb0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
24fc0 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
24fd0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
24fe0 65 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20 26 73  emMove(pDest, &s
24ff0 43 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20 55 50  Context.s);.  UP
25000 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
25010 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28  E(pDest);..  if(
25020 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
25030 28 64 62 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  (db) ){.    goto
25040 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
25050 73 75 73 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20  suse;.  }.  if( 
25060 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
25070 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20  oBig(pDest) ){. 
25080 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
25090 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
250a0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
250b0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
250c0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
250d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
250e0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
250f0 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a  e: VNext P1 P2 *
25100 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e   * *.**.** Advan
25110 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ce virtual table
25120 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20   P1 to the next 
25130 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c  row in its resul
25140 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d  t set and.** jum
25150 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
25160 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65   P2.  Or, if the
25170 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68   virtual table h
25180 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68  as reached.** th
25190 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73  e end of its res
251a0 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61  ult set, then fa
251b0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
251c0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
251d0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
251e0 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  Next: {   /* jum
251f0 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  p */.  sqlite3_v
25200 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
25210 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
25220 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
25230 6e 74 20 72 65 73 20 3d 20 30 3b 0a 0a 20 20 43  nt res = 0;..  C
25240 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d  ursor *pCur = p-
25250 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
25260 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
25270 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
25280 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c    if( pCur->null
25290 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  Row ){.    break
252a0 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20  ;.  }.  pVtab = 
252b0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
252c0 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
252d0 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
252e0 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20  dule;.  assert( 
252f0 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29  pModule->xNext )
25300 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
25310 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f  he xNext() metho
25320 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
25330 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79   There is no way
25340 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e   for the.  ** un
25350 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65  derlying impleme
25360 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72  ntation to retur
25370 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e  n an error if on
25380 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a  e occurs during.
25390 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e    ** xNext(). In
253a0 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72  stead, if an err
253b0 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20  or occurs, true 
253c0 69 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64  is returned (ind
253d0 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20  icating that .  
253e0 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61 69 6c  ** data is avail
253f0 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72  able) and the er
25400 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ror code returne
25410 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f  d when xColumn o
25420 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65  r.  ** some othe
25430 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74  r method is next
25440 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20   invoked on the 
25450 73 61 76 65 20 76 69 72 74 75 61 6c 20 74 61 62  save virtual tab
25460 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a  le cursor..  */.
25470 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
25480 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
25490 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
254a0 69 73 75 73 65 3b 0a 20 20 73 71 6c 69 74 65 33  isuse;.  sqlite3
254b0 56 74 61 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b  VtabLock(pVtab);
254c0 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
254d0 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70  od = 1;.  rc = p
254e0 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43  Module->xNext(pC
254f0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29  ur->pVtabCursor)
25500 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  ;.  p->inVtabMet
25510 68 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  hod = 0;.  sqlit
25520 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
25530 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a  zErrMsg);.  p->z
25540 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e  ErrMsg = pVtab->
25550 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62  zErrMsg;.  pVtab
25560 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20  ->zErrMsg = 0;. 
25570 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
25580 63 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20  ck(db, pVtab);. 
25590 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
255a0 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20  OK ){.    res = 
255b0 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43  pModule->xEof(pC
255c0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29  ur->pVtabCursor)
255d0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
255e0 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
255f0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
25600 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 69  _to_misuse;..  i
25610 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f  f( !res ){.    /
25620 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61  * If there is da
25630 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a  ta, jump to P2 *
25640 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  /.    pc = pOp->
25650 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
25660 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
25670 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
25680 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
25690 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
256a0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
256b0 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d  * Opcode: VRenam
256c0 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
256d0 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
256e0 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
256f0 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
25700 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
25710 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69  tructure..** Thi
25720 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
25730 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
25740 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  ng xRename metho
25750 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  d. The value.** 
25760 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
25770 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
25780 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74  zName argument t
25790 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65  o the xRename me
257a0 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  thod..*/.case OP
257b0 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71  _VRename: {.  sq
257c0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
257d0 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
257e0 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 20  b;.  Mem *pName 
257f0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
25800 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
25810 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78  Vtab->pModule->x
25820 52 65 6e 61 6d 65 20 29 3b 0a 20 20 52 45 47 49  Rename );.  REGI
25830 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
25840 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 0a 20 20 53  p1, pName);..  S
25850 74 72 69 6e 67 69 66 79 28 70 4e 61 6d 65 2c 20  tringify(pName, 
25860 65 6e 63 6f 64 69 6e 67 29 3b 0a 0a 20 20 69 66  encoding);..  if
25870 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
25880 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
25890 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
258a0 65 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  e;.  sqlite3Vtab
258b0 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 72  Lock(pVtab);.  r
258c0 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  c = pVtab->pModu
258d0 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61  le->xRename(pVta
258e0 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20  b, pName->z);.  
258f0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
25900 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
25910 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56   p->zErrMsg = pV
25920 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20  tab->zErrMsg;.  
25930 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d  pVtab->zErrMsg =
25940 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61   0;.  sqlite3Vta
25950 62 55 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61  bUnlock(db, pVta
25960 62 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  b);.  if( sqlite
25970 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20  3SafetyOn(db) ) 
25980 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
25990 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 62 72 65  o_misuse;..  bre
259a0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
259b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
259c0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
259d0 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74  * Opcode: VUpdat
259e0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
259f0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
25a00 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
25a10 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
25a20 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
25a30 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
25a40 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
25a50 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
25a60 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74  ding xUpdate met
25a70 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a  hod. P2 values.*
25a80 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73  * are contiguous
25a90 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74   memory cells st
25aa0 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20  arting at P3 to 
25ab0 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64  pass to the xUpd
25ac0 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  ate .** invocati
25ad0 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e  on. The value in
25ae0 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32   register (P3+P2
25af0 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  -1) corresponds 
25b00 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20  to the .** p2th 
25b10 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61  element of the a
25b20 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64  rgv array passed
25b30 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a   to xUpdate..**.
25b40 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d  ** The xUpdate m
25b50 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20  ethod will do a 
25b60 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53  DELETE or an INS
25b70 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20  ERT or both..** 
25b80 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d  The argv[0] elem
25b90 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65  ent (which corre
25ba0 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79  sponds to memory
25bb0 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20   cell P3).** is 
25bc0 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72  the rowid of a r
25bd0 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49  ow to delete.  I
25be0 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c  f argv[0] is NUL
25bf0 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65  L then no .** de
25c00 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20  letion occurs.  
25c10 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d  The argv[1] elem
25c20 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64  ent is the rowid
25c30 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20   of the new .** 
25c40 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62  row.  This can b
25c50 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74  e NULL to have t
25c60 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
25c70 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20   select the new 
25c80 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74  .** rowid for it
25c90 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65  self.  The subse
25ca0 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69  quent elements i
25cb0 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20  n the array are 
25cc0 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f  .** the values o
25cd0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
25ce0 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20   new row..**.** 
25cf0 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f  If P2==1 then no
25d00 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f   insert is perfo
25d10 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69  rmed.  argv[0] i
25d20 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a  s the rowid of.*
25d30 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  * a row to delet
25d40 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  e..**.** P1 is a
25d50 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49   boolean flag. I
25d60 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  f it is set to t
25d70 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64  rue and the xUpd
25d80 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73  ate call.** is s
25d90 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20  uccessful, then 
25da0 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
25db0 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61  ed by sqlite3_la
25dc0 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
25dd0 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20  ) .** is set to 
25de0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
25df0 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72   rowid for the r
25e00 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64  ow just inserted
25e10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70  ..*/.case OP_VUp
25e20 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  date: {.  sqlite
25e30 33 5f 76 74 61 62 20 2a 70 56 74 61 62 20 3d 20  3_vtab *pVtab = 
25e40 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20  pOp->p4.pVtab;. 
25e50 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
25e60 2a 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69  *pModule = (sqli
25e70 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74  te3_module *)pVt
25e80 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  ab->pModule;.  i
25e90 6e 74 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70  nt nArg = pOp->p
25ea0 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
25eb0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41  ->p4type==P4_VTA
25ec0 42 20 29 3b 0a 20 20 69 66 28 20 70 4d 6f 64 75  B );.  if( pModu
25ed0 6c 65 2d 3e 78 55 70 64 61 74 65 3d 3d 30 20 29  le->xUpdate==0 )
25ee0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
25ef0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
25f00 73 67 2c 20 64 62 2c 20 22 72 65 61 64 2d 6f 6e  sg, db, "read-on
25f10 6c 79 20 74 61 62 6c 65 22 29 3b 0a 20 20 20 20  ly table");.    
25f20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
25f30 52 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  R;.  }else{.    
25f40 69 6e 74 20 69 3b 0a 20 20 20 20 73 71 6c 69 74  int i;.    sqlit
25f50 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20  e_int64 rowid;. 
25f60 20 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 20 3d     Mem **apArg =
25f70 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 4d   p->apArg;.    M
25f80 65 6d 20 2a 70 58 20 3d 20 26 70 2d 3e 61 4d 65  em *pX = &p->aMe
25f90 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
25fa0 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
25fb0 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 74 6f   i++){.      sto
25fc0 72 65 54 79 70 65 49 6e 66 6f 28 70 58 2c 20 30  reTypeInfo(pX, 0
25fd0 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69  );.      apArg[i
25fe0 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58  ] = pX;.      pX
25ff0 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
26000 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
26010 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
26020 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
26030 65 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  e;.    sqlite3Vt
26040 61 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20  abLock(pVtab);. 
26050 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
26060 3e 78 55 70 64 61 74 65 28 70 56 74 61 62 2c 20  >xUpdate(pVtab, 
26070 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f  nArg, apArg, &ro
26080 77 69 64 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  wid);.    sqlite
26090 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
260a0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
260b0 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d  zErrMsg = pVtab-
260c0 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56  >zErrMsg;.    pV
260d0 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  tab->zErrMsg = 0
260e0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61  ;.    sqlite3Vta
260f0 62 55 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61  bUnlock(db, pVta
26100 62 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69  b);.    if( sqli
26110 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
26120 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
26130 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20  _to_misuse;.    
26140 69 66 28 20 70 4f 70 2d 3e 70 31 20 26 26 20 72  if( pOp->p1 && r
26150 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
26160 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41        assert( nA
26170 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d  rg>1 && apArg[0]
26180 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66   && (apArg[0]->f
26190 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29  lags&MEM_Null) )
261a0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74  ;.      db->last
261b0 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20  Rowid = rowid;. 
261c0 20 20 20 7d 0a 20 20 20 20 70 2d 3e 6e 43 68 61     }.    p->nCha
261d0 6e 67 65 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  nge++;.  }.  bre
261e0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
261f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
26200 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
26210 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49  ndef  SQLITE_OMI
26220 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
26230 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63  /* Opcode: Pagec
26240 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
26250 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
26260 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20   current number 
26270 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61  of pages in data
26280 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72  base P1 to memor
26290 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61  y cell P2..*/.ca
262a0 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a  se OP_Pagecount:
262b0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
262c0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
262d0 20 2a 2f 0a 20 20 69 6e 74 20 70 31 20 3d 20 70   */.  int p1 = p
262e0 4f 70 2d 3e 70 31 3b 20 0a 20 20 69 6e 74 20 6e  Op->p1; .  int n
262f0 50 61 67 65 3b 0a 20 20 50 61 67 65 72 20 2a 70  Page;.  Pager *p
26300 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
26310 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44  treePager(db->aD
26320 62 5b 70 31 5d 2e 70 42 74 29 3b 0a 0a 20 20 72  b[p1].pBt);..  r
26330 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  c = sqlite3Pager
26340 50 61 67 65 63 6f 75 6e 74 28 70 50 61 67 65 72  Pagecount(pPager
26350 2c 20 26 6e 50 61 67 65 29 3b 0a 20 20 69 66 28  , &nPage);.  if(
26360 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
26370 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
26380 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
26390 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 50 61   pOut->u.i = nPa
263a0 67 65 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ge;.  }.  break;
263b0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  .}.#endif..#ifnd
263c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
263d0 52 41 43 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  RACE./* Opcode: 
263e0 54 72 61 63 65 20 2a 20 2a 20 2a 20 50 34 20 2a  Trace * * * P4 *
263f0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e  .**.** If tracin
26400 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79  g is enabled (by
26410 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61   the sqlite3_tra
26420 63 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c  ce()) interface,
26430 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46   then.** the UTF
26440 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  -8 string contai
26450 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69  ned in P4 is emi
26460 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63  tted on the trac
26470 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63  e callback..*/.c
26480 61 73 65 20 4f 50 5f 54 72 61 63 65 3a 20 7b 0a  ase OP_Trace: {.
26490 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20    if( pOp->p4.z 
264a0 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78  ){.    if( db->x
264b0 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 64  Trace ){.      d
264c0 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54  b->xTrace(db->pT
264d0 72 61 63 65 41 72 67 2c 20 70 4f 70 2d 3e 70 34  raceArg, pOp->p4
264e0 2e 7a 29 3b 0a 20 20 20 20 7d 0a 23 69 66 64 65  .z);.    }.#ifde
264f0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
26500 20 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67     if( (db->flag
26510 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72  s & SQLITE_SqlTr
26520 61 63 65 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ace)!=0 ){.     
26530 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
26540 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20  ntf("SQL-trace: 
26550 25 73 5c 6e 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a  %s\n", pOp->p4.z
26560 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20  );.    }.#endif 
26570 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
26580 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  */.  }.  break;.
26590 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70  }.#endif.../* Op
265a0 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a  code: Noop * * *
265b0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f   * *.**.** Do no
265c0 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73  thing.  This ins
265d0 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65  truction is ofte
265e0 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75  n useful as a ju
265f0 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f  mp.** destinatio
26600 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20  n..*/./*.** The 
26610 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70  magic Explain op
26620 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e  code are only in
26630 73 65 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c  serted when expl
26640 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a  ain==2 (which.**
26650 20 69 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20   is to say when 
26660 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52  the EXPLAIN QUER
26670 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73  Y PLAN syntax is
26680 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20   used.).** This 
26690 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69  opcode records i
266a0 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
266b0 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20  the optimizer.  
266c0 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65  It is the.** the
266d0 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70   same as a no-op
266e0 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e  .  This opcodesn
266f0 65 76 65 72 20 61 70 70 65 61 72 73 20 69 6e 20  ever appears in 
26700 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61  a real VM progra
26710 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b  m..*/.default: {
26720 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69            /* Thi
26730 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e  s is really OP_N
26740 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61  oop and OP_Expla
26750 69 6e 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d  in */.  break;.}
26760 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
26770 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26780 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26790 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
267a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
267b0 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66  .** The cases of
267c0 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74   the switch stat
267d0 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73  ement above this
267e0 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c   line should all
267f0 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20   be indented.** 
26800 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75  by 6 spaces.  Bu
26810 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  t the left-most 
26820 36 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65  6 spaces have be
26830 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d  en removed to im
26840 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61  prove the.** rea
26850 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20  dability.  From 
26860 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f  this point on do
26870 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69  wn, the normal i
26880 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73  ndentation rules
26890 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64   are.** restored
268a0 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**************
268b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
268c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
268d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
268e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
268f0 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56  .    }..#ifdef V
26900 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
26910 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6c 61 70  {.      u64 elap
26920 73 65 64 20 3d 20 73 71 6c 69 74 65 33 48 77 74  sed = sqlite3Hwt
26930 69 6d 65 28 29 20 2d 20 73 74 61 72 74 3b 0a 20  ime() - start;. 
26940 20 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73       pOp->cycles
26950 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20 20 20   += elapsed;.   
26960 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23     pOp->cnt++;.#
26970 69 66 20 30 0a 20 20 20 20 20 20 20 20 66 70 72  if 0.        fpr
26980 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 25 31  intf(stdout, "%1
26990 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65 64 29  0llu ", elapsed)
269a0 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
269b0 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
269c0 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20 26 70 2d  out, origPc, &p-
269d0 3e 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23  >aOp[origPc]);.#
269e0 65 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64  endif.    }.#end
269f0 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66  if..    /* The f
26a00 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64  ollowing code ad
26a10 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68  ds nothing to th
26a20 65 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f  e actual functio
26a30 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66  nality.    ** of
26a40 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49   the program.  I
26a50 74 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66  t is only here f
26a60 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64  or testing and d
26a70 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a  ebugging..    **
26a80 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61   On the other ha
26a90 6e 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e  nd, it does burn
26aa0 20 43 50 55 20 63 79 63 6c 65 73 20 65 76 65 72   CPU cycles ever
26ab0 79 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20  y time through. 
26ac0 20 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61     ** the evalua
26ad0 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65  tor loop.  So we
26ae0 20 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75   can leave it ou
26af0 74 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73  t when NDEBUG is
26b00 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f   defined..    */
26b10 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
26b20 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d      assert( pc>=
26b30 2d 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20  -1 && pc<p->nOp 
26b40 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
26b50 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
26b60 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20  p->trace ){.    
26b70 20 20 69 66 28 20 72 63 21 3d 30 20 29 20 66 70    if( rc!=0 ) fp
26b80 72 69 6e 74 66 28 70 2d 3e 74 72 61 63 65 2c 22  rintf(p->trace,"
26b90 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20  rc=%d\n",rc);.  
26ba0 20 20 20 20 69 66 28 20 6f 70 50 72 6f 70 65 72      if( opProper
26bb0 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f  ty & OPFLG_OUT2_
26bc0 50 52 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  PRERELEASE ){.  
26bd0 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72        registerTr
26be0 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f  ace(p->trace, pO
26bf0 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
26c00 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
26c10 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
26c20 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20  LG_OUT3 ){.     
26c30 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65     registerTrace
26c40 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e  (p->trace, pOp->
26c50 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p3, pOut);.     
26c60 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20   }.    }.#endif 
26c70 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
26c80 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e   */.#endif  /* N
26c90 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a  DEBUG */.  }  /*
26ca0 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   The end of the 
26cb0 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65  for(;;) loop the
26cc0 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f   loops through o
26cd0 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20  pcodes */..  /* 
26ce0 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73  If we reach this
26cf0 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73   point, it means
26d00 20 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20   that execution 
26d10 69 73 20 66 69 6e 69 73 68 65 64 20 77 69 74 68  is finished with
26d20 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f  .  ** an error o
26d30 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a  f some kind..  *
26d40 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  /.vdbe_error_hal
26d50 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63 20  t:.  assert( rc 
26d60 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b  );.  p->rc = rc;
26d70 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  .  sqlite3VdbeHa
26d80 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d  lt(p);.  if( rc=
26d90 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f  =SQLITE_IOERR_NO
26da0 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63  MEM ) db->malloc
26db0 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63  Failed = 1;.  rc
26dc0 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
26dd0 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74  ..  /* This is t
26de0 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20  he only way out 
26df0 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72  of this procedur
26e00 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20  e.  We have to. 
26e10 20 2a 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20   ** release the 
26e20 6d 75 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65  mutexes on btree
26e30 73 20 74 68 61 74 20 77 65 72 65 20 61 63 71 75  s that were acqu
26e40 69 72 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a  ired at the.  **
26e50 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65   top. */.vdbe_re
26e60 74 75 72 6e 3a 0a 20 20 73 71 6c 69 74 65 33 42  turn:.  sqlite3B
26e70 74 72 65 65 4d 75 74 65 78 41 72 72 61 79 4c 65  treeMutexArrayLe
26e80 61 76 65 28 26 70 2d 3e 61 4d 75 74 65 78 29 3b  ave(&p->aMutex);
26e90 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20  .  return rc;.. 
26ea0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
26eb0 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20   if a string or 
26ec0 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e  blob larger than
26ed0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
26ee0 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75  TH.  ** is encou
26ef0 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f  ntered..  */.too
26f00 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 53  _big:.  sqlite3S
26f10 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
26f20 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72 69 6e  rMsg, db, "strin
26f30 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69  g or blob too bi
26f40 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  g");.  rc = SQLI
26f50 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74  TE_TOOBIG;.  got
26f60 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
26f70 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
26f80 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f   here if a mallo
26f90 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a  c() fails..  */.
26fa0 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61  no_mem:.  db->ma
26fb0 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
26fc0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
26fd0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
26fe0 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f  db, "out of memo
26ff0 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ry");.  rc = SQL
27000 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74  ITE_NOMEM;.  got
27010 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
27020 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
27030 20 68 65 72 65 20 66 6f 72 20 61 6e 20 53 51 4c   here for an SQL
27040 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72  ITE_MISUSE error
27050 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
27060 5f 74 6f 5f 6d 69 73 75 73 65 3a 0a 20 20 72 63  _to_misuse:.  rc
27070 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45   = SQLITE_MISUSE
27080 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 75  ;.  /* Fall thru
27090 20 69 6e 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   into abort_due_
270a0 74 6f 5f 65 72 72 6f 72 20 2a 2f 0a 0a 20 20 2f  to_error */..  /
270b0 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66  * Jump to here f
270c0 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e  or any other kin
270d0 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72  d of fatal error
270e0 2e 20 20 54 68 65 20 22 72 63 22 20 76 61 72 69  .  The "rc" vari
270f0 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64  able.  ** should
27100 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20   hold the error 
27110 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f  number..  */.abo
27120 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a  rt_due_to_error:
27130 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 45  .  assert( p->zE
27140 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66  rrMsg==0 );.  if
27150 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
27160 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45  ed ) rc = SQLITE
27170 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63  _NOMEM;.  if( rc
27180 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  !=SQLITE_IOERR_N
27190 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69  OMEM ){.    sqli
271a0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
271b0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
271c0 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  s", sqlite3ErrSt
271d0 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f  r(rc));.  }.  go
271e0 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
271f0 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
27200 6f 20 68 65 72 65 20 69 66 20 74 68 65 20 73 71  o here if the sq
27210 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
27220 29 20 41 50 49 20 73 65 74 73 20 74 68 65 20 69  ) API sets the i
27230 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c  nterrupt.  ** fl
27240 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64  ag..  */.abort_d
27250 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a  ue_to_interrupt:
27260 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75  .  assert( db->u
27270 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
27280 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
27290 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d  _INTERRUPT;.  p-
272a0 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69  >rc = rc;.  sqli
272b0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
272c0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
272d0 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  s", sqlite3ErrSt
272e0 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76  r(rc));.  goto v
272f0 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
27300 7d 0a                                            }.