/ Hex Artifact Content
Login

Artifact 90296a45d28939fd631c05c235dab7e123f94f57:


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 30 20 32 30 30 38  e.c,v 1.770 2008
0850: 2f 30 38 2f 30 31 20 31 37 3a 33 37 3a 34 31 20  /08/01 17:37:41 
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 52 65 6c 65 61 73 65 20 74 68  /*.** Release th
1090: 65 20 6d 65 6d 6f 72 79 20 61 73 73 6f 63 69 61  e memory associa
10a0: 74 65 64 20 77 69 74 68 20 61 20 72 65 67 69 73  ted with a regis
10b0: 74 65 72 2e 20 20 54 68 69 73 0a 2a 2a 20 6c 65  ter.  This.** le
10c0: 61 76 65 73 20 74 68 65 20 4d 65 6d 2e 66 6c 61  aves the Mem.fla
10d0: 67 73 20 66 69 65 6c 64 20 69 6e 20 61 6e 20 69  gs field in an i
10e0: 6e 63 6f 6e 73 69 73 74 65 6e 74 20 73 74 61 74  nconsistent stat
10f0: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 65  e..*/.#define Re
1100: 6c 65 61 73 65 28 50 29 20 69 66 28 28 50 29 2d  lease(P) if((P)-
1110: 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 7b  >flags&MEM_Dyn){
1120: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
1130: 65 6c 65 61 73 65 28 50 29 3b 20 7d 0a 0a 2f 2a  elease(P); }../*
1140: 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65 20  .** Convert the 
1150: 67 69 76 65 6e 20 72 65 67 69 73 74 65 72 20 69  given register i
1160: 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66 20  nto a string if 
1170: 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a 20  it isn't one.** 
1180: 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e 20  already. Return 
1190: 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d 61  non-zero if a ma
11a0: 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a 2f  lloc() fails..*/
11b0: 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67 69  .#define Stringi
11c0: 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20 20  fy(P, enc) \.   
11d0: 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 28  if(((P)->flags&(
11e0: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
11f0: 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65 33  ))==0 && sqlite3
1200: 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79  VdbeMemStringify
1210: 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20 20  (P,enc)) \.     
1220: 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20 7d  { goto no_mem; }
1230: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65 6d  ../*.** An ephem
1240: 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c 75  eral string valu
1250: 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79 20  e (signified by 
1260: 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66 6c  the MEM_Ephem fl
1270: 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20  ag) contains.** 
1280: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 64  a pointer to a d
1290: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
12a0: 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65 72  ated string wher
12b0: 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e 74  e some other ent
12c0: 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f 6e  ity.** is respon
12d0: 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c 6f  sible for deallo
12e0: 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72 69  cating that stri
12f0: 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68 65  ng.  Because the
1300: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f 65   register.** doe
1310: 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74 68  s not control th
1320: 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69 67  e string, it mig
1330: 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77 69  ht be deleted wi
1340: 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73 74  thout the regist
1350: 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69 74  er.** knowing it
1360: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
1370: 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61 6e  tine converts an
1380: 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e   ephemeral strin
1390: 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69 63  g into a dynamic
13a0: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a 2a  ally allocated.*
13b0: 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74 68  * string that th
13c0: 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65 6c  e register itsel
13d0: 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e 20  f controls.  In 
13e0: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74 0a  other words, it.
13f0: 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 4d  ** converts an M
1400: 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67 20  EM_Ephem string 
1410: 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e 20  into an MEM_Dyn 
1420: 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69  string..*/.#defi
1430: 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a  ne Deephemeraliz
1440: 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28 28  e(P) \.   if( ((
1450: 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45 70  P)->flags&MEM_Ep
1460: 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20 20  hem)!=0 \.      
1470: 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65 4d   && sqlite3VdbeM
1480: 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28  emMakeWriteable(
1490: 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65  P) ){ goto no_me
14a0: 6d 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c 6c 20  m;}../*.** Call 
14b0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78  sqlite3VdbeMemEx
14c0: 70 61 6e 64 42 6c 6f 62 28 29 20 6f 6e 20 74 68  pandBlob() on th
14d0: 65 20 73 75 70 70 6c 69 65 64 20 76 61 6c 75 65  e supplied value
14e0: 20 28 74 79 70 65 20 4d 65 6d 2a 29 0a 2a 2a 20   (type Mem*).** 
14f0: 50 20 69 66 20 72 65 71 75 69 72 65 64 2e 0a 2a  P if required..*
1500: 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 61 6e 64  /.#define Expand
1510: 42 6c 6f 62 28 50 29 20 28 28 28 50 29 2d 3e 66  Blob(P) (((P)->f
1520: 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 29 3f 73  lags&MEM_Zero)?s
1530: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
1540: 61 6e 64 42 6c 6f 62 28 50 29 3a 30 29 0a 0a 2f  andBlob(P):0)../
1550: 2a 0a 2a 2a 20 41 72 67 75 6d 65 6e 74 20 70 4d  *.** Argument pM
1560: 65 6d 20 70 6f 69 6e 74 73 20 61 74 20 61 20 72  em points at a r
1570: 65 67 69 73 74 65 72 20 74 68 61 74 20 77 69 6c  egister that wil
1580: 6c 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 61  l be passed to a
1590: 0a 2a 2a 20 75 73 65 72 2d 64 65 66 69 6e 65 64  .** user-defined
15a0: 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 72 65 74   function or ret
15b0: 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65  urned to the use
15c0: 72 20 61 73 20 74 68 65 20 72 65 73 75 6c 74 20  r as the result 
15d0: 6f 66 20 61 20 71 75 65 72 79 2e 0a 2a 2a 20 54  of a query..** T
15e0: 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65  he second argume
15f0: 6e 74 2c 20 27 64 62 5f 65 6e 63 27 20 69 73 20  nt, 'db_enc' is 
1600: 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  the text encodin
1610: 67 20 75 73 65 64 20 62 79 20 74 68 65 20 76 64  g used by the vd
1620: 62 65 20 66 6f 72 0a 2a 2a 20 72 65 67 69 73 74  be for.** regist
1630: 65 72 20 76 61 72 69 61 62 6c 65 73 2e 20 20 54  er variables.  T
1640: 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73  his routine sets
1650: 20 74 68 65 20 70 4d 65 6d 2d 3e 65 6e 63 20 61   the pMem->enc a
1660: 6e 64 20 70 4d 65 6d 2d 3e 74 79 70 65 0a 2a 2a  nd pMem->type.**
1670: 20 76 61 72 69 61 62 6c 65 73 20 75 73 65 64 20   variables used 
1680: 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  by the sqlite3_v
1690: 61 6c 75 65 5f 2a 28 29 20 72 6f 75 74 69 6e 65  alue_*() routine
16a0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 74  s..*/.#define st
16b0: 6f 72 65 54 79 70 65 49 6e 66 6f 28 41 2c 42 29  oreTypeInfo(A,B)
16c0: 20 5f 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28   _storeTypeInfo(
16d0: 41 29 0a 73 74 61 74 69 63 20 76 6f 69 64 20 5f  A).static void _
16e0: 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 4d 65  storeTypeInfo(Me
16f0: 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74 20  m *pMem){.  int 
1700: 66 6c 61 67 73 20 3d 20 70 4d 65 6d 2d 3e 66 6c  flags = pMem->fl
1710: 61 67 73 3b 0a 20 20 69 66 28 20 66 6c 61 67 73  ags;.  if( flags
1720: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
1730: 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20     pMem->type = 
1740: 53 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a 20 20 7d  SQLITE_NULL;.  }
1750: 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67  .  else if( flag
1760: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20  s & MEM_Int ){. 
1770: 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20     pMem->type = 
1780: 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3b 0a  SQLITE_INTEGER;.
1790: 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66    }.  else if( f
17a0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
17b0: 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70  ){.    pMem->typ
17c0: 65 20 3d 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54  e = SQLITE_FLOAT
17d0: 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28  ;.  }.  else if(
17e0: 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72   flags & MEM_Str
17f0: 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79   ){.    pMem->ty
1800: 70 65 20 3d 20 53 51 4c 49 54 45 5f 54 45 58 54  pe = SQLITE_TEXT
1810: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
1820: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
1830: 54 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a 0a  TE_BLOB;.  }.}..
1840: 2f 2a 0a 2a 2a 20 50 72 6f 70 65 72 74 69 65 73  /*.** Properties
1850: 20 6f 66 20 6f 70 63 6f 64 65 73 2e 20 20 54 68   of opcodes.  Th
1860: 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49  e OPFLG_INITIALI
1870: 5a 45 52 20 6d 61 63 72 6f 20 69 73 0a 2a 2a 20  ZER macro is.** 
1880: 63 72 65 61 74 65 64 20 62 79 20 6d 6b 6f 70 63  created by mkopc
1890: 6f 64 65 68 2e 61 77 6b 20 64 75 72 69 6e 67 20  odeh.awk during 
18a0: 63 6f 6d 70 69 6c 61 74 69 6f 6e 2e 20 20 44 61  compilation.  Da
18b0: 74 61 20 69 73 20 6f 62 74 61 69 6e 65 64 0a 2a  ta is obtained.*
18c0: 2a 20 66 72 6f 6d 20 74 68 65 20 63 6f 6d 6d 65  * from the comme
18d0: 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  nts following th
18e0: 65 20 22 63 61 73 65 20 4f 50 5f 78 78 78 78 3a  e "case OP_xxxx:
18f0: 22 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 0a  " statements in.
1900: 2a 2a 20 74 68 69 73 20 66 69 6c 65 2e 20 20 0a  ** this file.  .
1910: 2a 2f 0a 73 74 61 74 69 63 20 75 6e 73 69 67 6e  */.static unsign
1920: 65 64 20 63 68 61 72 20 6f 70 63 6f 64 65 50 72  ed char opcodePr
1930: 6f 70 65 72 74 79 5b 5d 20 3d 20 4f 50 46 4c 47  operty[] = OPFLG
1940: 5f 49 4e 49 54 49 41 4c 49 5a 45 52 3b 0a 0a 2f  _INITIALIZER;../
1950: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
1960: 20 69 66 20 61 6e 20 6f 70 63 6f 64 65 20 68 61   if an opcode ha
1970: 73 20 61 6e 79 20 6f 66 20 74 68 65 20 4f 50 46  s any of the OPF
1980: 4c 47 5f 78 78 78 20 70 72 6f 70 65 72 74 69 65  LG_xxx propertie
1990: 73 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20 62  s.** specified b
19a0: 79 20 6d 61 73 6b 2e 0a 2a 2f 0a 69 6e 74 20 73  y mask..*/.int s
19b0: 71 6c 69 74 65 33 56 64 62 65 4f 70 63 6f 64 65  qlite3VdbeOpcode
19c0: 48 61 73 50 72 6f 70 65 72 74 79 28 69 6e 74 20  HasProperty(int 
19d0: 6f 70 63 6f 64 65 2c 20 69 6e 74 20 6d 61 73 6b  opcode, int mask
19e0: 29 7b 0a 20 20 61 73 73 65 72 74 28 20 6f 70 63  ){.  assert( opc
19f0: 6f 64 65 3e 30 20 26 26 20 6f 70 63 6f 64 65 3c  ode>0 && opcode<
1a00: 73 69 7a 65 6f 66 28 6f 70 63 6f 64 65 50 72 6f  sizeof(opcodePro
1a10: 70 65 72 74 79 29 20 29 3b 0a 20 20 72 65 74 75  perty) );.  retu
1a20: 72 6e 20 28 6f 70 63 6f 64 65 50 72 6f 70 65 72  rn (opcodeProper
1a30: 74 79 5b 6f 70 63 6f 64 65 5d 26 6d 61 73 6b 29  ty[opcode]&mask)
1a40: 21 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c  !=0;.}../*.** Al
1a50: 6c 6f 63 61 74 65 20 63 75 72 73 6f 72 20 6e 75  locate cursor nu
1a60: 6d 62 65 72 20 69 43 75 72 2e 20 20 52 65 74 75  mber iCur.  Retu
1a70: 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  rn a pointer to 
1a80: 69 74 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c  it.  Return NULL
1a90: 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e 20 6f 75  .** if we run ou
1aa0: 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a  t of memory..*/.
1ab0: 73 74 61 74 69 63 20 43 75 72 73 6f 72 20 2a 61  static Cursor *a
1ac0: 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 0a 20  llocateCursor(. 
1ad0: 20 56 64 62 65 20 2a 70 2c 20 0a 20 20 69 6e 74   Vdbe *p, .  int
1ae0: 20 69 43 75 72 2c 20 0a 20 20 4f 70 20 2a 70 4f   iCur, .  Op *pO
1af0: 70 2c 0a 20 20 69 6e 74 20 69 44 62 2c 20 0a 20  p,.  int iDb, . 
1b00: 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72 73   int isBtreeCurs
1b10: 6f 72 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20  or.){.  /* Find 
1b20: 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
1b30: 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65  that will be use
1b40: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
1b50: 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20  lob of memory.  
1b60: 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ** required for 
1b70: 74 68 69 73 20 43 75 72 73 6f 72 20 73 74 72 75  this Cursor stru
1b80: 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e  cture. It is con
1b90: 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61  venient to use a
1ba0: 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f   .  ** vdbe memo
1bb0: 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67  ry cell to manag
1bc0: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  e the memory all
1bd0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64  ocation required
1be0: 20 66 6f 72 20 61 0a 20 20 2a 2a 20 43 75 72 73   for a.  ** Curs
1bf0: 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  or structure for
1c00: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   the following r
1c10: 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a 20 20 2a  easons:.  **.  *
1c20: 2a 20 20 20 2a 20 53 6f 6d 65 74 69 6d 65 73 20  *   * Sometimes 
1c30: 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 73 20 61  cursor numbers a
1c40: 72 65 20 75 73 65 64 20 66 6f 72 20 61 20 63 6f  re used for a co
1c50: 75 70 6c 65 20 6f 66 20 64 69 66 66 65 72 65 6e  uple of differen
1c60: 74 0a 20 20 2a 2a 20 20 20 20 20 70 75 72 70 6f  t.  **     purpo
1c70: 73 65 73 20 69 6e 20 61 20 76 64 62 65 20 70 72  ses in a vdbe pr
1c80: 6f 67 72 61 6d 2e 20 54 68 65 20 64 69 66 66 65  ogram. The diffe
1c90: 72 65 6e 74 20 75 73 65 73 20 6d 69 67 68 74 20  rent uses might 
1ca0: 72 65 71 75 69 72 65 0a 20 20 2a 2a 20 20 20 20  require.  **    
1cb0: 20 64 69 66 66 65 72 65 6e 74 20 73 69 7a 65 64   different sized
1cc0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 20 4d 65   allocations. Me
1cd0: 6d 6f 72 79 20 63 65 6c 6c 73 20 70 72 6f 76 69  mory cells provi
1ce0: 64 65 20 67 72 6f 77 61 62 6c 65 0a 20 20 2a 2a  de growable.  **
1cf0: 20 20 20 20 20 61 6c 6c 6f 63 61 74 69 6f 6e 73       allocations
1d00: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20  ..  **.  **   * 
1d10: 57 68 65 6e 20 75 73 69 6e 67 20 45 4e 41 42 4c  When using ENABL
1d20: 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d  E_MEMORY_MANAGEM
1d30: 45 4e 54 2c 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  ENT, memory cell
1d40: 20 62 75 66 66 65 72 73 20 63 61 6e 0a 20 20 2a   buffers can.  *
1d50: 2a 20 20 20 20 20 62 65 20 66 72 65 65 64 20 6c  *     be freed l
1d60: 61 7a 69 6c 79 20 76 69 61 20 74 68 65 20 73 71  azily via the sq
1d70: 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65  lite3_release_me
1d80: 6d 6f 72 79 28 29 20 41 50 49 2e 20 54 68 69 73  mory() API. This
1d90: 0a 20 20 2a 2a 20 20 20 20 20 6d 69 6e 69 6d 69  .  **     minimi
1da0: 7a 65 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  zes the number o
1db0: 66 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c 73 20 6d  f malloc calls m
1dc0: 61 64 65 20 62 79 20 74 68 65 20 73 79 73 74 65  ade by the syste
1dd0: 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4d 65 6d  m..  **.  ** Mem
1de0: 6f 72 79 20 63 65 6c 6c 73 20 66 6f 72 20 63 75  ory cells for cu
1df0: 72 73 6f 72 73 20 61 72 65 20 61 6c 6c 6f 63 61  rsors are alloca
1e00: 74 65 64 20 61 74 20 74 68 65 20 74 6f 70 20 6f  ted at the top o
1e10: 66 20 74 68 65 20 61 64 64 72 65 73 73 0a 20 20  f the address.  
1e20: 2a 2a 20 73 70 61 63 65 2e 20 4d 65 6d 6f 72 79  ** space. Memory
1e30: 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 29 20   cell (p->nMem) 
1e40: 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 63  corresponds to c
1e50: 75 72 73 6f 72 20 30 2e 20 53 70 61 63 65 20 66  ursor 0. Space f
1e60: 6f 72 0a 20 20 2a 2a 20 63 75 72 73 6f 72 20 31  or.  ** cursor 1
1e70: 20 69 73 20 6d 61 6e 61 67 65 64 20 62 79 20 6d   is managed by m
1e80: 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e  emory cell (p->n
1e90: 4d 65 6d 2d 31 29 2c 20 65 74 63 2e 0a 20 20 2a  Mem-1), etc..  *
1ea0: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
1eb0: 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  &p->aMem[p->nMem
1ec0: 2d 69 43 75 72 5d 3b 0a 0a 20 20 69 6e 74 20 6e  -iCur];..  int n
1ed0: 42 79 74 65 3b 0a 20 20 43 75 72 73 6f 72 20 2a  Byte;.  Cursor *
1ee0: 70 43 78 20 3d 20 30 3b 0a 20 20 2f 2a 20 49 66  pCx = 0;.  /* If
1ef0: 20 74 68 65 20 6f 70 63 6f 64 65 20 6f 66 20 70   the opcode of p
1f00: 4f 70 20 69 73 20 4f 50 5f 53 65 74 4e 75 6d 43  Op is OP_SetNumC
1f10: 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e 20 70 4f 70  olumns, then pOp
1f20: 2d 3e 70 32 20 63 6f 6e 74 61 69 6e 73 0a 20 20  ->p2 contains.  
1f30: 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
1f40: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
1f50: 65 63 6f 72 64 73 20 63 6f 6e 74 61 69 6e 65 64  ecords contained
1f60: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
1f70: 0a 20 20 2a 2a 20 69 6e 64 65 78 20 62 65 69 6e  .  ** index bein
1f80: 67 20 6f 70 65 6e 65 64 2e 20 55 73 65 20 74 68  g opened. Use th
1f90: 69 73 20 74 6f 20 72 65 73 65 72 76 65 20 73 70  is to reserve sp
1fa0: 61 63 65 20 66 6f 72 20 74 68 65 20 0a 20 20 2a  ace for the .  *
1fb0: 2a 20 43 75 72 73 6f 72 2e 61 54 79 70 65 5b 5d  * Cursor.aType[]
1fc0: 20 61 72 72 61 79 2e 0a 20 20 2a 2f 0a 20 20 69   array..  */.  i
1fd0: 6e 74 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20  nt nField = 0;. 
1fe0: 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
1ff0: 3d 3d 4f 50 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d  ==OP_SetNumColum
2000: 6e 73 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  ns || pOp->opcod
2010: 65 3d 3d 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  e==OP_OpenEpheme
2020: 72 61 6c 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c  ral ){.    nFiel
2030: 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d  d = pOp->p2;.  }
2040: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
2050: 20 20 73 69 7a 65 6f 66 28 43 75 72 73 6f 72 29    sizeof(Cursor)
2060: 20 2b 20 0a 20 20 20 20 20 20 28 69 73 42 74 72   + .      (isBtr
2070: 65 65 43 75 72 73 6f 72 3f 73 71 6c 69 74 65 33  eeCursor?sqlite3
2080: 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65 28  BtreeCursorSize(
2090: 29 3a 30 29 20 2b 20 0a 20 20 20 20 20 20 32 2a  ):0) + .      2*
20a0: 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33  nField*sizeof(u3
20b0: 32 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69  2);..  assert( i
20c0: 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  Cur<p->nCursor )
20d0: 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72  ;.  if( p->apCsr
20e0: 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20 20 73 71  [iCur] ){.    sq
20f0: 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72  lite3VdbeFreeCur
2100: 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b  sor(p, p->apCsr[
2110: 69 43 75 72 5d 29 3b 0a 20 20 20 20 70 2d 3e 61  iCur]);.    p->a
2120: 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 30 3b 0a  pCsr[iCur] = 0;.
2130: 20 20 7d 0a 20 20 69 66 28 20 53 51 4c 49 54 45    }.  if( SQLITE
2140: 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56 64 62 65  _OK==sqlite3Vdbe
2150: 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e 42  MemGrow(pMem, nB
2160: 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 70  yte, 0) ){.    p
2170: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
2180: 70 43 78 20 3d 20 28 43 75 72 73 6f 72 20 2a 29  pCx = (Cursor *)
2190: 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d  pMem->z;.    mem
21a0: 73 65 74 28 70 4d 65 6d 2d 3e 7a 2c 20 30 2c 20  set(pMem->z, 0, 
21b0: 6e 42 79 74 65 29 3b 0a 20 20 20 20 70 43 78 2d  nByte);.    pCx-
21c0: 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20  >iDb = iDb;.    
21d0: 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46  pCx->nField = nF
21e0: 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 6e 46  ield;.    if( nF
21f0: 69 65 6c 64 20 29 7b 0a 20 20 20 20 20 20 70 43  ield ){.      pC
2200: 78 2d 3e 61 54 79 70 65 20 3d 20 28 75 33 32 20  x->aType = (u32 
2210: 2a 29 26 70 4d 65 6d 2d 3e 7a 5b 73 69 7a 65 6f  *)&pMem->z[sizeo
2220: 66 28 43 75 72 73 6f 72 29 5d 3b 0a 20 20 20 20  f(Cursor)];.    
2230: 7d 0a 20 20 20 20 69 66 28 20 69 73 42 74 72 65  }.    if( isBtre
2240: 65 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 20  eCursor ){.     
2250: 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 20 3d 20   pCx->pCursor = 
2260: 28 42 74 43 75 72 73 6f 72 20 2a 29 26 70 4d 65  (BtCursor *)&pMe
2270: 6d 2d 3e 7a 5b 73 69 7a 65 6f 66 28 43 75 72 73  m->z[sizeof(Curs
2280: 6f 72 29 2b 32 2a 6e 46 69 65 6c 64 2a 73 69 7a  or)+2*nField*siz
2290: 65 6f 66 28 75 33 32 29 5d 3b 0a 20 20 20 20 7d  eof(u32)];.    }
22a0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43  .  }.  return pC
22b0: 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20  x;.}../*.** Try 
22c0: 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c  to convert a val
22d0: 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69  ue into a numeri
22e0: 63 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  c representation
22f0: 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f   if we can.** do
2300: 20 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73   so without loss
2310: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e   of information.
2320: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
2330: 2c 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a  , if the string.
2340: 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20  ** looks like a 
2350: 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20  number, convert 
2360: 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72  it into a number
2370: 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f  .  If it does no
2380: 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61  t.** look like a
2390: 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69   number, leave i
23a0: 74 20 61 6c 6f 6e 65 2e 0a 2a 2f 0a 73 74 61 74  t alone..*/.stat
23b0: 69 63 20 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d  ic void applyNum
23c0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 4d 65 6d  ericAffinity(Mem
23d0: 20 2a 70 52 65 63 29 7b 0a 20 20 69 66 28 20 28   *pRec){.  if( (
23e0: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pRec->flags & (M
23f0: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29  EM_Real|MEM_Int)
2400: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20  )==0 ){.    int 
2410: 72 65 61 6c 6e 75 6d 3b 0a 20 20 20 20 73 71 6c  realnum;.    sql
2420: 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65  ite3VdbeMemNulTe
2430: 72 6d 69 6e 61 74 65 28 70 52 65 63 29 3b 0a 20  rminate(pRec);. 
2440: 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c     if( (pRec->fl
2450: 61 67 73 26 4d 45 4d 5f 53 74 72 29 0a 20 20 20  ags&MEM_Str).   
2460: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
2470: 49 73 4e 75 6d 62 65 72 28 70 52 65 63 2d 3e 7a  IsNumber(pRec->z
2480: 2c 20 26 72 65 61 6c 6e 75 6d 2c 20 70 52 65 63  , &realnum, pRec
2490: 2d 3e 65 6e 63 29 20 29 7b 0a 20 20 20 20 20 20  ->enc) ){.      
24a0: 69 36 34 20 76 61 6c 75 65 3b 0a 20 20 20 20 20  i64 value;.     
24b0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
24c0: 67 65 45 6e 63 6f 64 69 6e 67 28 70 52 65 63 2c  geEncoding(pRec,
24d0: 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20   SQLITE_UTF8);. 
24e0: 20 20 20 20 20 69 66 28 20 21 72 65 61 6c 6e 75       if( !realnu
24f0: 6d 20 26 26 20 73 71 6c 69 74 65 33 41 74 6f 69  m && sqlite3Atoi
2500: 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 76 61 6c  64(pRec->z, &val
2510: 75 65 29 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ue) ){.        p
2520: 52 65 63 2d 3e 75 2e 69 20 3d 20 76 61 6c 75 65  Rec->u.i = value
2530: 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74  ;.        MemSet
2540: 54 79 70 65 46 6c 61 67 28 70 52 65 63 2c 20 4d  TypeFlag(pRec, M
2550: 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 20 20 7d  EM_Int);.      }
2560: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
2570: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c  lite3VdbeMemReal
2580: 69 66 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20  ify(pRec);.     
2590: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a   }.    }.  }.}..
25a0: 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67  /*.** Processing
25b0: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79   is determine by
25c0: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 61   the affinity pa
25d0: 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53  rameter:.**.** S
25e0: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
25f0: 52 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  R:.** SQLITE_AFF
2600: 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45  _REAL:.** SQLITE
2610: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a  _AFF_NUMERIC:.**
2620: 20 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65      Try to conve
2630: 72 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e  rt pRec to an in
2640: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2650: 74 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20  tion or a .**   
2660: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20   floating-point 
2670: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2680: 66 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70  f an integer rep
2690: 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20  resentation.**  
26a0: 20 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c    is not possibl
26b0: 65 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  e.  Note that th
26c0: 65 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  e integer repres
26d0: 65 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20  entation is.**  
26e0: 20 20 61 6c 77 61 79 73 20 70 72 65 66 65 72 72    always preferr
26f0: 65 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20  ed, even if the 
2700: 61 66 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c  affinity is REAL
2710: 2c 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20  , because.**    
2720: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2730: 73 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72  sentation is mor
2740: 65 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e  e space efficien
2750: 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a  t on disk..**.**
2760: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
2770: 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20  :.**    Convert 
2780: 70 52 65 63 20 74 6f 20 61 20 74 65 78 74 20 72  pRec to a text r
2790: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a  epresentation..*
27a0: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  *.** SQLITE_AFF_
27b0: 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f  NONE:.**    No-o
27c0: 70 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63 68  p.  pRec is unch
27d0: 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  anged..*/.static
27e0: 20 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e   void applyAffin
27f0: 69 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63  ity(.  Mem *pRec
2800: 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ,          /* Th
2810: 65 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79  e value to apply
2820: 20 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a   affinity to */.
2830: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c    char affinity,
2840: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
2850: 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c  inity to be appl
2860: 69 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20  ied */.  u8 enc 
2870: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2880: 55 73 65 20 74 68 69 73 20 74 65 78 74 20 65 6e  Use this text en
2890: 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69  coding */.){.  i
28a0: 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  f( affinity==SQL
28b0: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a  ITE_AFF_TEXT ){.
28c0: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65      /* Only atte
28d0: 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69  mpt the conversi
28e0: 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74 68  on to TEXT if th
28f0: 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ere is an intege
2900: 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a  r or real.    **
2910: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2920: 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64  (blob and NULL d
2930: 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72  o not get conver
2940: 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69  ted) but no stri
2950: 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73  ng.    ** repres
2960: 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f  entation..    */
2970: 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65  .    if( 0==(pRe
2980: 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72  c->flags&MEM_Str
2990: 29 20 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67  ) && (pRec->flag
29a0: 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  s&(MEM_Real|MEM_
29b0: 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73  Int)) ){.      s
29c0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
29d0: 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63  ingify(pRec, enc
29e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 52 65  );.    }.    pRe
29f0: 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45  c->flags &= ~(ME
2a00: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b  M_Real|MEM_Int);
2a10: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66  .  }else if( aff
2a20: 69 6e 69 74 79 21 3d 53 51 4c 49 54 45 5f 41 46  inity!=SQLITE_AF
2a30: 46 5f 4e 4f 4e 45 20 29 7b 0a 20 20 20 20 61 73  F_NONE ){.    as
2a40: 73 65 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d  sert( affinity==
2a50: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
2a60: 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d  ER || affinity==
2a70: 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a  SQLITE_AFF_REAL.
2a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20               || 
2a90: 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45  affinity==SQLITE
2aa0: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a  _AFF_NUMERIC );.
2ab0: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2ac0: 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a  Affinity(pRec);.
2ad0: 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
2ae0: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
2af0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
2b00: 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69  dbeIntegerAffini
2b10: 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a  ty(pRec);.    }.
2b20: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79    }.}../*.** Try
2b30: 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20   to convert the 
2b40: 74 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69  type of a functi
2b50: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61  on argument or a
2b60: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a   result column.*
2b70: 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  * into a numeric
2b80: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2b90: 20 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54    Use either INT
2ba0: 45 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69  EGER or REAL whi
2bb0: 63 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70  chever.** is app
2bc0: 72 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f  ropriate.  But o
2bd0: 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65  nly do the conve
2be0: 72 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70  rsion if it is p
2bf0: 6f 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a  ossible without.
2c00: 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
2c10: 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72  mation and retur
2c20: 6e 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79  n the revised ty
2c30: 70 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65  pe of the argume
2c40: 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  nt..**.** This i
2c50: 73 20 61 6e 20 45 58 50 45 52 49 4d 45 4e 54 41  s an EXPERIMENTA
2c60: 4c 20 61 70 69 20 61 6e 64 20 69 73 20 73 75 62  L api and is sub
2c70: 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65 20 6f  ject to change o
2c80: 72 20 72 65 6d 6f 76 61 6c 2e 0a 2a 2f 0a 69 6e  r removal..*/.in
2c90: 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  t sqlite3_value_
2ca0: 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71 6c  numeric_type(sql
2cb0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
2cc0: 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d  ){.  Mem *pMem =
2cd0: 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 61   (Mem*)pVal;.  a
2ce0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
2cf0: 69 74 79 28 70 4d 65 6d 29 3b 0a 20 20 73 74 6f  ity(pMem);.  sto
2d00: 72 65 54 79 70 65 49 6e 66 6f 28 70 4d 65 6d 2c  reTypeInfo(pMem,
2d10: 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 4d   0);.  return pM
2d20: 65 6d 2d 3e 74 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a  em->type;.}../*.
2d30: 2a 2a 20 45 78 70 6f 72 74 65 64 20 76 65 72 73  ** Exported vers
2d40: 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69  ion of applyAffi
2d50: 6e 69 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65  nity(). This one
2d60: 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65   works on sqlite
2d70: 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f  3_value*, .** no
2d80: 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d  t the internal M
2d90: 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69  em* type..*/.voi
2da0: 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70  d sqlite3ValueAp
2db0: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73  plyAffinity(.  s
2dc0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
2dd0: 61 6c 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69  al, .  u8 affini
2de0: 74 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b  ty, .  u8 enc.){
2df0: 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  .  applyAffinity
2e00: 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66  ((Mem *)pVal, af
2e10: 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a  finity, enc);.}.
2e20: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2e30: 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65  EBUG./*.** Write
2e40: 20 61 20 6e 69 63 65 20 73 74 72 69 6e 67 20 72   a nice string r
2e50: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
2e60: 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66   the contents of
2e70: 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20 69 6e   cell pMem.** in
2e80: 74 6f 20 62 75 66 66 65 72 20 7a 42 75 66 2c 20  to buffer zBuf, 
2e90: 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a 2f 0a  length nBuf..*/.
2ea0: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
2eb0: 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 4d  MemPrettyPrint(M
2ec0: 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72 20 2a  em *pMem, char *
2ed0: 7a 42 75 66 29 7b 0a 20 20 63 68 61 72 20 2a 7a  zBuf){.  char *z
2ee0: 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20 69 6e  Csr = zBuf;.  in
2ef0: 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67  t f = pMem->flag
2f00: 73 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  s;..  static con
2f10: 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 65  st char *const e
2f20: 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22 28 58  ncnames[] = {"(X
2f30: 29 22 2c 20 22 28 38 29 22 2c 20 22 28 31 36 4c  )", "(8)", "(16L
2f40: 45 29 22 2c 20 22 28 31 36 42 45 29 22 7d 3b 0a  E)", "(16BE)"};.
2f50: 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f 42 6c 6f  .  if( f&MEM_Blo
2f60: 62 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  b ){.    int i;.
2f70: 20 20 20 20 63 68 61 72 20 63 3b 0a 20 20 20 20      char c;.    
2f80: 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20  if( f & MEM_Dyn 
2f90: 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 7a 27  ){.      c = 'z'
2fa0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2fb0: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
2fc0: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
2fd0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
2fe0: 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20   f & MEM_Static 
2ff0: 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 74 27  ){.      c = 't'
3000: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3010: 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45  (f & (MEM_Dyn|ME
3020: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
3030: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
3040: 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20  & MEM_Ephem ){. 
3050: 20 20 20 20 20 63 20 3d 20 27 65 27 3b 0a 20 20       c = 'e';.  
3060: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3070: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
3080: 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20  _Dyn))==0 );.   
3090: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 20   }else{.      c 
30a0: 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 0a 20 20  = 's';.    }..  
30b0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
30c0: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
30d0: 63 22 2c 20 63 29 3b 0a 20 20 20 20 7a 43 73 72  c", c);.    zCsr
30e0: 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 43 73 72 29   += strlen(zCsr)
30f0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3100: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3110: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
3120: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3130: 74 72 6c 65 6e 28 7a 43 73 72 29 3b 0a 20 20 20  trlen(zCsr);.   
3140: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26   for(i=0; i<16 &
3150: 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b  & i<pMem->n; i++
3160: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
3170: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
3180: 43 73 72 2c 20 22 25 30 32 58 22 2c 20 28 28 69  Csr, "%02X", ((i
3190: 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20  nt)pMem->z[i] & 
31a0: 30 78 46 46 29 29 3b 0a 20 20 20 20 20 20 7a 43  0xFF));.      zC
31b0: 73 72 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 43 73  sr += strlen(zCs
31c0: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f  r);.    }.    fo
31d0: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
31e0: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
31f0: 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70        char z = p
3200: 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20  Mem->z[i];.     
3210: 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31   if( z<32 || z>1
3220: 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27  26 ) *zCsr++ = '
3230: 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a  .';.      else *
3240: 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20  zCsr++ = z;.    
3250: 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  }..    sqlite3_s
3260: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3270: 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d  r, "]%s", encnam
3280: 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a  es[pMem->enc]);.
3290: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 74 72 6c      zCsr += strl
32a0: 65 6e 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66  en(zCsr);.    if
32b0: 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ( f & MEM_Zero )
32c0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
32d0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
32e0: 73 72 2c 22 2b 25 6c 6c 64 7a 22 2c 70 4d 65 6d  sr,"+%lldz",pMem
32f0: 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 20 20 7a 43  ->u.i);.      zC
3300: 73 72 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 43 73  sr += strlen(zCs
3310: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a  r);.    }.    *z
3320: 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65  Csr = '\0';.  }e
3330: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
3340: 53 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a  Str ){.    int j
3350: 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d  , k;.    zBuf[0]
3360: 20 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20   = ' ';.    if( 
3370: 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20  f & MEM_Dyn ){. 
3380: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3390: 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  z';.      assert
33a0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
33b0: 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  ic|MEM_Ephem))==
33c0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
33d0: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69  f( f & MEM_Stati
33e0: 63 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  c ){.      zBuf[
33f0: 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20  1] = 't';.      
3400: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3410: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
3420: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3430: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
3440: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75  hem ){.      zBu
3450: 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20  f[1] = 'e';.    
3460: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
3470: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44  MEM_Static|MEM_D
3480: 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  yn))==0 );.    }
3490: 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66  else{.      zBuf
34a0: 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d  [1] = 's';.    }
34b0: 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20  .    k = 2;.    
34c0: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
34d0: 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20  (100, &zBuf[k], 
34e0: 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a  "%d", pMem->n);.
34f0: 20 20 20 20 6b 20 2b 3d 20 73 74 72 6c 65 6e 28      k += strlen(
3500: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
3510: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a  Buf[k++] = '[';.
3520: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31      for(j=0; j<1
3530: 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20  5 && j<pMem->n; 
3540: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63  j++){.      u8 c
3550: 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20   = pMem->z[j];. 
3560: 20 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30       if( c>=0x20
3570: 20 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20   && c<0x7f ){.  
3580: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
3590: 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = c;.      }else
35a0: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
35b0: 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  ++] = '.';.     
35c0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75   }.    }.    zBu
35d0: 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20  f[k++] = ']';.  
35e0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
35f0: 74 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c  tf(100,&zBuf[k],
3600: 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e   encnames[pMem->
3610: 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  enc]);.    k += 
3620: 73 74 72 6c 65 6e 28 26 7a 42 75 66 5b 6b 5d 29  strlen(&zBuf[k])
3630: 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  ;.    zBuf[k++] 
3640: 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69  = 0;.  }.}.#endi
3650: 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
3660: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69  _DEBUG./*.** Pri
3670: 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  nt the value of 
3680: 61 20 72 65 67 69 73 74 65 72 20 66 6f 72 20 74  a register for t
3690: 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65 73 3a  racing purposes:
36a0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
36b0: 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 46 49  memTracePrint(FI
36c0: 4c 45 20 2a 6f 75 74 2c 20 4d 65 6d 20 2a 70 29  LE *out, Mem *p)
36d0: 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  {.  if( p->flags
36e0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
36f0: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20     fprintf(out, 
3700: 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73  " NULL");.  }els
3710: 65 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20  e if( (p->flags 
3720: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53  & (MEM_Int|MEM_S
3730: 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d  tr))==(MEM_Int|M
3740: 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20 20 20 66  EM_Str) ){.    f
3750: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 73 69  printf(out, " si
3760: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
3770: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e  .  }else if( p->
3780: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
3790: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
37a0: 75 74 2c 20 22 20 69 3a 25 6c 6c 64 22 2c 20 70  ut, " i:%lld", p
37b0: 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20  ->u.i);.  }else 
37c0: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
37d0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 66  EM_Real ){.    f
37e0: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 72 3a  printf(out, " r:
37f0: 25 67 22 2c 20 70 2d 3e 72 29 3b 0a 20 20 7d 65  %g", p->r);.  }e
3800: 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42  lse{.    char zB
3810: 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c  uf[200];.    sql
3820: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
3830: 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b  yPrint(p, zBuf);
3840: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74  .    fprintf(out
3850: 2c 20 22 20 22 29 3b 0a 20 20 20 20 66 70 72 69  , " ");.    fpri
3860: 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20 7a  ntf(out, "%s", z
3870: 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74  Buf);.  }.}.stat
3880: 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65 72  ic void register
3890: 54 72 61 63 65 28 46 49 4c 45 20 2a 6f 75 74 2c  Trace(FILE *out,
38a0: 20 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a   int iReg, Mem *
38b0: 70 29 7b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75  p){.  fprintf(ou
38c0: 74 2c 20 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c  t, "REG[%d] = ",
38d0: 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61   iReg);.  memTra
38e0: 63 65 50 72 69 6e 74 28 6f 75 74 2c 20 70 29 3b  cePrint(out, p);
38f0: 0a 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20  .  fprintf(out, 
3900: 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a  "\n");.}.#endif.
3910: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
3920: 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20 52  EBUG.#  define R
3930: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c  EGISTER_TRACE(R,
3940: 4d 29 20 69 66 28 70 2d 3e 74 72 61 63 65 29 72  M) if(p->trace)r
3950: 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e  egisterTrace(p->
3960: 74 72 61 63 65 2c 52 2c 4d 29 0a 23 65 6c 73 65  trace,R,M).#else
3970: 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49 53  .#  define REGIS
3980: 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23  TER_TRACE(R,M).#
3990: 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66 20 56  endif...#ifdef V
39a0: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20  DBE_PROFILE../* 
39b0: 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e  .** hwtime.h con
39c0: 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73  tains inline ass
39d0: 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f 72 20  embler code for 
39e0: 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a  implementing .**
39f0: 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63   high-performanc
3a00: 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65  e timing routine
3a10: 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  s..*/.#include "
3a20: 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69  hwtime.h"..#endi
3a30: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 43 48 45  f../*.** The CHE
3a40: 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54  CK_FOR_INTERRUPT
3a50: 20 6d 61 63 72 6f 20 64 65 66 69 6e 65 64 20 68   macro defined h
3a60: 65 72 65 20 6c 6f 6f 6b 73 20 74 6f 20 73 65 65  ere looks to see
3a70: 20 69 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   if the.** sqlit
3a80: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 72  e3_interrupt() r
3a90: 6f 75 74 69 6e 65 20 68 61 73 20 62 65 65 6e 20  outine has been 
3aa0: 63 61 6c 6c 65 64 2e 20 20 49 66 20 69 74 20 68  called.  If it h
3ab0: 61 73 20 62 65 65 6e 2c 20 74 68 65 6e 0a 2a 2a  as been, then.**
3ac0: 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20 74   processing of t
3ad0: 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20  he VDBE program 
3ae0: 69 73 20 69 6e 74 65 72 72 75 70 74 65 64 2e 0a  is interrupted..
3af0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f  **.** This macro
3b00: 20 61 64 64 65 64 20 74 6f 20 65 76 65 72 79 20   added to every 
3b10: 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 61 74  instruction that
3b20: 20 64 6f 65 73 20 61 20 6a 75 6d 70 20 69 6e 20   does a jump in 
3b30: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 69 6d 70 6c  order to.** impl
3b40: 65 6d 65 6e 74 20 61 20 6c 6f 6f 70 2e 20 20 54  ement a loop.  T
3b50: 68 69 73 20 74 65 73 74 20 75 73 65 64 20 74 6f  his test used to
3b60: 20 62 65 20 6f 6e 20 65 76 65 72 79 20 73 69 6e   be on every sin
3b70: 67 6c 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c  gle instruction,
3b80: 0a 2a 2a 20 62 75 74 20 74 68 61 74 20 6d 65 61  .** but that mea
3b90: 6e 74 20 77 65 20 6d 6f 72 65 20 74 65 73 74 69  nt we more testi
3ba0: 6e 67 20 74 68 61 74 20 77 65 20 6e 65 65 64 65  ng that we neede
3bb0: 64 2e 20 20 42 79 20 6f 6e 6c 79 20 74 65 73 74  d.  By only test
3bc0: 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6c 61 67 20  ing the.** flag 
3bd0: 6f 6e 20 6a 75 6d 70 20 69 6e 73 74 72 75 63 74  on jump instruct
3be0: 69 6f 6e 73 2c 20 77 65 20 67 65 74 20 61 20 28  ions, we get a (
3bf0: 73 6d 61 6c 6c 29 20 73 70 65 65 64 20 69 6d 70  small) speed imp
3c00: 72 6f 76 65 6d 65 6e 74 2e 0a 2a 2f 0a 23 64 65  rovement..*/.#de
3c10: 66 69 6e 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49  fine CHECK_FOR_I
3c20: 4e 54 45 52 52 55 50 54 20 5c 0a 20 20 20 69 66  NTERRUPT \.   if
3c30: 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
3c40: 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62  rupted ) goto ab
3c50: 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
3c60: 72 75 70 74 3b 0a 0a 23 69 66 64 65 66 20 53 51  rupt;..#ifdef SQ
3c70: 4c 49 54 45 5f 44 45 42 55 47 0a 73 74 61 74 69  LITE_DEBUG.stati
3c80: 63 20 69 6e 74 20 66 69 6c 65 45 78 69 73 74 73  c int fileExists
3c90: 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f  (sqlite3 *db, co
3ca0: 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 29  nst char *zFile)
3cb0: 7b 0a 20 20 69 6e 74 20 72 65 73 20 3d 20 30 3b  {.  int res = 0;
3cc0: 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49  .  int rc = SQLI
3cd0: 54 45 5f 4f 4b 3b 0a 23 69 66 64 65 66 20 53 51  TE_OK;.#ifdef SQ
3ce0: 4c 49 54 45 5f 54 45 53 54 0a 20 20 2f 2a 20 49  LITE_TEST.  /* I
3cf0: 66 20 77 65 20 61 72 65 20 63 75 72 72 65 6e 74  f we are current
3d00: 6c 79 20 74 65 73 74 69 6e 67 20 49 4f 20 65 72  ly testing IO er
3d10: 72 6f 72 73 2c 20 74 68 65 6e 20 64 6f 20 6e 6f  rors, then do no
3d20: 74 20 63 61 6c 6c 20 4f 73 41 63 63 65 73 73 28  t call OsAccess(
3d30: 29 20 74 6f 0a 20 20 2a 2a 20 74 65 73 74 20 66  ) to.  ** test f
3d40: 6f 72 20 74 68 65 20 70 72 65 73 65 6e 63 65 20  or the presence 
3d50: 6f 66 20 7a 46 69 6c 65 2e 20 54 68 69 73 20 69  of zFile. This i
3d60: 73 20 62 65 63 61 75 73 65 20 61 6e 79 20 49 4f  s because any IO
3d70: 20 65 72 72 6f 72 20 74 68 61 74 0a 20 20 2a 2a   error that.  **
3d80: 20 6f 63 63 75 72 73 20 68 65 72 65 20 77 69 6c   occurs here wil
3d90: 6c 20 6e 6f 74 20 62 65 20 72 65 70 6f 72 74 65  l not be reporte
3da0: 64 2c 20 63 61 75 73 69 6e 67 20 74 68 65 20 74  d, causing the t
3db0: 65 73 74 20 74 6f 20 66 61 69 6c 2e 0a 20 20 2a  est to fail..  *
3dc0: 2f 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  /.  extern int s
3dd0: 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72 6f 72 5f  qlite3_io_error_
3de0: 70 65 6e 64 69 6e 67 3b 0a 20 20 69 66 28 20 73  pending;.  if( s
3df0: 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72 6f 72 5f  qlite3_io_error_
3e00: 70 65 6e 64 69 6e 67 3c 3d 30 20 29 0a 23 65 6e  pending<=0 ).#en
3e10: 64 69 66 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  dif.    rc = sql
3e20: 69 74 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d  ite3OsAccess(db-
3e30: 3e 70 56 66 73 2c 20 7a 46 69 6c 65 2c 20 53 51  >pVfs, zFile, SQ
3e40: 4c 49 54 45 5f 41 43 43 45 53 53 5f 45 58 49 53  LITE_ACCESS_EXIS
3e50: 54 53 2c 20 26 72 65 73 29 3b 0a 20 20 72 65 74  TS, &res);.  ret
3e60: 75 72 6e 20 28 72 65 73 20 26 26 20 72 63 3d 3d  urn (res && rc==
3e70: 53 51 4c 49 54 45 5f 4f 4b 29 3b 0a 7d 0a 23 65  SQLITE_OK);.}.#e
3e80: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  ndif../*.** Exec
3e90: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
3ea0: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
3eb0: 20 77 65 20 63 61 6e 20 74 68 65 6e 20 72 65 74   we can then ret
3ec0: 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  urn..**.** sqlit
3ed0: 65 33 56 64 62 65 4d 61 6b 65 52 65 61 64 79 28  e3VdbeMakeReady(
3ee0: 29 20 6d 75 73 74 20 62 65 20 63 61 6c 6c 65 64  ) must be called
3ef0: 20 62 65 66 6f 72 65 20 74 68 69 73 20 72 6f 75   before this rou
3f00: 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  tine in order to
3f10: 0a 2a 2a 20 63 6c 6f 73 65 20 74 68 65 20 70 72  .** close the pr
3f20: 6f 67 72 61 6d 20 77 69 74 68 20 61 20 66 69 6e  ogram with a fin
3f30: 61 6c 20 4f 50 5f 48 61 6c 74 20 61 6e 64 20 74  al OP_Halt and t
3f40: 6f 20 73 65 74 20 75 70 20 74 68 65 20 63 61 6c  o set up the cal
3f50: 6c 62 61 63 6b 73 0a 2a 2a 20 61 6e 64 20 74 68  lbacks.** and th
3f60: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
3f70: 70 6f 69 6e 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 57  pointer..**.** W
3f80: 68 65 6e 65 76 65 72 20 61 20 72 6f 77 20 6f 72  henever a row or
3f90: 20 72 65 73 75 6c 74 20 64 61 74 61 20 69 73 20   result data is 
3fa0: 61 76 61 69 6c 61 62 6c 65 2c 20 74 68 69 73 20  available, this 
3fb0: 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 65 69 74  routine will eit
3fc0: 68 65 72 0a 2a 2a 20 69 6e 76 6f 6b 65 20 74 68  her.** invoke th
3fd0: 65 20 72 65 73 75 6c 74 20 63 61 6c 6c 62 61 63  e result callbac
3fe0: 6b 20 28 69 66 20 74 68 65 72 65 20 69 73 20 6f  k (if there is o
3ff0: 6e 65 29 20 6f 72 20 72 65 74 75 72 6e 20 77 69  ne) or return wi
4000: 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 52 4f 57  th.** SQLITE_ROW
4010: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 61 74  ..**.** If an at
4020: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
4030: 20 6f 70 65 6e 20 61 20 6c 6f 63 6b 65 64 20 64   open a locked d
4040: 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68  atabase, then th
4050: 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 69  is routine.** wi
4060: 6c 6c 20 65 69 74 68 65 72 20 69 6e 76 6f 6b 65  ll either invoke
4070: 20 74 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61   the busy callba
4080: 63 6b 20 28 69 66 20 74 68 65 72 65 20 69 73 20  ck (if there is 
4090: 6f 6e 65 29 20 6f 72 20 69 74 20 77 69 6c 6c 0a  one) or it will.
40a0: 2a 2a 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  ** return SQLITE
40b0: 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  _BUSY..**.** If 
40c0: 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  an error occurs,
40d0: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
40e0: 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 6f 20  e is written to 
40f0: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 0a  memory obtained.
4100: 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ** from sqlite3_
4110: 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 70 2d 3e  malloc() and p->
4120: 7a 45 72 72 4d 73 67 20 69 73 20 6d 61 64 65 20  zErrMsg is made 
4130: 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 61 74  to point to that
4140: 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 20 54 68 65 20   memory..** The 
4150: 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 73 74  error code is st
4160: 6f 72 65 64 20 69 6e 20 70 2d 3e 72 63 20 61 6e  ored in p->rc an
4170: 64 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72  d this routine r
4180: 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 52  eturns SQLITE_ER
4190: 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ROR..**.** If th
41a0: 65 20 63 61 6c 6c 62 61 63 6b 20 65 76 65 72 20  e callback ever 
41b0: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
41c0: 2c 20 74 68 65 6e 20 74 68 65 20 70 72 6f 67 72  , then the progr
41d0: 61 6d 20 65 78 69 74 73 0a 2a 2a 20 69 6d 6d 65  am exits.** imme
41e0: 64 69 61 74 65 6c 79 2e 20 20 54 68 65 72 65 20  diately.  There 
41f0: 77 69 6c 6c 20 62 65 20 6e 6f 20 65 72 72 6f 72  will be no error
4200: 20 6d 65 73 73 61 67 65 20 62 75 74 20 74 68 65   message but the
4210: 20 70 2d 3e 72 63 20 66 69 65 6c 64 20 69 73 0a   p->rc field is.
4220: 2a 2a 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45  ** set to SQLITE
4230: 5f 41 42 4f 52 54 20 61 6e 64 20 74 68 69 73 20  _ABORT and this 
4240: 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 72 65 74  routine will ret
4250: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
4260: 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d 65 6d 6f 72 79  ..**.** A memory
4270: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 65 72 72 6f   allocation erro
4280: 72 20 63 61 75 73 65 73 20 70 2d 3e 72 63 20 74  r causes p->rc t
4290: 6f 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49  o be set to SQLI
42a0: 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64 20 74 68 69  TE_NOMEM and thi
42b0: 73 0a 2a 2a 20 72 6f 75 74 69 6e 65 20 74 6f 20  s.** routine to 
42c0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
42d0: 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72  ROR..**.** Other
42e0: 20 66 61 74 61 6c 20 65 72 72 6f 72 73 20 72 65   fatal errors re
42f0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
4300: 52 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 74  R..**.** After t
4310: 68 69 73 20 72 6f 75 74 69 6e 65 20 68 61 73 20  his routine has 
4320: 66 69 6e 69 73 68 65 64 2c 20 73 71 6c 69 74 65  finished, sqlite
4330: 33 56 64 62 65 46 69 6e 61 6c 69 7a 65 28 29 20  3VdbeFinalize() 
4340: 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 75 73 65  should be.** use
4350: 64 20 74 6f 20 63 6c 65 61 6e 20 75 70 20 74 68  d to clean up th
4360: 65 20 6d 65 73 73 20 74 68 61 74 20 77 61 73 20  e mess that was 
4370: 6c 65 66 74 20 62 65 68 69 6e 64 2e 0a 2a 2f 0a  left behind..*/.
4380: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45  int sqlite3VdbeE
4390: 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20  xec(.  Vdbe *p  
43a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43b0: 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f    /* The VDBE */
43c0: 0a 29 7b 0a 20 20 69 6e 74 20 70 63 3b 20 20 20  .){.  int pc;   
43d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43e0: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 61 6d 20   /* The program 
43f0: 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4f 70 20  counter */.  Op 
4400: 2a 70 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20  *pOp;           
4410: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
4420: 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  nt operation */.
4430: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
4440: 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20  E_OK;        /* 
4450: 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
4460: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
4470: 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20   = p->db;       
4480: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
4490: 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e 67  */.  u8 encoding
44a0: 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20 20   = ENC(db);     
44b0: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
44c0: 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 4d 65  encoding */.  Me
44d0: 6d 20 2a 70 49 6e 31 2c 20 2a 70 49 6e 32 2c 20  m *pIn1, *pIn2, 
44e0: 2a 70 49 6e 33 3b 20 20 20 2f 2a 20 49 6e 70 75  *pIn3;   /* Inpu
44f0: 74 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20  t operands */.  
4500: 4d 65 6d 20 2a 70 4f 75 74 3b 20 20 20 20 20 20  Mem *pOut;      
4510: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75             /* Ou
4520: 74 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  tput operand */.
4530: 20 20 75 38 20 6f 70 50 72 6f 70 65 72 74 79 3b    u8 opProperty;
4540: 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20  .  int iCompare 
4550: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
4560: 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20   Result of last 
4570: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
4580: 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  tion */.  int *a
4590: 50 65 72 6d 75 74 65 20 3d 20 30 3b 20 20 20 20  Permute = 0;    
45a0: 20 20 20 20 20 2f 2a 20 50 65 72 6d 75 61 74 69       /* Permuati
45b0: 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f  on of columns fo
45c0: 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a  r OP_Compare */.
45d0: 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
45e0: 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b  ILE.  u64 start;
45f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4600: 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f   /* CPU clock co
4610: 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66 20  unt at start of 
4620: 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  opcode */.  int 
4630: 6f 72 69 67 50 63 3b 20 20 20 20 20 20 20 20 20  origPc;         
4640: 20 20 20 20 20 20 20 2f 2a 20 50 72 6f 67 72 61         /* Progra
4650: 6d 20 63 6f 75 6e 74 65 72 20 61 74 20 73 74 61  m counter at sta
4660: 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a  rt of opcode */.
4670: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
4680: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
4690: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
46a0: 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  nt nProgressOps 
46b0: 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4f 70 63  = 0;      /* Opc
46c0: 6f 64 65 73 20 65 78 65 63 75 74 65 64 20 73 69  odes executed si
46d0: 6e 63 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  nce progress cal
46e0: 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65 6e 64 69 66  lback. */.#endif
46f0: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d  ..  assert( p->m
4700: 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43  agic==VDBE_MAGIC
4710: 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69  _RUN );  /* sqli
4720: 74 65 33 5f 73 74 65 70 28 29 20 76 65 72 69 66  te3_step() verif
4730: 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 61 73  ies this */.  as
4740: 73 65 72 74 28 20 64 62 2d 3e 6d 61 67 69 63 3d  sert( db->magic=
4750: 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55  =SQLITE_MAGIC_BU
4760: 53 59 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 42  SY );.  sqlite3B
4770: 74 72 65 65 4d 75 74 65 78 41 72 72 61 79 45 6e  treeMutexArrayEn
4780: 74 65 72 28 26 70 2d 3e 61 4d 75 74 65 78 29 3b  ter(&p->aMutex);
4790: 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51  .  if( p->rc==SQ
47a0: 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  LITE_NOMEM ){.  
47b0: 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
47c0: 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  s if a malloc() 
47d0: 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f  inside a call to
47e0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
47f0: 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a  text() or.    **
4800: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4810: 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e  text16() failed.
4820: 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f    */.    goto no
4830: 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65  _mem;.  }.  asse
4840: 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  rt( p->rc==SQLIT
4850: 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53  E_OK || p->rc==S
4860: 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20  QLITE_BUSY );.  
4870: 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  p->rc = SQLITE_O
4880: 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  K;.  assert( p->
4890: 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20  explain==0 );.  
48a0: 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20  p->pResultSet = 
48b0: 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e  0;.  db->busyHan
48c0: 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a  dler.nBusy = 0;.
48d0: 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45    CHECK_FOR_INTE
48e0: 52 52 55 50 54 3b 0a 20 20 73 71 6c 69 74 65 33  RRUPT;.  sqlite3
48f0: 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70  VdbeIOTraceSql(p
4900: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
4910: 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33  _DEBUG.  sqlite3
4920: 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
4930: 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63  c();.  if( p->pc
4940: 3d 3d 30 20 0a 20 20 20 26 26 20 28 28 70 2d 3e  ==0 .   && ((p->
4950: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
4960: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 29 20  TE_VdbeListing) 
4970: 7c 7c 20 66 69 6c 65 45 78 69 73 74 73 28 64 62  || fileExists(db
4980: 2c 20 22 76 64 62 65 5f 65 78 70 6c 61 69 6e 22  , "vdbe_explain"
4990: 29 29 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20  )).  ){.    int 
49a0: 69 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 56  i;.    printf("V
49b0: 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74  DBE Program List
49c0: 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 73 71  ing:\n");.    sq
49d0: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71  lite3VdbePrintSq
49e0: 6c 28 70 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  l(p);.    for(i=
49f0: 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b  0; i<p->nOp; i++
4a00: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
4a10: 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f  VdbePrintOp(stdo
4a20: 75 74 2c 20 69 2c 20 26 70 2d 3e 61 4f 70 5b 69  ut, i, &p->aOp[i
4a30: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ]);.    }.  }.  
4a40: 69 66 28 20 66 69 6c 65 45 78 69 73 74 73 28 64  if( fileExists(d
4a50: 62 2c 20 22 76 64 62 65 5f 74 72 61 63 65 22 29  b, "vdbe_trace")
4a60: 20 29 7b 0a 20 20 20 20 70 2d 3e 74 72 61 63 65   ){.    p->trace
4a70: 20 3d 20 73 74 64 6f 75 74 3b 0a 20 20 7d 0a 20   = stdout;.  }. 
4a80: 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
4a90: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69  nMalloc();.#endi
4aa0: 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63  f.  for(pc=p->pc
4ab0: 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b  ; rc==SQLITE_OK;
4ac0: 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65   pc++){.    asse
4ad0: 72 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63 3c  rt( pc>=0 && pc<
4ae0: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66  p->nOp );.    if
4af0: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
4b00: 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ed ) goto no_mem
4b10: 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ;.#ifdef VDBE_PR
4b20: 4f 46 49 4c 45 0a 20 20 20 20 6f 72 69 67 50 63  OFILE.    origPc
4b30: 20 3d 20 70 63 3b 0a 20 20 20 20 73 74 61 72 74   = pc;.    start
4b40: 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
4b50: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 70  ();.#endif.    p
4b60: 4f 70 20 3d 20 26 70 2d 3e 61 4f 70 5b 70 63 5d  Op = &p->aOp[pc]
4b70: 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61  ;..    /* Only a
4b80: 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20  llow tracing if 
4b90: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20  SQLITE_DEBUG is 
4ba0: 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a  defined..    */.
4bb0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
4bc0: 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74  BUG.    if( p->t
4bd0: 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66  race ){.      if
4be0: 28 20 70 63 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ( pc==0 ){.     
4bf0: 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20     printf("VDBE 
4c00: 45 78 65 63 75 74 69 6f 6e 20 54 72 61 63 65 3a  Execution Trace:
4c10: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 73 71  \n");.        sq
4c20: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71  lite3VdbePrintSq
4c30: 6c 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  l(p);.      }.  
4c40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4c50: 72 69 6e 74 4f 70 28 70 2d 3e 74 72 61 63 65 2c  rintOp(p->trace,
4c60: 20 70 63 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d   pc, pOp);.    }
4c70: 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63  .    if( p->trac
4c80: 65 3d 3d 30 20 26 26 20 70 63 3d 3d 30 20 29 7b  e==0 && pc==0 ){
4c90: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 65  .      sqlite3Be
4ca0: 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
4cb0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 66 69 6c  );.      if( fil
4cc0: 65 45 78 69 73 74 73 28 64 62 2c 20 22 76 64 62  eExists(db, "vdb
4cd0: 65 5f 73 71 6c 74 72 61 63 65 22 29 20 29 7b 0a  e_sqltrace") ){.
4ce0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
4cf0: 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a  dbePrintSql(p);.
4d00: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
4d10: 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
4d20: 6c 6c 6f 63 28 29 3b 0a 20 20 20 20 7d 0a 23 65  lloc();.    }.#e
4d30: 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20  ndif.      ..   
4d40: 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65   /* Check to see
4d50: 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73   if we need to s
4d60: 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72  imulate an inter
4d70: 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79  rupt.  This only
4d80: 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20   happens.    ** 
4d90: 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70 65  if we have a spe
4da0: 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e  cial test build.
4db0: 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  .    */.#ifdef S
4dc0: 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69  QLITE_TEST.    i
4dd0: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  f( sqlite3_inter
4de0: 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a  rupt_count>0 ){.
4df0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
4e00: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b  terrupt_count--;
4e10: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
4e20: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
4e30: 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
4e40: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
4e50: 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a  pt(db);.      }.
4e60: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69      }.#endif..#i
4e70: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4e80: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
4e90: 41 43 4b 0a 20 20 20 20 2f 2a 20 43 61 6c 6c 20  ACK.    /* Call 
4ea0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
4eb0: 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73 20 63  lback if it is c
4ec0: 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74 68  onfigured and th
4ed0: 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65  e required numbe
4ee0: 72 0a 20 20 20 20 2a 2a 20 6f 66 20 56 44 42 45  r.    ** of VDBE
4ef0: 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20 65   ops have been e
4f00: 78 65 63 75 74 65 64 20 28 65 69 74 68 65 72 20  xecuted (either 
4f10: 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63  since this invoc
4f20: 61 74 69 6f 6e 20 6f 66 0a 20 20 20 20 2a 2a 20  ation of.    ** 
4f30: 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28  sqlite3VdbeExec(
4f40: 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20  ) or since last 
4f50: 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73  time the progres
4f60: 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63  s callback was c
4f70: 61 6c 6c 65 64 29 2e 0a 20 20 20 20 2a 2a 20 49  alled)..    ** I
4f80: 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  f the progress c
4f90: 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20  allback returns 
4fa0: 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74  non-zero, exit t
4fb0: 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  he virtual machi
4fc0: 6e 65 20 77 69 74 68 0a 20 20 20 20 2a 2a 20 61  ne with.    ** a
4fd0: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c   return code SQL
4fe0: 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 20 20 2a  ITE_ABORT..    *
4ff0: 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50  /.    if( db->xP
5000: 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20 20  rogress ){.     
5010: 20 69 66 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65   if( db->nProgre
5020: 73 73 4f 70 73 3d 3d 6e 50 72 6f 67 72 65 73 73  ssOps==nProgress
5030: 4f 70 73 20 29 7b 0a 20 20 20 20 20 20 20 20 69  Ops ){.        i
5040: 6e 74 20 70 72 63 3b 0a 20 20 20 20 20 20 20 20  nt prc;.        
5050: 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
5060: 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20  yOff(db) ) goto 
5070: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
5080: 75 73 65 3b 0a 20 20 20 20 20 20 20 20 70 72 63  use;.        prc
5090: 20 3d 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28   =db->xProgress(
50a0: 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67  db->pProgressArg
50b0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  );.        if( s
50c0: 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
50d0: 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
50e0: 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
50f0: 20 20 20 20 20 20 20 69 66 28 20 70 72 63 21 3d         if( prc!=
5100: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  0 ){.          r
5110: 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
5120: 52 55 50 54 3b 0a 20 20 20 20 20 20 20 20 20 20  RUPT;.          
5130: 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
5140: 68 61 6c 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a  halt;.        }.
5150: 20 20 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73          nProgres
5160: 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20 20 20  sOps = 0;.      
5170: 7d 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73  }.      nProgres
5180: 73 4f 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65  sOps++;.    }.#e
5190: 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 44 6f 20  ndif..    /* Do 
51a0: 63 6f 6d 6d 6f 6e 20 73 65 74 75 70 20 70 72 6f  common setup pro
51b0: 63 65 73 73 69 6e 67 20 66 6f 72 20 61 6e 79 20  cessing for any 
51c0: 6f 70 63 6f 64 65 20 74 68 61 74 20 69 73 20 6d  opcode that is m
51d0: 61 72 6b 65 64 0a 20 20 20 20 2a 2a 20 77 69 74  arked.    ** wit
51e0: 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72 65 72  h the "out2-prer
51f0: 65 6c 65 61 73 65 22 20 74 61 67 2e 20 20 53 75  elease" tag.  Su
5200: 63 68 20 6f 70 63 6f 64 65 73 20 68 61 76 65 20  ch opcodes have 
5210: 61 20 73 69 6e 67 6c 65 0a 20 20 20 20 2a 2a 20  a single.    ** 
5220: 6f 75 74 70 75 74 20 77 68 69 63 68 20 69 73 20  output which is 
5230: 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
5240: 20 50 32 20 70 61 72 61 6d 65 74 65 72 2e 20 20   P2 parameter.  
5250: 54 68 65 20 50 32 20 72 65 67 69 73 74 65 72 0a  The P2 register.
5260: 20 20 20 20 2a 2a 20 69 73 20 69 6e 69 74 69 61      ** is initia
5270: 6c 69 7a 65 64 20 74 6f 20 61 20 4e 55 4c 4c 2e  lized to a NULL.
5280: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6f 70 50 72  .    */.    opPr
5290: 6f 70 65 72 74 79 20 3d 20 6f 70 63 6f 64 65 50  operty = opcodeP
52a0: 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63  roperty[pOp->opc
52b0: 6f 64 65 5d 3b 0a 20 20 20 20 69 66 28 20 28 6f  ode];.    if( (o
52c0: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
52d0: 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53  G_OUT2_PRERELEAS
52e0: 45 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  E)!=0 ){.      a
52f0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
5300: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5310: 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d  ( pOp->p2<=p->nM
5320: 65 6d 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74  em );.      pOut
5330: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
5340: 3e 70 32 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69  >p2];.      sqli
5350: 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
5360: 65 45 78 74 65 72 6e 61 6c 28 70 4f 75 74 29 3b  eExternal(pOut);
5370: 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  .      pOut->fla
5380: 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
5390: 20 20 20 7d 65 6c 73 65 0a 20 0a 20 20 20 20 2f     }else. .    /
53a0: 2a 20 44 6f 20 63 6f 6d 6d 6f 6e 20 73 65 74 75  * Do common setu
53b0: 70 20 66 6f 72 20 6f 70 63 6f 64 65 73 20 6d 61  p for opcodes ma
53c0: 72 6b 65 64 20 77 69 74 68 20 6f 6e 65 20 6f 66  rked with one of
53d0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 20   the following. 
53e0: 20 20 20 2a 2a 20 63 6f 6d 62 69 6e 61 74 69 6f     ** combinatio
53f0: 6e 73 20 6f 66 20 70 72 6f 70 65 72 74 69 65 73  ns of properties
5400: 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
5410: 20 20 20 20 20 20 20 20 20 20 69 6e 31 0a 20 20            in1.  
5420: 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 69    **           i
5430: 6e 31 20 69 6e 32 0a 20 20 20 20 2a 2a 20 20 20  n1 in2.    **   
5440: 20 20 20 20 20 20 20 20 69 6e 31 20 69 6e 32 20          in1 in2 
5450: 6f 75 74 33 0a 20 20 20 20 2a 2a 20 20 20 20 20  out3.    **     
5460: 20 20 20 20 20 20 69 6e 31 20 69 6e 33 0a 20 20        in1 in3.  
5470: 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 56 61 72 69    **.    ** Vari
5480: 61 62 6c 65 73 20 70 49 6e 31 2c 20 70 49 6e 32  ables pIn1, pIn2
5490: 2c 20 61 6e 64 20 70 49 6e 33 20 61 72 65 20 6d  , and pIn3 are m
54a0: 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  ade to point to 
54b0: 61 70 70 72 6f 70 72 69 61 74 65 0a 20 20 20 20  appropriate.    
54c0: 2a 2a 20 72 65 67 69 73 74 65 72 73 20 66 6f 72  ** registers for
54d0: 20 69 6e 70 75 74 73 2e 20 20 56 61 72 69 61 62   inputs.  Variab
54e0: 6c 65 20 70 4f 75 74 20 70 6f 69 6e 74 73 20 74  le pOut points t
54f0: 6f 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67  o the output reg
5500: 69 73 74 65 72 2e 0a 20 20 20 20 2a 2f 0a 20 20  ister..    */.  
5510: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
5520: 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d  y & OPFLG_IN1)!=
5530: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
5540: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a  t( pOp->p1>0 );.
5550: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5560: 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p1<=p->nMem )
5570: 3b 0a 20 20 20 20 20 20 70 49 6e 31 20 3d 20 26  ;.      pIn1 = &
5580: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  p->aMem[pOp->p1]
5590: 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ;.      REGISTER
55a0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
55b0: 70 49 6e 31 29 3b 0a 20 20 20 20 20 20 69 66 28  pIn1);.      if(
55c0: 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f   (opProperty & O
55d0: 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a  PFLG_IN2)!=0 ){.
55e0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
55f0: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5600: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5610: 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p2<=p->nMem );
5620: 0a 20 20 20 20 20 20 20 20 70 49 6e 32 20 3d 20  .        pIn2 = 
5630: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
5640: 5d 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  ];.        REGIS
5650: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5660: 32 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 20 20  2, pIn2);.      
5670: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
5680: 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21  y & OPFLG_OUT3)!
5690: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
56a0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
56b0: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  0 );.          a
56c0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
56d0: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
56e0: 20 20 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e       pOut = &p->
56f0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
5700: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
5710: 65 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70  else if( (opProp
5720: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33  erty & OPFLG_IN3
5730: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
5740: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
5750: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
5760: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  ert( pOp->p3<=p-
5770: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20  >nMem );.       
5780: 20 70 49 6e 33 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIn3 = &p->aMem
5790: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
57a0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
57b0: 45 28 70 4f 70 2d 3e 70 33 2c 20 70 49 6e 33 29  E(pOp->p3, pIn3)
57c0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
57d0: 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70 65  lse if( (opPrope
57e0: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29  rty & OPFLG_IN2)
57f0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5800: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
5810: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5820: 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p2<=p->nMem
5830: 20 29 3b 0a 20 20 20 20 20 20 70 49 6e 32 20 3d   );.      pIn2 =
5840: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
5850: 32 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54  2];.      REGIST
5860: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
5870: 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 7d 65 6c  , pIn2);.    }el
5880: 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72  se if( (opProper
5890: 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21  ty & OPFLG_IN3)!
58a0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
58b0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
58c0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
58d0: 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
58e0: 29 3b 0a 20 20 20 20 20 20 70 49 6e 33 20 3d 20  );.      pIn3 = 
58f0: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
5900: 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  ];.      REGISTE
5910: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
5920: 20 70 49 6e 33 29 3b 0a 20 20 20 20 7d 0a 0a 20   pIn3);.    }.. 
5930: 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e     switch( pOp->
5940: 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a  opcode ){../****
5950: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5960: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5970: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5980: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5990: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61  *********.** Wha
59a0: 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d  t follows is a m
59b0: 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73 74  assive switch st
59c0: 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61  atement where ea
59d0: 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e  ch case implemen
59e0: 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65  ts a.** separate
59f0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20   instruction in 
5a00: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
5a10: 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c  ine.  If we foll
5a20: 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20  ow the usual.** 
5a30: 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76  indentation conv
5a40: 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61  entions, each ca
5a50: 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64  se should be ind
5a60: 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63 65  ented by 6 space
5a70: 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20  s.  But.** that 
5a80: 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74  is a lot of wast
5a90: 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20  ed space on the 
5aa0: 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f  left margin.  So
5ab0: 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e   the code within
5ac0: 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20 73  .** the switch s
5ad0: 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72  tatement will br
5ae0: 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74  eak with convent
5af0: 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68  ion and be flush
5b00: 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a  -left. Another.*
5b10: 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73  * big comment (s
5b20: 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f  imilar to this o
5b30: 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68  ne) will mark th
5b40: 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63  e point in the c
5b50: 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20  ode where.** we 
5b60: 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20  transition back 
5b70: 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74  to normal indent
5b80: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ation..**.** The
5b90: 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65   formatting of e
5ba0: 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f  ach case is impo
5bb0: 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65  rtant.  The make
5bc0: 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a  file for SQLite.
5bd0: 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f  ** generates two
5be0: 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65   C files "opcode
5bf0: 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65  s.h" and "opcode
5c00: 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67  s.c" by scanning
5c10: 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f   this.** file lo
5c20: 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20  oking for lines 
5c30: 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20  that begin with 
5c40: 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65  "case OP_".  The
5c50: 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73   opcodes.h files
5c60: 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c  .** will be fill
5c70: 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65 73  ed with #defines
5c80: 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71 75   that give uniqu
5c90: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73  e integer values
5ca0: 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f   to each.** opco
5cb0: 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64  de and the opcod
5cc0: 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c  es.c file is fil
5cd0: 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72 61  led with an arra
5ce0: 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65  y of strings whe
5cf0: 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e  re.** each strin
5d00: 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69  g is the symboli
5d10: 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63  c name for the c
5d20: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63  orresponding opc
5d30: 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ode.  If the.** 
5d40: 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69  case statement i
5d50: 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  s followed by a 
5d60: 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66  comment of the f
5d70: 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20  orm "/# same as 
5d80: 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20  ... #/".** that 
5d90: 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20  comment is used 
5da0: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
5db0: 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75   particular valu
5dc0: 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e  e of the opcode.
5dd0: 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79  .**.** Other key
5de0: 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d  words in the com
5df0: 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77  ment that follow
5e00: 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65 20  s each case are 
5e10: 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74  used to.** const
5e20: 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49  ruct the OPFLG_I
5e30: 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65  NITIALIZER value
5e40: 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65   that initialize
5e50: 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  s opcodeProperty
5e60: 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20  []..** Keywords 
5e70: 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e  include: in1, in
5e80: 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72 65  2, in3, out2_pre
5e90: 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20 6f  release, out2, o
5ea0: 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65  ut3.  See.** the
5eb0: 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73   mkopcodeh.awk s
5ec0: 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74 69  cript for additi
5ed0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
5ee0: 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74  ..**.** Document
5ef0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45  ation about VDBE
5f00: 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65   opcodes is gene
5f10: 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e  rated by scannin
5f20: 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66  g this file.** f
5f30: 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74  or lines of that
5f40: 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65   contain "Opcode
5f50: 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61  :".  That line a
5f60: 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e  nd all subsequen
5f70: 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e  t.** comment lin
5f80: 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20 74  es are used in t
5f90: 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
5fa0: 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c   the opcode.html
5fb0: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a   documentation.*
5fc0: 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55  * file..**.** SU
5fd0: 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  MMARY:.**.**    
5fe0: 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69   Formatting is i
5ff0: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69  mportant to scri
6000: 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74 68  pts that scan th
6010: 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20  is file..**     
6020: 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66  Do not deviate f
6030: 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69  rom the formatti
6040: 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74  ng style current
6050: 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  ly in use..**.**
6060: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6070: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6080: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6090: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
60a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a  ***********/../*
60b0: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a   Opcode:  Goto *
60c0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
60d0: 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c  An unconditional
60e0: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
60f0: 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74   P2..** The next
6100: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65   instruction exe
6110: 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a  cuted will be .*
6120: 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64  * the one at ind
6130: 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62  ex P2 from the b
6140: 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74  eginning of.** t
6150: 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63  he program..*/.c
6160: 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20  ase OP_Goto: {  
6170: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6180: 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46 4f  mp */.  CHECK_FO
6190: 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70  R_INTERRUPT;.  p
61a0: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
61b0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
61c0: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
61d0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
61e0: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
61f0: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
6200: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
6210: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
6220: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
6230: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
6240: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6250: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
6260: 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61  pOp->p1>0 );.  a
6270: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d  ssert( pOp->p1<=
6280: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e  p->nMem );.  pIn
6290: 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  1 = &p->aMem[pOp
62a0: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
62b0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
62c0: 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20  MEM_Dyn)==0 );. 
62d0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
62e0: 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e  EM_Int;.  pIn1->
62f0: 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49  u.i = pc;.  REGI
6300: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
6310: 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20  p1, pIn1);.  pc 
6320: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
6330: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6340: 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31  code:  Return P1
6350: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a   * * * *.**.** J
6360: 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ump to the next 
6370: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65  instruction afte
6380: 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e  r the address in
6390: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f   register P1..*/
63a0: 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a  .case OP_Return:
63b0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
63c0: 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  in1 */.  assert(
63d0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
63e0: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20 3d  EM_Int );.  pc =
63f0: 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 62 72   pIn1->u.i;.  br
6400: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6410: 65 3a 20 20 59 69 65 6c 64 20 50 31 20 2a 20 2a  e:  Yield P1 * *
6420: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20   * *.**.** Swap 
6430: 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e  the program coun
6440: 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c  ter with the val
6450: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
6460: 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69  1..*/.case OP_Yi
6470: 65 6c 64 3a 20 7b 0a 20 20 69 6e 74 20 70 63 44  eld: {.  int pcD
6480: 65 73 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  est;.  assert( p
6490: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73  Op->p1>0 );.  as
64a0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70  sert( pOp->p1<=p
64b0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e 31  ->nMem );.  pIn1
64c0: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
64d0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
64e0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
64f0: 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20  EM_Dyn)==0 );.  
6500: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
6510: 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74 20  M_Int;.  pcDest 
6520: 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70  = pIn1->u.i;.  p
6530: 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20  In1->u.i = pc;. 
6540: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
6550: 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a  pOp->p1, pIn1);.
6560: 20 20 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20    pc = pcDest;. 
6570: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
6580: 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20  pcode:  Halt P1 
6590: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
65a0: 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79  Exit immediately
65b0: 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73  .  All open curs
65c0: 6f 72 73 2c 20 46 69 66 6f 73 2c 20 65 74 63 20  ors, Fifos, etc 
65d0: 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75  are closed.** au
65e0: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a  tomatically..**.
65f0: 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73  ** P1 is the res
6600: 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ult code returne
6610: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65  d by sqlite3_exe
6620: 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73  c(), sqlite3_res
6630: 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69  et(),.** or sqli
6640: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20  te3_finalize(). 
6650: 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61   For a normal ha
6660: 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20  lt, this should 
6670: 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29  be SQLITE_OK (0)
6680: 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c  ..** For errors,
6690: 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20   it can be some 
66a0: 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66  other value.  If
66b0: 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77   P1!=0 then P2 w
66c0: 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a  ill determine.**
66d0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
66e0: 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  to rollback the 
66f0: 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
6700: 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c  ion.  Do not rol
6710: 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d  lback.** if P2==
6720: 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20  OE_Fail. Do the 
6730: 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d  rollback if P2==
6740: 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66  OE_Rollback.  If
6750: 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a   P2==OE_Abort,.*
6760: 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20  * then back out 
6770: 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74  all changes that
6780: 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64   have occurred d
6790: 75 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75  uring this execu
67a0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56  tion of the.** V
67b0: 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  DBE, but do not 
67c0: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
67d0: 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a  nsaction. .**.**
67e0: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75   If P4 is not nu
67f0: 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e  ll then it is an
6800: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   error message s
6810: 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  tring..**.** The
6820: 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64  re is an implied
6830: 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e   "Halt 0 0 0" in
6840: 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74  struction insert
6850: 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65  ed at the very e
6860: 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70  nd of.** every p
6870: 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75  rogram.  So a ju
6880: 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  mp past the last
6890: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
68a0: 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69  the program.** i
68b0: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78  s the same as ex
68c0: 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f  ecuting Halt..*/
68d0: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b  .case OP_Halt: {
68e0: 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e  .  p->rc = pOp->
68f0: 70 31 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63  p1;.  p->pc = pc
6900: 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69  ;.  p->errorActi
6910: 6f 6e 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  on = pOp->p2;.  
6920: 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b  if( pOp->p4.z ){
6930: 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
6940: 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
6950: 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 70 4f 70  g, db, "%s", pOp
6960: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 7d 0a 20 20 72  ->p4.z);.  }.  r
6970: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48  c = sqlite3VdbeH
6980: 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74  alt(p);.  assert
6990: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
69a0: 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  Y || rc==SQLITE_
69b0: 4f 4b 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  OK );.  if( rc==
69c0: 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
69d0: 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
69e0: 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d  SQLITE_BUSY;.  }
69f0: 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 70  else{.    rc = p
6a00: 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52  ->rc ? SQLITE_ER
6a10: 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e  ROR : SQLITE_DON
6a20: 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64  E;.  }.  goto vd
6a30: 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a  be_return;.}../*
6a40: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72   Opcode: Integer
6a50: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
6a60: 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69 6e  ** The 32-bit in
6a70: 74 65 67 65 72 20 76 61 6c 75 65 20 50 31 20 69  teger value P1 i
6a80: 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 72  s written into r
6a90: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
6aa0: 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20  ase OP_Integer: 
6ab0: 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74  {         /* out
6ac0: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
6ad0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
6ae0: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 4f 75 74 2d  MEM_Int;.  pOut-
6af0: 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  >u.i = pOp->p1;.
6b00: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6b10: 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50  pcode: Int64 * P
6b20: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  2 * P4 *.**.** P
6b30: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
6b40: 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  o a 64-bit integ
6b50: 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  er value..** Wri
6b60: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
6b70: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
6b80: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34  */.case OP_Int64
6b90: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
6ba0: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
6bb0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
6bc0: 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b  p->p4.pI64!=0 );
6bd0: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
6be0: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 4f 75 74   MEM_Int;.  pOut
6bf0: 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34  ->u.i = *pOp->p4
6c00: 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a  .pI64;.  break;.
6c10: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
6c20: 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  al * P2 * P4 *.*
6c30: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
6c40: 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74  nter to a 64-bit
6c50: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
6c60: 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20  value..** Write 
6c70: 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20  that value into 
6c80: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
6c90: 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20  case OP_Real: { 
6ca0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
6cb0: 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20  me as TK_FLOAT, 
6cc0: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
6cd0: 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  */.  pOut->flags
6ce0: 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61   = MEM_Real;.  a
6cf0: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49  ssert( !sqlite3I
6d00: 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52  sNaN(*pOp->p4.pR
6d10: 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  eal) );.  pOut->
6d20: 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65  r = *pOp->p4.pRe
6d30: 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  al;.  break;.}..
6d40: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
6d50: 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  g8 * P2 * P4 *.*
6d60: 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74  *.** P4 points t
6d70: 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74  o a nul terminat
6d80: 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e  ed UTF-8 string.
6d90: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
6da0: 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20  transformed .** 
6db0: 69 6e 74 6f 20 61 6e 20 4f 50 5f 53 74 72 69 6e  into an OP_Strin
6dc0: 67 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65  g before it is e
6dd0: 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20  xecuted for the 
6de0: 66 69 72 73 74 20 74 69 6d 65 2e 0a 2a 2f 0a 63  first time..*/.c
6df0: 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20  ase OP_String8: 
6e00: 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d  {         /* sam
6e10: 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20  e as TK_STRING, 
6e20: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
6e30: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
6e40: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
6e50: 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f  Op->opcode = OP_
6e60: 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70  String;.  pOp->p
6e70: 31 20 3d 20 73 74 72 6c 65 6e 28 70 4f 70 2d 3e  1 = strlen(pOp->
6e80: 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20  p4.z);..#ifndef 
6e90: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
6ea0: 36 0a 20 20 69 66 28 20 65 6e 63 6f 64 69 6e 67  6.  if( encoding
6eb0: 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b  !=SQLITE_UTF8 ){
6ec0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
6ed0: 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20  MemSetStr(pOut, 
6ee0: 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53  pOp->p4.z, -1, S
6ef0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
6f00: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
6f10: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73  if( SQLITE_OK!=s
6f20: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
6f30: 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65  Encoding(pOut, e
6f40: 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f 20  ncoding) ) goto 
6f50: 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 69 66 28 20  no_mem;.    if( 
6f60: 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74  SQLITE_OK!=sqlit
6f70: 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69  e3VdbeMemMakeWri
6f80: 74 65 61 62 6c 65 28 70 4f 75 74 29 20 29 20 67  teable(pOut) ) g
6f90: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
6fa0: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  pOut->zMalloc = 
6fb0: 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  0;.    pOut->fla
6fc0: 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63  gs |= MEM_Static
6fd0: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
6fe0: 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20  s &= ~MEM_Dyn;. 
6ff0: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79     if( pOp->p4ty
7000: 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29  pe==P4_DYNAMIC )
7010: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  {.      sqlite3D
7020: 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70  bFree(db, pOp->p
7030: 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  4.z);.    }.    
7040: 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34  pOp->p4type = P4
7050: 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f  _DYNAMIC;.    pO
7060: 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e  p->p4.z = pOut->
7070: 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d  z;.    pOp->p1 =
7080: 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 20 20 69 66   pOut->n;.    if
7090: 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c  ( pOp->p1>db->aL
70a0: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
70b0: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
70c0: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
70d0: 0a 20 20 20 20 7d 0a 20 20 20 20 55 50 44 41 54  .    }.    UPDAT
70e0: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
70f0: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
7100: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66  .  }.#endif.  if
7110: 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c  ( pOp->p1>db->aL
7120: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
7130: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
7140: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
7150: 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72   }.  /* Fall thr
7160: 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
7170: 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67   case, OP_String
7180: 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f   */.}.  ./* Opco
7190: 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50 32  de: String P1 P2
71a0: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   * P4 *.**.** Th
71b0: 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50  e string value P
71c0: 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28  4 of length P1 (
71d0: 62 79 74 65 73 29 20 69 73 20 73 74 6f 72 65 64  bytes) is stored
71e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
71f0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69  .*/.case OP_Stri
7200: 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  ng: {          /
7210: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
7220: 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
7230: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
7240: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
7250: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69  EM_Str|MEM_Stati
7260: 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  c|MEM_Term;.  pO
7270: 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e  ut->z = pOp->p4.
7280: 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70  z;.  pOut->n = p
7290: 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e  Op->p1;.  pOut->
72a0: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
72b0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
72c0: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
72d0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
72e0: 64 65 3a 20 4e 75 6c 6c 20 2a 20 50 32 20 2a 20  de: Null * P2 * 
72f0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
7300: 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69  a NULL into regi
7310: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
7320: 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20   OP_Null: {     
7330: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
7340: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 62 72  erelease */.  br
7350: 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
7360: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f   SQLITE_OMIT_BLO
7370: 42 5f 4c 49 54 45 52 41 4c 0a 2f 2a 20 4f 70 63  B_LITERAL./* Opc
7380: 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20  ode: Blob P1 P2 
7390: 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f  * P4.**.** P4 po
73a0: 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f  ints to a blob o
73b0: 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20  f data P1 bytes 
73c0: 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69  long.  Store thi
73d0: 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67  s.** blob in reg
73e0: 69 73 74 65 72 20 50 32 2e 20 54 68 69 73 20 69  ister P2. This i
73f0: 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6e 6f  nstruction is no
7400: 74 20 63 6f 64 65 64 20 64 69 72 65 63 74 6c 79  t coded directly
7410: 0a 2a 2a 20 62 79 20 74 68 65 20 63 6f 6d 70 69  .** by the compi
7420: 6c 65 72 2e 20 49 6e 73 74 65 61 64 2c 20 74 68  ler. Instead, th
7430: 65 20 63 6f 6d 70 69 6c 65 72 20 6c 61 79 65 72  e compiler layer
7440: 20 73 70 65 63 69 66 69 65 73 0a 2a 2a 20 61 6e   specifies.** an
7450: 20 4f 50 5f 48 65 78 42 6c 6f 62 20 6f 70 63 6f   OP_HexBlob opco
7460: 64 65 2c 20 77 69 74 68 20 74 68 65 20 68 65 78  de, with the hex
7470: 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e   string represen
7480: 74 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  tation of.** the
7490: 20 62 6c 6f 62 20 61 73 20 50 34 2e 20 54 68 69   blob as P4. Thi
74a0: 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e  s opcode is tran
74b0: 73 66 6f 72 6d 65 64 20 74 6f 20 61 6e 20 4f 50  sformed to an OP
74c0: 5f 42 6c 6f 62 0a 2a 2a 20 74 68 65 20 66 69 72  _Blob.** the fir
74d0: 73 74 20 74 69 6d 65 20 69 74 20 69 73 20 65 78  st time it is ex
74e0: 65 63 75 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  ecuted..*/.case 
74f0: 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20  OP_Blob: {      
7500: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
7510: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7520: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7530: 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f  1 <= SQLITE_MAX_
7540: 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c 69  LENGTH );.  sqli
7550: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
7560: 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a  (pOut, pOp->p4.z
7570: 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29  , pOp->p1, 0, 0)
7580: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
7590: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
75a0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
75b0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
75c0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
75d0: 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54  TE_OMIT_BLOB_LIT
75e0: 45 52 41 4c 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  ERAL */../* Opco
75f0: 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20  de: Variable P1 
7600: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
7610: 68 65 20 76 61 6c 75 65 20 6f 66 20 76 61 72 69  he value of vari
7620: 61 62 6c 65 20 50 31 20 69 73 20 77 72 69 74 74  able P1 is writt
7630: 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  en into register
7640: 20 50 32 2e 20 41 20 76 61 72 69 61 62 6c 65 20   P2. A variable 
7650: 69 73 0a 2a 2a 20 61 6e 20 75 6e 6b 6e 6f 77 6e  is.** an unknown
7660: 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
7670: 20 53 51 4c 20 73 74 72 69 6e 67 20 61 73 20 68   SQL string as h
7680: 61 6e 64 65 64 20 74 6f 20 73 71 6c 69 74 65 33  anded to sqlite3
7690: 5f 63 6f 6d 70 69 6c 65 28 29 2e 0a 2a 2a 20 41  _compile()..** A
76a0: 6e 79 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66  ny occurrence of
76b0: 20 74 68 65 20 27 3f 27 20 63 68 61 72 61 63 74   the '?' charact
76c0: 65 72 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e  er in the origin
76d0: 61 6c 20 53 51 4c 20 69 73 20 63 6f 6e 73 69 64  al SQL is consid
76e0: 65 72 65 64 0a 2a 2a 20 61 20 76 61 72 69 61 62  ered.** a variab
76f0: 6c 65 2e 20 20 56 61 72 69 61 62 6c 65 73 20 69  le.  Variables i
7700: 6e 20 74 68 65 20 53 51 4c 20 73 74 72 69 6e 67  n the SQL string
7710: 20 61 72 65 20 6e 75 6d 62 65 72 20 66 72 6f 6d   are number from
7720: 20 6c 65 66 74 20 74 6f 0a 2a 2a 20 72 69 67 68   left to.** righ
7730: 74 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  t beginning with
7740: 20 31 2e 20 20 54 68 65 20 76 61 6c 75 65 73 20   1.  The values 
7750: 6f 66 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  of variables are
7760: 20 73 65 74 20 75 73 69 6e 67 20 74 68 65 0a 2a   set using the.*
7770: 2a 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29  * sqlite3_bind()
7780: 20 41 50 49 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   API..*/.case OP
7790: 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20  _Variable: {    
77a0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
77b0: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
77c0: 6e 74 20 6a 20 3d 20 70 4f 70 2d 3e 70 31 20 2d  nt j = pOp->p1 -
77d0: 20 31 3b 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b   1;.  Mem *pVar;
77e0: 0a 20 20 61 73 73 65 72 74 28 20 6a 3e 3d 30 20  .  assert( j>=0 
77f0: 26 26 20 6a 3c 70 2d 3e 6e 56 61 72 20 29 3b 0a  && j<p->nVar );.
7800: 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56  .  pVar = &p->aV
7810: 61 72 5b 6a 5d 3b 0a 20 20 69 66 28 20 73 71 6c  ar[j];.  if( sql
7820: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
7830: 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67  g(pVar) ){.    g
7840: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
7850: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
7860: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
7870: 74 2c 20 26 70 2d 3e 61 56 61 72 5b 6a 5d 2c 20  t, &p->aVar[j], 
7880: 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 55  MEM_Static);.  U
7890: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
78a0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
78b0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
78c0: 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a   Move P1 P2 P3 *
78d0: 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68   *.**.** Move th
78e0: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
78f0: 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31  ster P1..P1+P3-1
7900: 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65   over into.** re
7910: 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50  gisters P2..P2+P
7920: 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73 20  3-1.  Registers 
7930: 50 31 2e 2e 50 31 2b 50 31 2d 31 20 61 72 65 0a  P1..P1+P1-1 are.
7940: 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20  ** left holding 
7950: 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61  a NULL.  It is a
7960: 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69  n error for regi
7970: 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50  ster ranges.** P
7980: 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50  1..P1+P3-1 and P
7990: 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76  2..P2+P3-1 to ov
79a0: 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  erlap..*/.case O
79b0: 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63 68 61 72  P_Move: {.  char
79c0: 20 2a 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 69 6e 74   *zMalloc;.  int
79d0: 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
79e0: 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  int p1 = pOp->p1
79f0: 3b 0a 20 20 69 6e 74 20 70 32 20 3d 20 70 4f 70  ;.  int p2 = pOp
7a00: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
7a10: 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  n>0 );.  assert(
7a20: 20 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72   p1>0 );.  asser
7a30: 74 28 20 70 31 2b 6e 3c 70 2d 3e 6e 4d 65 6d 20  t( p1+n<p->nMem 
7a40: 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e  );.  pIn1 = &p->
7a50: 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 61 73 73 65  aMem[p1];.  asse
7a60: 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 61 73  rt( p2>0 );.  as
7a70: 73 65 72 74 28 20 70 32 2b 6e 3c 70 2d 3e 6e 4d  sert( p2+n<p->nM
7a80: 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  em );.  pOut = &
7a90: 70 2d 3e 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 61  p->aMem[p2];.  a
7aa0: 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20  ssert( p1+n<=p2 
7ab0: 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 20  || p2+n<=p1 );. 
7ac0: 20 77 68 69 6c 65 28 20 6e 2d 2d 20 29 7b 0a 20   while( n-- ){. 
7ad0: 20 20 20 7a 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75     zMalloc = pOu
7ae0: 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20  t->zMalloc;.    
7af0: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  pOut->zMalloc = 
7b00: 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  0;.    sqlite3Vd
7b10: 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20  beMemMove(pOut, 
7b20: 70 49 6e 31 29 3b 0a 20 20 20 20 70 49 6e 31 2d  pIn1);.    pIn1-
7b30: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c  >zMalloc = zMall
7b40: 6f 63 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  oc;.    REGISTER
7b50: 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75  _TRACE(p2++, pOu
7b60: 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a  t);.    pIn1++;.
7b70: 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 0a      pOut++;.  }.
7b80: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7b90: 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50  pcode: Copy P1 P
7ba0: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61  2 * * *.**.** Ma
7bb0: 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67  ke a copy of reg
7bc0: 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  ister P1 into re
7bd0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
7be0: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
7bf0: 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63  n makes a deep c
7c00: 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65  opy of the value
7c10: 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a  .  A duplicate.*
7c20: 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79  * is made of any
7c30: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
7c40: 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61  constant.  See a
7c50: 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f  lso OP_SCopy..*/
7c60: 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b  .case OP_Copy: {
7c70: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7c80: 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p1>0 );.  assert
7c90: 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d  ( pOp->p1<=p->nM
7ca0: 65 6d 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  em );.  pIn1 = &
7cb0: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  p->aMem[pOp->p1]
7cc0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
7cd0: 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p2>0 );.  asser
7ce0: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e  t( pOp->p2<=p->n
7cf0: 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  Mem );.  pOut = 
7d00: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
7d10: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  ];.  assert( pOu
7d20: 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c  t!=pIn1 );.  sql
7d30: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
7d40: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
7d50: 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  1, MEM_Ephem);. 
7d60: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
7d70: 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45  pOut);.  REGISTE
7d80: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
7d90: 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b   pOut);.  break;
7da0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
7db0: 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  Copy P1 P2 * * *
7dc0: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68  .**.** Make a sh
7dd0: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65  allow copy of re
7de0: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
7df0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
7e00: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
7e10: 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c  on makes a shall
7e20: 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ow copy of the v
7e30: 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61  alue.  If the va
7e40: 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69  lue.** is a stri
7e50: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e  ng or blob, then
7e60: 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c   the copy is onl
7e70: 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  y a pointer to t
7e80: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61  he.** original a
7e90: 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20  nd hence if the 
7ea0: 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73  original changes
7eb0: 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70   so will the cop
7ec0: 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20  y..** Worse, if 
7ed0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20  the original is 
7ee0: 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  deallocated, the
7ef0: 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e   copy becomes in
7f00: 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74  valid..** Thus t
7f10: 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20  he program must 
7f20: 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74  guarantee that t
7f30: 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c  he original will
7f40: 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64   not change.** d
7f50: 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69  uring the lifeti
7f60: 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20  me of the copy. 
7f70: 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20   Use OP_Copy to 
7f80: 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a  make a complete.
7f90: 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  ** copy..*/.case
7fa0: 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 0a 20 20 61   OP_SCopy: {.  a
7fb0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
7fc0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
7fd0: 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p1<=p->nMem )
7fe0: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61  ;.  pIn1 = &p->a
7ff0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
8000: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
8010: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20  Op->p1, pIn1);. 
8020: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
8030: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
8040: 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p2<=p->nMem
8050: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d   );.  pOut = &p-
8060: 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  >aMem[pOp->p2];.
8070: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d    assert( pOut!=
8080: 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65  pIn1 );.  sqlite
8090: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
80a0: 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20  opy(pOut, pIn1, 
80b0: 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 52 45  MEM_Ephem);.  RE
80c0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
80d0: 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62  ->p2, pOut);.  b
80e0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
80f0: 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31  de: ResultRow P1
8100: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
8110: 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31  The registers P1
8120: 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31   through P1+P2-1
8130: 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c   contain a singl
8140: 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75  e row of.** resu
8150: 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  lts. This opcode
8160: 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69   causes the sqli
8170: 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20  te3_step() call 
8180: 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20  to terminate.** 
8190: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52  with an SQLITE_R
81a0: 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61  OW return code a
81b0: 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68  nd it sets up th
81c0: 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a  e sqlite3_stmt.*
81d0: 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70  * structure to p
81e0: 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f  rovide access to
81f0: 20 74 68 65 20 74 6f 70 20 50 31 20 76 61 6c 75   the top P1 valu
8200: 65 73 20 61 73 20 74 68 65 20 72 65 73 75 6c 74  es as the result
8210: 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65  .** row..*/.case
8220: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b   OP_ResultRow: {
8230: 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
8240: 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28  int i;.  assert(
8250: 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d   p->nResColumn==
8260: 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73  pOp->p2 );.  ass
8270: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29  ert( pOp->p1>0 )
8280: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
8290: 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e  >p1+pOp->p2<=p->
82a0: 6e 4d 65 6d 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e  nMem );..  /* In
82b0: 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68  validate all eph
82c0: 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f  emeral cursor ro
82d0: 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d  w caches */.  p-
82e0: 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e  >cacheCtr = (p->
82f0: 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b  cacheCtr + 2)|1;
8300: 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
8310: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
8320: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
8330: 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61  are \000 termina
8340: 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76  ted.  ** and hav
8350: 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79  e an assigned ty
8360: 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73  pe.  The results
8370: 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61   are de-ephemera
8380: 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 73  lized as.  ** as
8390: 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20   side effect..  
83a0: 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70  */.  pMem = p->p
83b0: 52 65 73 75 6c 74 53 65 74 20 3d 20 26 70 2d 3e  ResultSet = &p->
83c0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
83d0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d   for(i=0; i<pOp-
83e0: 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73  >p2; i++){.    s
83f0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c  qlite3VdbeMemNul
8400: 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b  Terminate(&pMem[
8410: 69 5d 29 3b 0a 20 20 20 20 73 74 6f 72 65 54 79  i]);.    storeTy
8420: 70 65 49 6e 66 6f 28 26 70 4d 65 6d 5b 69 5d 2c  peInfo(&pMem[i],
8430: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
8440: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
8450: 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b  Op->p1+i, &pMem[
8460: 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64  i]);.  }.  if( d
8470: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
8480: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a  ) goto no_mem;..
8490: 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49    /* Return SQLI
84a0: 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d  TE_ROW.  */.  p-
84b0: 3e 6e 43 61 6c 6c 62 61 63 6b 2b 2b 3b 0a 20 20  >nCallback++;.  
84c0: 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a  p->pc = pc + 1;.
84d0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f    rc = SQLITE_RO
84e0: 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72  W;.  goto vdbe_r
84f0: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
8500: 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50  ode: Concat P1 P
8510: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  2 P3 * *.**.** A
8520: 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72  dd the text in r
8530: 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20  egister P1 onto 
8540: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74  the end of the t
8550: 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ext in.** regist
8560: 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20  er P2 and store 
8570: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
8580: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
8590: 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f   either the P1 o
85a0: 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55  r P2 text are NU
85b0: 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55  LL then store NU
85c0: 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  LL in P3..**.** 
85d0: 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a    P3 = P2 || P1.
85e0: 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
85f0: 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50  gal for P1 and P
8600: 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65  3 to be the same
8610: 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74   register. Somet
8620: 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69  imes,.** if P3 i
8630: 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  s the same regis
8640: 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69  ter as P2, the i
8650: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73  mplementation is
8660: 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   able.** to avoi
8670: 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f  d a memcpy()..*/
8680: 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a  .case OP_Concat:
8690: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
86a0: 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41  same as TK_CONCA
86b0: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
86c0: 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  3 */.  i64 nByte
86d0: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ;..  assert( pIn
86e0: 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28  1!=pOut );.  if(
86f0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
8700: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
8710: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
8720: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
8730: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
8740: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 45 78 70  break;.  }.  Exp
8750: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
8760: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c   Stringify(pIn1,
8770: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 45 78   encoding);.  Ex
8780: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a  pandBlob(pIn2);.
8790: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32    Stringify(pIn2
87a0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e  , encoding);.  n
87b0: 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b  Byte = pIn1->n +
87c0: 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20   pIn2->n;.  if( 
87d0: 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  nByte>db->aLimit
87e0: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
87f0: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
8800: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
8810: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
8820: 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a  pOut, MEM_Str);.
8830: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
8840: 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e  eMemGrow(pOut, n
8850: 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49  Byte+2, pOut==pI
8860: 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  n2) ){.    goto 
8870: 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 69 66  no_mem;.  }.  if
8880: 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a  ( pOut!=pIn2 ){.
8890: 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d      memcpy(pOut-
88a0: 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e  >z, pIn2->z, pIn
88b0: 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d  2->n);.  }.  mem
88c0: 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e  cpy(&pOut->z[pIn
88d0: 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20  2->n], pIn1->z, 
88e0: 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74  pIn1->n);.  pOut
88f0: 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20 30 3b 0a  ->z[nByte] = 0;.
8900: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b    pOut->z[nByte+
8910: 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e  1] = 0;.  pOut->
8920: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72  flags |= MEM_Ter
8930: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e  m;.  pOut->n = n
8940: 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  Byte;.  pOut->en
8950: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
8960: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
8970: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
8980: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8990: 3a 20 41 64 64 20 50 31 20 50 32 20 50 33 20 2a  : Add P1 P2 P3 *
89a0: 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65   *.**.** Add the
89b0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
89c0: 65 72 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c  er P1 to the val
89d0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
89e0: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
89f0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
8a00: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
8a10: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
8a20: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
8a30: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
8a40: 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79  Opcode: Multiply
8a50: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
8a60: 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20  .**.** Multiply 
8a70: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
8a80: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
8a90: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
8aa0: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
8ab0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
8ac0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
8ad0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
8ae0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
8af0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
8b00: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72  /* Opcode: Subtr
8b10: 61 63 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  act P1 P2 P3 * *
8b20: 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20  .**.** Subtract 
8b30: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
8b40: 69 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68  ister P1 from th
8b50: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
8b60: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
8b70: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
8b80: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
8b90: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
8ba0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
8bb0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
8bc0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76  /./* Opcode: Div
8bd0: 69 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ide P1 P2 P3 * *
8be0: 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68  .**.** Divide th
8bf0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
8c00: 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61  ter P1 by the va
8c10: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
8c20: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
8c30: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
8c40: 67 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 74  gister P3.  If t
8c50: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
8c60: 73 74 65 72 20 50 32 0a 2a 2a 20 69 73 20 7a 65  ster P2.** is ze
8c70: 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ro, then the res
8c80: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20  ult is NULL..** 
8c90: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
8ca0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
8cb0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
8cc0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69  /* Opcode: Remai
8cd0: 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a 20  nder P1 P2 P3 * 
8ce0: 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20  *.**.** Compute 
8cf0: 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66  the remainder af
8d00: 74 65 72 20 69 6e 74 65 67 65 72 20 64 69 76 69  ter integer divi
8d10: 73 69 6f 6e 20 6f 66 20 74 68 65 20 76 61 6c 75  sion of the valu
8d20: 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  e in.** register
8d30: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
8d40: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
8d50: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
8d60: 73 75 6c 74 20 69 6e 20 50 33 2e 20 0a 2a 2a 20  sult in P3. .** 
8d70: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
8d80: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20 7a  register P2 is z
8d90: 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69  ero the result i
8da0: 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69  s NULL..** If ei
8db0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
8dc0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
8dd0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
8de0: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
8df0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
8e00: 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20  ame as TK_PLUS, 
8e10: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
8e20: 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61  /.case OP_Subtra
8e30: 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ct:             
8e40: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d   /* same as TK_M
8e50: 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  INUS, in1, in2, 
8e60: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
8e70: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20  Multiply:       
8e80: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
8e90: 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20  s TK_STAR, in1, 
8ea0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
8eb0: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20  e OP_Divide:    
8ec0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
8ed0: 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c  ame as TK_SLASH,
8ee0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
8ef0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69  */.case OP_Remai
8f00: 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20  nder: {         
8f10: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
8f20: 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  REM, in1, in2, o
8f30: 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61  ut3 */.  int fla
8f40: 67 73 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72  gs;.  applyNumer
8f50: 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31 29  icAffinity(pIn1)
8f60: 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  ;.  applyNumeric
8f70: 41 66 66 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a  Affinity(pIn2);.
8f80: 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e    flags = pIn1->
8f90: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
8fa0: 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67  ags;.  if( (flag
8fb0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
8fc0: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
8fd0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
8fe0: 6c 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  l;.  if( (pIn1->
8ff0: 66 6c 61 67 73 20 26 20 70 49 6e 32 2d 3e 66 6c  flags & pIn2->fl
9000: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
9010: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 69  MEM_Int ){.    i
9020: 36 34 20 61 2c 20 62 3b 0a 20 20 20 20 61 20 3d  64 a, b;.    a =
9030: 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn1->u.i;.    
9040: 62 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  b = pIn2->u.i;. 
9050: 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e     switch( pOp->
9060: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20  opcode ){.      
9070: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
9080: 20 20 20 20 20 62 20 2b 3d 20 61 3b 20 20 20 20       b += a;    
9090: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
90a0: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
90b0: 3a 20 20 20 20 62 20 2d 3d 20 61 3b 20 20 20 20  :    b -= a;    
90c0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
90d0: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
90e0: 3a 20 20 20 20 62 20 2a 3d 20 61 3b 20 20 20 20  :    b *= a;    
90f0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
9100: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
9110: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 3d  {.        if( a=
9120: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
9130: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
9140: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20  ull;.        /* 
9150: 44 69 76 69 64 69 6e 67 20 74 68 65 20 6c 61 72  Dividing the lar
9160: 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 6e 65  gest possible ne
9170: 67 61 74 69 76 65 20 36 34 2d 62 69 74 20 69 6e  gative 64-bit in
9180: 74 65 67 65 72 20 28 31 3c 3c 36 33 29 20 62 79  teger (1<<63) by
9190: 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 2d 31 20   .        ** -1 
91a0: 72 65 74 75 72 6e 73 20 61 6e 20 69 6e 74 65 67  returns an integ
91b0: 65 72 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20  er too large to 
91c0: 73 74 6f 72 65 20 69 6e 20 61 20 36 34 2d 62 69  store in a 64-bi
91d0: 74 20 64 61 74 61 2d 74 79 70 65 2e 20 4f 6e 0a  t data-type. On.
91e0: 20 20 20 20 20 20 20 20 2a 2a 20 73 6f 6d 65 20          ** some 
91f0: 61 72 63 68 69 74 65 63 74 75 72 65 73 2c 20 74  architectures, t
9200: 68 65 20 76 61 6c 75 65 20 6f 76 65 72 66 6c 6f  he value overflo
9210: 77 73 20 74 6f 20 28 31 3c 3c 36 33 29 2e 20 4f  ws to (1<<63). O
9220: 6e 20 6f 74 68 65 72 73 2c 0a 20 20 20 20 20 20  n others,.      
9230: 20 20 2a 2a 20 61 20 53 49 47 46 50 45 20 69 73    ** a SIGFPE is
9240: 20 69 73 73 75 65 64 2e 20 54 68 65 20 66 6f 6c   issued. The fol
9250: 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  lowing statement
9260: 20 6e 6f 72 6d 61 6c 69 7a 65 73 20 74 68 69 73   normalizes this
9270: 0a 20 20 20 20 20 20 20 20 2a 2a 20 62 65 68 61  .        ** beha
9280: 76 69 6f 72 20 73 6f 20 74 68 61 74 20 61 6c 6c  vior so that all
9290: 20 61 72 63 68 69 74 65 63 74 75 72 65 73 20 62   architectures b
92a0: 65 68 61 76 65 20 61 73 20 69 66 20 69 6e 74 65  ehave as if inte
92b0: 67 65 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20  ger .        ** 
92c0: 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72 72 65  overflow occurre
92d0: 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  d..        */.  
92e0: 20 20 20 20 20 20 69 66 28 20 61 3d 3d 2d 31 20        if( a==-1 
92f0: 26 26 20 62 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49  && b==SMALLEST_I
9300: 4e 54 36 34 20 29 20 61 20 3d 20 31 3b 0a 20 20  NT64 ) a = 1;.  
9310: 20 20 20 20 20 20 62 20 2f 3d 20 61 3b 0a 20 20        b /= a;.  
9320: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9330: 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75     }.      defau
9340: 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66  lt: {.        if
9350: 28 20 61 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72  ( a==0 ) goto ar
9360: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
9370: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
9380: 20 69 66 28 20 61 3d 3d 2d 31 20 29 20 61 20 3d   if( a==-1 ) a =
9390: 20 31 3b 0a 20 20 20 20 20 20 20 20 62 20 25 3d   1;.        b %=
93a0: 20 61 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   a;.        brea
93b0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
93c0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
93d0: 20 62 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79   b;.    MemSetTy
93e0: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
93f0: 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  _Int);.  }else{.
9400: 20 20 20 20 64 6f 75 62 6c 65 20 61 2c 20 62 3b      double a, b;
9410: 0a 20 20 20 20 61 20 3d 20 73 71 6c 69 74 65 33  .    a = sqlite3
9420: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
9430: 6e 31 29 3b 0a 20 20 20 20 62 20 3d 20 73 71 6c  n1);.    b = sql
9440: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
9450: 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69  e(pIn2);.    swi
9460: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
9470: 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f   ){.      case O
9480: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 62  P_Add:         b
9490: 20 2b 3d 20 61 3b 20 20 20 20 20 20 20 62 72 65   += a;       bre
94a0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
94b0: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 62  P_Subtract:    b
94c0: 20 2d 3d 20 61 3b 20 20 20 20 20 20 20 62 72 65   -= a;       bre
94d0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
94e0: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 62  P_Multiply:    b
94f0: 20 2a 3d 20 61 3b 20 20 20 20 20 20 20 62 72 65   *= a;       bre
9500: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
9510: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
9520: 20 20 20 20 69 66 28 20 61 3d 3d 30 2e 30 20 29      if( a==0.0 )
9530: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
9540: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
9550: 0a 20 20 20 20 20 20 20 20 62 20 2f 3d 20 61 3b  .        b /= a;
9560: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
9570: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
9580: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
9590: 20 69 36 34 20 69 61 20 3d 20 28 69 36 34 29 61   i64 ia = (i64)a
95a0: 3b 0a 20 20 20 20 20 20 20 20 69 36 34 20 69 62  ;.        i64 ib
95b0: 20 3d 20 28 69 36 34 29 62 3b 0a 20 20 20 20 20   = (i64)b;.     
95c0: 20 20 20 69 66 28 20 69 61 3d 3d 30 20 29 20 67     if( ia==0 ) g
95d0: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
95e0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
95f0: 20 20 20 20 20 20 20 69 66 28 20 69 61 3d 3d 2d         if( ia==-
9600: 31 20 29 20 69 61 20 3d 20 31 3b 0a 20 20 20 20  1 ) ia = 1;.    
9610: 20 20 20 20 62 20 3d 20 69 62 20 25 20 69 61 3b      b = ib % ia;
9620: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
9630: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
9640: 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e    if( sqlite3IsN
9650: 61 4e 28 62 29 20 29 7b 0a 20 20 20 20 20 20 67  aN(b) ){.      g
9660: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
9670: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
9680: 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 72     }.    pOut->r
9690: 20 3d 20 62 3b 0a 20 20 20 20 4d 65 6d 53 65 74   = b;.    MemSet
96a0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
96b0: 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66  EM_Real);.    if
96c0: 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  ( (flags & MEM_R
96d0: 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
96e0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65   sqlite3VdbeInte
96f0: 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74  gerAffinity(pOut
9700: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
9710: 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69  reak;..arithmeti
9720: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
9730: 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  :.  sqlite3VdbeM
9740: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
9750: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9760: 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20  Opcode: CollSeq 
9770: 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  * * P4.**.** P4 
9780: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
9790: 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74  a CollSeq struct
97a0: 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61  . If the next ca
97b0: 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e  ll to a user fun
97c0: 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72  ction.** or aggr
97d0: 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69  egate calls sqli
97e0: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
97f0: 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74  q(), this collat
9800: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c  ion sequence wil
9810: 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64  l.** be returned
9820: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
9830: 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d  y the built-in m
9840: 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20  in(), max() and 
9850: 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63  nullif().** func
9860: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  tions..**.** The
9870: 20 69 6e 74 65 72 66 61 63 65 20 75 73 65 64 20   interface used 
9880: 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  by the implement
9890: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f  ation of the afo
98a0: 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63  rementioned func
98b0: 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72  tions.** to retr
98c0: 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69  ieve the collati
98d0: 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74 20  on sequence set 
98e0: 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  by this opcode i
98f0: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a  s not available.
9900: 2a 2a 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c  ** publicly, onl
9910: 79 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69  y to user functi
9920: 6f 6e 73 20 64 65 66 69 6e 65 64 20 69 6e 20 66  ons defined in f
9930: 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f  unc.c..*/.case O
9940: 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61  P_CollSeq: {.  a
9950: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
9960: 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29  pe==P4_COLLSEQ )
9970: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
9980: 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f   Opcode: Functio
9990: 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
99a0: 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20  .**.** Invoke a 
99b0: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50  user function (P
99c0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
99d0: 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72  o a Function str
99e0: 75 63 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64  ucture that.** d
99f0: 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74  efines the funct
9a00: 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72 67  ion) with P5 arg
9a10: 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f  uments taken fro
9a20: 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
9a30: 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  d.** successors.
9a40: 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20    The result of 
9a50: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  the function is 
9a60: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
9a70: 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74  er P3..** Regist
9a80: 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62  er P3 must not b
9a90: 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e  e one of the fun
9aa0: 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a  ction inputs..**
9ab0: 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62  .** P1 is a 32-b
9ac0: 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63  it bitmask indic
9ad0: 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
9ae0: 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65   not each argume
9af0: 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75  nt to the .** fu
9b00: 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72  nction was deter
9b10: 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73  mined to be cons
9b20: 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20  tant at compile 
9b30: 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72  time. If the fir
9b40: 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77  st.** argument w
9b50: 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e  as constant then
9b60: 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20   bit 0 of P1 is 
9b70: 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65  set. This is use
9b80: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a  d to determine.*
9b90: 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64  * whether meta d
9ba0: 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77  ata associated w
9bb0: 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74  ith a user funct
9bc0: 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69  ion argument usi
9bd0: 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  ng the.** sqlite
9be0: 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20  3_set_auxdata() 
9bf0: 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c  API may be safel
9c00: 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c  y retained until
9c10: 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76   the next.** inv
9c20: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  ocation of this 
9c30: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
9c40: 65 20 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20  e also: AggStep 
9c50: 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a  and AggFinal.*/.
9c60: 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  case OP_Function
9c70: 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d  : {.  int i;.  M
9c80: 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69  em *pArg;.  sqli
9c90: 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b  te3_context ctx;
9ca0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
9cb0: 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20   **apVal;.  int 
9cc0: 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 0a 20 20  n = pOp->p5;..  
9cd0: 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67  apVal = p->apArg
9ce0: 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56 61  ;.  assert( apVa
9cf0: 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 0a 20 20  l || n==0 );..  
9d00: 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20  assert( n==0 || 
9d10: 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f  (pOp->p2>0 && pO
9d20: 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d  p->p2+n<=p->nMem
9d30: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
9d40: 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c  Op->p3<pOp->p2 |
9d50: 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
9d60: 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67 20 3d  p2+n );.  pArg =
9d70: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
9d80: 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  2];.  for(i=0; i
9d90: 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29  <n; i++, pArg++)
9da0: 7b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d  {.    apVal[i] =
9db0: 20 70 41 72 67 3b 0a 20 20 20 20 73 74 6f 72 65   pArg;.    store
9dc0: 54 79 70 65 49 6e 66 6f 28 70 41 72 67 2c 20 65  TypeInfo(pArg, e
9dd0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 52 45  ncoding);.    RE
9de0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
9df0: 2d 3e 70 32 2c 20 70 41 72 67 29 3b 0a 20 20 7d  ->p2, pArg);.  }
9e00: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
9e10: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43  >p4type==P4_FUNC
9e20: 44 45 46 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79  DEF || pOp->p4ty
9e30: 70 65 3d 3d 50 34 5f 56 44 42 45 46 55 4e 43 20  pe==P4_VDBEFUNC 
9e40: 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  );.  if( pOp->p4
9e50: 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46  type==P4_FUNCDEF
9e60: 20 29 7b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e   ){.    ctx.pFun
9e70: 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
9e80: 63 3b 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65  c;.    ctx.pVdbe
9e90: 46 75 6e 63 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  Func = 0;.  }els
9ea0: 65 7b 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65  e{.    ctx.pVdbe
9eb0: 46 75 6e 63 20 3d 20 28 56 64 62 65 46 75 6e 63  Func = (VdbeFunc
9ec0: 2a 29 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46  *)pOp->p4.pVdbeF
9ed0: 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 46 75  unc;.    ctx.pFu
9ee0: 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75  nc = ctx.pVdbeFu
9ef0: 6e 63 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a  nc->pFunc;.  }..
9f00: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
9f10: 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
9f20: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75  p->nMem );.  pOu
9f30: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
9f40: 2d 3e 70 33 5d 3b 0a 20 20 63 74 78 2e 73 2e 66  ->p3];.  ctx.s.f
9f50: 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
9f60: 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64 62  .  ctx.s.db = db
9f70: 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d  ;.  ctx.s.xDel =
9f80: 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61 6c   0;.  ctx.s.zMal
9f90: 6c 6f 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54  loc = 0;..  /* T
9fa0: 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d  he output cell m
9fb0: 61 79 20 61 6c 72 65 61 64 79 20 68 61 76 65 20  ay already have 
9fc0: 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74  a buffer allocat
9fd0: 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68  ed. Move.  ** th
9fe0: 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 63 74 78  e pointer to ctx
9ff0: 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74 68  .s so in case th
a000: 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20  e user-function 
a010: 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20 74 68 65  can use.  ** the
a020: 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74   already allocat
a030: 65 64 20 62 75 66 66 65 72 20 69 6e 73 74 65 61  ed buffer instea
a040: 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20  d of allocating 
a050: 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a  a new one..  */.
a060: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
a070: 4d 6f 76 65 28 26 63 74 78 2e 73 2c 20 70 4f 75  Move(&ctx.s, pOu
a080: 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  t);.  MemSetType
a090: 46 6c 61 67 28 26 63 74 78 2e 73 2c 20 4d 45 4d  Flag(&ctx.s, MEM
a0a0: 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74 78 2e 69  _Null);..  ctx.i
a0b0: 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 69 66  sError = 0;.  if
a0c0: 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 6e 65 65  ( ctx.pFunc->nee
a0d0: 64 43 6f 6c 6c 53 65 71 20 29 7b 0a 20 20 20 20  dCollSeq ){.    
a0e0: 61 73 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61  assert( pOp>p->a
a0f0: 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Op );.    assert
a100: 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65  ( pOp[-1].p4type
a110: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a  ==P4_COLLSEQ );.
a120: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
a130: 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  -1].opcode==OP_C
a140: 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74  ollSeq );.    ct
a150: 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31  x.pColl = pOp[-1
a160: 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a  ].p4.pColl;.  }.
a170: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
a180: 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
a190: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
a1a0: 69 73 75 73 65 3b 0a 20 20 28 2a 63 74 78 2e 70  isuse;.  (*ctx.p
a1b0: 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74  Func->xFunc)(&ct
a1c0: 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 0a 20 20  x, n, apVal);.  
a1d0: 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
a1e0: 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20 20 73  yOn(db) ){.    s
a1f0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
a200: 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20  ease(&ctx.s);.  
a210: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
a220: 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 7d 0a  _to_misuse;.  }.
a230: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
a240: 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 2f 2a  Failed ){.    /*
a250: 20 45 76 65 6e 20 74 68 6f 75 67 68 20 61 20 6d   Even though a m
a260: 61 6c 6c 6f 63 28 29 20 68 61 73 20 66 61 69 6c  alloc() has fail
a270: 65 64 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  ed, the implemen
a280: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20  tation of the.  
a290: 20 20 2a 2a 20 75 73 65 72 20 66 75 6e 63 74 69    ** user functi
a2a0: 6f 6e 20 6d 61 79 20 68 61 76 65 20 63 61 6c 6c  on may have call
a2b0: 65 64 20 61 6e 20 73 71 6c 69 74 65 33 5f 72 65  ed an sqlite3_re
a2c0: 73 75 6c 74 5f 58 58 58 28 29 20 66 75 6e 63 74  sult_XXX() funct
a2d0: 69 6f 6e 0a 20 20 20 20 2a 2a 20 74 6f 20 72 65  ion.    ** to re
a2e0: 74 75 72 6e 20 61 20 76 61 6c 75 65 2e 20 54 68  turn a value. Th
a2f0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
a300: 20 72 65 6c 65 61 73 65 73 20 61 6e 79 20 72 65   releases any re
a310: 73 6f 75 72 63 65 73 0a 20 20 20 20 2a 2a 20 61  sources.    ** a
a320: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 73  ssociated with s
a330: 75 63 68 20 61 20 76 61 6c 75 65 2e 0a 20 20 20  uch a value..   
a340: 20 2a 2a 0a 20 20 20 20 2a 2a 20 4e 6f 74 65 3a   **.    ** Note:
a350: 20 4d 61 79 62 65 20 4d 65 6d 52 65 6c 65 61 73   Maybe MemReleas
a360: 65 28 29 20 73 68 6f 75 6c 64 20 62 65 20 63 61  e() should be ca
a370: 6c 6c 65 64 20 69 66 20 73 71 6c 69 74 65 33 53  lled if sqlite3S
a380: 61 66 65 74 79 4f 6e 28 29 0a 20 20 20 20 2a 2a  afetyOn().    **
a390: 20 66 61 69 6c 73 20 61 6c 73 6f 20 28 74 68 65   fails also (the
a3a0: 20 69 66 28 2e 2e 2e 29 20 73 74 61 74 65 6d 65   if(...) stateme
a3b0: 6e 74 20 61 62 6f 76 65 29 2e 20 42 75 74 20 69  nt above). But i
a3c0: 66 20 70 65 6f 70 6c 65 20 61 72 65 0a 20 20 20  f people are.   
a3d0: 20 2a 2a 20 6d 69 73 75 73 69 6e 67 20 73 71 6c   ** misusing sql
a3e0: 69 74 65 2c 20 74 68 65 79 20 68 61 76 65 20 62  ite, they have b
a3f0: 69 67 67 65 72 20 70 72 6f 62 6c 65 6d 73 20 74  igger problems t
a400: 68 61 6e 20 61 20 6c 65 61 6b 65 64 20 76 61 6c  han a leaked val
a410: 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  ue..    */.    s
a420: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
a430: 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20  ease(&ctx.s);.  
a440: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
a450: 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20   }..  /* If any 
a460: 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 20 66  auxiliary data f
a470: 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 62 65  unctions have be
a480: 65 6e 20 63 61 6c 6c 65 64 20 62 79 20 74 68 69  en called by thi
a490: 73 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2c  s user function,
a4a0: 0a 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  .  ** immediatel
a4b0: 79 20 63 61 6c 6c 20 74 68 65 20 64 65 73 74 72  y call the destr
a4c0: 75 63 74 6f 72 20 66 6f 72 20 61 6e 79 20 6e 6f  uctor for any no
a4d0: 6e 2d 73 74 61 74 69 63 20 76 61 6c 75 65 73 2e  n-static values.
a4e0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e  .  */.  if( ctx.
a4f0: 70 56 64 62 65 46 75 6e 63 20 29 7b 0a 20 20 20  pVdbeFunc ){.   
a500: 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65   sqlite3VdbeDele
a510: 74 65 41 75 78 44 61 74 61 28 63 74 78 2e 70 56  teAuxData(ctx.pV
a520: 64 62 65 46 75 6e 63 2c 20 70 4f 70 2d 3e 70 31  dbeFunc, pOp->p1
a530: 29 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 70  );.    pOp->p4.p
a540: 56 64 62 65 46 75 6e 63 20 3d 20 63 74 78 2e 70  VdbeFunc = ctx.p
a550: 56 64 62 65 46 75 6e 63 3b 0a 20 20 20 20 70 4f  VdbeFunc;.    pO
a560: 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 56  p->p4type = P4_V
a570: 44 42 45 46 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20  DBEFUNC;.  }..  
a580: 2f 2a 20 49 66 20 74 68 65 20 66 75 6e 63 74 69  /* If the functi
a590: 6f 6e 20 72 65 74 75 72 6e 65 64 20 61 6e 20 65  on returned an e
a5a0: 72 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e 20 65  rror, throw an e
a5b0: 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66  xception */.  if
a5c0: 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b  ( ctx.isError ){
a5d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
a5e0: 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
a5f0: 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
a600: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
a610: 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72 63  &ctx.s));.    rc
a620: 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a   = ctx.isError;.
a630: 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74    }..  /* Copy t
a640: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
a650: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72   function into r
a660: 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 20 20  egister P3 */.  
a670: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
a680: 65 45 6e 63 6f 64 69 6e 67 28 26 63 74 78 2e 73  eEncoding(&ctx.s
a690: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73  , encoding);.  s
a6a0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
a6b0: 65 28 70 4f 75 74 2c 20 26 63 74 78 2e 73 29 3b  e(pOut, &ctx.s);
a6c0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
a6d0: 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4f 75 74  beMemTooBig(pOut
a6e0: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
a6f0: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 52 45 47  o_big;.  }.  REG
a700: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
a710: 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50  >p3, pOut);.  UP
a720: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
a730: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
a740: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
a750: 42 69 74 41 6e 64 20 50 31 20 50 32 20 50 33 20  BitAnd P1 P2 P3 
a760: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  * *.**.** Take t
a770: 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20  he bit-wise AND 
a780: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
a790: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
a7a0: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
a7b0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
a7c0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
a7d0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
a7e0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
a7f0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
a800: 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20  * Opcode: BitOr 
a810: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
a820: 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d  ** Take the bit-
a830: 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76  wise OR of the v
a840: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
a850: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
a860: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
a870: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
a880: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
a890: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
a8a0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
a8b0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
a8c0: 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31 20 50  : ShiftLeft P1 P
a8d0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  2 P3 * *.**.** S
a8e0: 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72  hift the integer
a8f0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
a900: 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65 66  er P2 to the lef
a910: 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  t by the.** numb
a920: 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69  er of bits speci
a930: 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65  fied by the inte
a940: 67 65 72 20 69 6e 20 72 65 67 69 73 65 72 20 50  ger in regiser P
a950: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
a960: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
a970: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
a980: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
a990: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
a9a0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
a9b0: 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68 74 20  ode: ShiftRight 
a9c0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
a9d0: 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74  ** Shift the int
a9e0: 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65  eger value in re
a9f0: 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65  gister P2 to the
aa00: 20 72 69 67 68 74 20 62 79 20 74 68 65 0a 2a 2a   right by the.**
aa10: 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
aa20: 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
aa30: 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69   integer in regi
aa40: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72  ster P1..** Stor
aa50: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
aa60: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
aa70: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
aa80: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
aa90: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
aaa0: 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20  case OP_BitAnd: 
aab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aac0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
aad0: 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  TAND, in1, in2, 
aae0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
aaf0: 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20 20 20  BitOr:          
ab00: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
ab10: 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31  as TK_BITOR, in1
ab20: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
ab30: 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74  ase OP_ShiftLeft
ab40: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
ab50: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48  * same as TK_LSH
ab60: 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  IFT, in1, in2, o
ab70: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
ab80: 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20 20 20  hiftRight: {    
ab90: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
aba0: 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31  s TK_RSHIFT, in1
abb0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
abc0: 20 69 36 34 20 61 2c 20 62 3b 0a 0a 20 20 69 66   i64 a, b;..  if
abd0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c  ( (pIn1->flags |
abe0: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20   pIn2->flags) & 
abf0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
ac00: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
ac10: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
ac20: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 61 20   break;.  }.  a 
ac30: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
ac40: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 62  Value(pIn2);.  b
ac50: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
ac60: 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  tValue(pIn1);.  
ac70: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
ac80: 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20  ode ){.    case 
ac90: 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20  OP_BitAnd:      
aca0: 61 20 26 3d 20 62 3b 20 20 20 20 20 62 72 65 61  a &= b;     brea
acb0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 42  k;.    case OP_B
acc0: 69 74 4f 72 3a 20 20 20 20 20 20 20 61 20 7c 3d  itOr:       a |=
acd0: 20 62 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20   b;     break;. 
ace0: 20 20 20 63 61 73 65 20 4f 50 5f 53 68 69 66 74     case OP_Shift
acf0: 4c 65 66 74 3a 20 20 20 61 20 3c 3c 3d 20 62 3b  Left:   a <<= b;
ad00: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
ad10: 65 66 61 75 6c 74 3a 20 20 61 73 73 65 72 74 28  efault:  assert(
ad20: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
ad30: 5f 53 68 69 66 74 52 69 67 68 74 20 29 3b 0a 20  _ShiftRight );. 
ad40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad50: 20 20 20 20 20 20 20 20 61 20 3e 3e 3d 20 62 3b          a >>= b;
ad60: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
ad70: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 61 3b 0a   pOut->u.i = a;.
ad80: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
ad90: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
ada0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
adb0: 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20  Opcode: AddImm  
adc0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
add0: 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74  ** Add the const
ade0: 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61  ant P2 to the va
adf0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ae00: 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  P1..** The resul
ae10: 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  t is always an i
ae20: 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f  nteger..**.** To
ae30: 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73   force any regis
ae40: 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  ter to be an int
ae50: 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30  eger, just add 0
ae60: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
ae70: 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Imm: {          
ae80: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 73 71    /* in1 */.  sq
ae90: 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
aea0: 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
aeb0: 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
aec0: 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ->p2;.  break;.}
aed0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 72  ../* Opcode: For
aee0: 63 65 49 6e 74 20 50 31 20 50 32 20 50 33 20 2a  ceInt P1 P2 P3 *
aef0: 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74   *.**.** Convert
af00: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
af10: 65 72 20 50 31 20 69 6e 74 6f 20 61 6e 20 69 6e  er P1 into an in
af20: 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 76  teger.  If the v
af30: 61 6c 75 65 20 0a 2a 2a 20 69 6e 20 50 31 20 69  alue .** in P1 i
af40: 73 20 6e 6f 74 20 6e 75 6d 65 72 69 63 20 28 6d  s not numeric (m
af50: 65 61 6e 69 6e 67 20 74 68 61 74 20 69 73 20 69  eaning that is i
af60: 73 20 61 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74  s a NULL or a st
af70: 72 69 6e 67 20 74 68 61 74 0a 2a 2a 20 64 6f 65  ring that.** doe
af80: 73 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20  s not look like 
af90: 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 66 6c  an integer or fl
afa0: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d  oating point num
afb0: 62 65 72 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d  ber) then.** jum
afc0: 70 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65  p to P2.  If the
afd0: 20 76 61 6c 75 65 20 69 6e 20 50 31 20 69 73 20   value in P1 is 
afe0: 6e 75 6d 65 72 69 63 20 74 68 65 6e 0a 2a 2a 20  numeric then.** 
aff0: 63 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20  convert it into 
b000: 74 68 65 20 6c 65 61 73 74 20 69 6e 74 65 67 65  the least intege
b010: 72 20 74 68 61 74 20 69 73 20 67 72 65 61 74 65  r that is greate
b020: 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
b030: 74 6f 20 69 74 73 0a 2a 2a 20 63 75 72 72 65 6e  to its.** curren
b040: 74 20 76 61 6c 75 65 20 69 66 20 50 33 3d 3d 30  t value if P3==0
b050: 2c 20 6f 72 20 74 6f 20 74 68 65 20 6c 65 61 73  , or to the leas
b060: 74 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 69  t integer that i
b070: 73 20 73 74 72 69 63 74 6c 79 0a 2a 2a 20 67 72  s strictly.** gr
b080: 65 61 74 65 72 20 74 68 61 6e 20 69 74 73 20 63  eater than its c
b090: 75 72 72 65 6e 74 20 76 61 6c 75 65 20 69 66 20  urrent value if 
b0a0: 50 33 3d 3d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  P3==1..*/.case O
b0b0: 50 5f 46 6f 72 63 65 49 6e 74 3a 20 7b 20 20 20  P_ForceInt: {   
b0c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
b0d0: 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 36 34 20 76  , in1 */.  i64 v
b0e0: 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74  ;.  applyAffinit
b0f0: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
b100: 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f  FF_NUMERIC, enco
b110: 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 28 70 49  ding);.  if( (pI
b120: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  n1->flags & (MEM
b130: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d  _Int|MEM_Real))=
b140: 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
b150: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
b160: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28  break;.  }.  if(
b170: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
b180: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 76 20  EM_Int ){.    v 
b190: 3d 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 20 28 70  = pIn1->u.i + (p
b1a0: 4f 70 2d 3e 70 33 21 3d 30 29 3b 0a 20 20 7d 65  Op->p3!=0);.  }e
b1b0: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
b1c0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
b1d0: 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 76  EM_Real );.    v
b1e0: 20 3d 20 28 73 71 6c 69 74 65 33 5f 69 6e 74 36   = (sqlite3_int6
b1f0: 34 29 70 49 6e 31 2d 3e 72 3b 0a 20 20 20 20 69  4)pIn1->r;.    i
b200: 66 28 20 70 49 6e 31 2d 3e 72 3e 28 64 6f 75 62  f( pIn1->r>(doub
b210: 6c 65 29 76 20 29 20 76 2b 2b 3b 0a 20 20 20 20  le)v ) v++;.    
b220: 69 66 28 20 70 4f 70 2d 3e 70 33 20 26 26 20 70  if( pOp->p3 && p
b230: 49 6e 31 2d 3e 72 3d 3d 28 64 6f 75 62 6c 65 29  In1->r==(double)
b240: 76 20 29 20 76 2b 2b 3b 0a 20 20 7d 0a 20 20 70  v ) v++;.  }.  p
b250: 49 6e 31 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  In1->u.i = v;.  
b260: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
b270: 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  In1, MEM_Int);. 
b280: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
b290: 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
b2a0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
b2b0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
b2c0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b2d0: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
b2e0: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
b2f0: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
b300: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
b310: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
b320: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
b330: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
b340: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
b350: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
b360: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
b370: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
b380: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
b390: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
b3a0: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
b3b0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
b3c0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
b3d0: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
b3e0: 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  n1, SQLITE_AFF_N
b3f0: 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67  UMERIC, encoding
b400: 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
b410: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
b420: 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70  ==0 ){.    if( p
b430: 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20  Op->p2==0 ){.   
b440: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d     rc = SQLITE_M
b450: 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 67  ISMATCH;.      g
b460: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
b470: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73  _error;.    }els
b480: 65 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  e{.      pc = pO
b490: 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d  p->p2 - 1;.    }
b4a0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 4d 65  .  }else{.    Me
b4b0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e  mSetTypeFlag(pIn
b4c0: 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  1, MEM_Int);.  }
b4d0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
b4e0: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69  Opcode: RealAffi
b4f0: 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  nity P1 * * * *.
b500: 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65  **.** If registe
b510: 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e  r P1 holds an in
b520: 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74  teger convert it
b530: 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65   to a real value
b540: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
b550: 6f 64 65 20 69 73 20 75 73 65 64 20 77 68 65 6e  ode is used when
b560: 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f   extracting info
b570: 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63  rmation from a c
b580: 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61  olumn that.** ha
b590: 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e  s REAL affinity.
b5a0: 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61    Such column va
b5b0: 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62  lues may still b
b5c0: 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69  e stored as.** i
b5d0: 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61  ntegers, for spa
b5e0: 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62  ce efficiency, b
b5f0: 75 74 20 61 66 74 65 72 20 65 78 74 72 61 63 74  ut after extract
b600: 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d  ion we want them
b610: 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79  .** to have only
b620: 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a   a real value..*
b630: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66  /.case OP_RealAf
b640: 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20  finity: {       
b650: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
b660: 31 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d  1 */.  if( pIn1-
b670: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
b680: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
b690: 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49  dbeMemRealify(pI
b6a0: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
b6b0: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
b6c0: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a  ITE_OMIT_CAST./*
b6d0: 20 4f 70 63 6f 64 65 3a 20 54 6f 54 65 78 74 20   Opcode: ToText 
b6e0: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
b6f0: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
b700: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b710: 74 6f 20 62 65 20 74 65 78 74 2e 0a 2a 2a 20 49  to be text..** I
b720: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 6e  f the value is n
b730: 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74 20  umeric, convert 
b740: 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 75  it to a string u
b750: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69  sing the.** equi
b760: 76 61 6c 65 6e 74 20 6f 66 20 70 72 69 6e 74 66  valent of printf
b770: 28 29 2e 20 20 42 6c 6f 62 20 76 61 6c 75 65 73  ().  Blob values
b780: 20 61 72 65 20 75 6e 63 68 61 6e 67 65 64 20 61   are unchanged a
b790: 6e 64 0a 2a 2a 20 61 72 65 20 61 66 74 65 72 77  nd.** are afterw
b7a0: 61 72 64 73 20 73 69 6d 70 6c 79 20 69 6e 74 65  ards simply inte
b7b0: 72 70 72 65 74 65 64 20 61 73 20 74 65 78 74 2e  rpreted as text.
b7c0: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
b7d0: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
b7e0: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
b7f0: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
b800: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
b810: 5f 54 6f 54 65 78 74 3a 20 7b 20 20 20 20 20 20  _ToText: {      
b820: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b830: 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 54 45 58  ame as TK_TO_TEX
b840: 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20  T, in1 */.  if( 
b850: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
b860: 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a  M_Null ) break;.
b870: 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f 53 74    assert( MEM_St
b880: 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29  r==(MEM_Blob>>3)
b890: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
b8a0: 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67  s |= (pIn1->flag
b8b0: 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a  s&MEM_Blob)>>3;.
b8c0: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
b8d0: 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46  pIn1, SQLITE_AFF
b8e0: 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29  _TEXT, encoding)
b8f0: 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42  ;.  rc = ExpandB
b900: 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61 73 73  lob(pIn1);.  ass
b910: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
b920: 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62   & MEM_Str || db
b930: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
b940: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
b950: 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  &= ~(MEM_Int|MEM
b960: 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 29 3b  _Real|MEM_Blob);
b970: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
b980: 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
b990: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
b9a0: 6f 64 65 3a 20 54 6f 42 6c 6f 62 20 50 31 20 2a  ode: ToBlob P1 *
b9b0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
b9c0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
b9d0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
b9e0: 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20 49 66 20  e a BLOB..** If 
b9f0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d  the value is num
ba00: 65 72 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74  eric, convert it
ba10: 20 74 6f 20 61 20 73 74 72 69 6e 67 20 66 69 72   to a string fir
ba20: 73 74 2e 0a 2a 2a 20 53 74 72 69 6e 67 73 20 61  st..** Strings a
ba30: 72 65 20 73 69 6d 70 6c 79 20 72 65 69 6e 74 65  re simply reinte
ba40: 72 70 72 65 74 65 64 20 61 73 20 62 6c 6f 62 73  rpreted as blobs
ba50: 20 77 69 74 68 20 6e 6f 20 63 68 61 6e 67 65 0a   with no change.
ba60: 2a 2a 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c  ** to the underl
ba70: 79 69 6e 67 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a  ying data..**.**
ba80: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
ba90: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
baa0: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
bab0: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
bac0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 42 6c 6f  */.case OP_ToBlo
bad0: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
bae0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
baf0: 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20 69 6e 31   TK_TO_BLOB, in1
bb00: 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e   */.  if( pIn1->
bb10: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
bb20: 20 29 20 62 72 65 61 6b 3b 0a 20 20 69 66 28 20   ) break;.  if( 
bb30: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
bb40: 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20  EM_Blob)==0 ){. 
bb50: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
bb60: 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn1, SQLITE_AF
bb70: 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67  F_TEXT, encoding
bb80: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
bb90: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
bba0: 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c  _Str || db->mall
bbb0: 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 7d 0a  ocFailed );.  }.
bbc0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
bbd0: 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29  (pIn1, MEM_Blob)
bbe0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
bbf0: 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20  LOBSIZE(pIn1);. 
bc00: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
bc10: 63 6f 64 65 3a 20 54 6f 4e 75 6d 65 72 69 63 20  code: ToNumeric 
bc20: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
bc30: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
bc40: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
bc50: 74 6f 20 62 65 20 6e 75 6d 65 72 69 63 20 28 65  to be numeric (e
bc60: 69 74 68 65 72 20 61 6e 0a 2a 2a 20 69 6e 74 65  ither an.** inte
bc70: 67 65 72 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e  ger or a floatin
bc80: 67 2d 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 29  g-point number.)
bc90: 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
bca0: 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62   is text or blob
bcb0: 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  , try to convert
bcc0: 20 69 74 20 74 6f 20 61 6e 20 75 73 69 6e 67 20   it to an using 
bcd0: 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e  the.** equivalen
bce0: 74 20 6f 66 20 61 74 6f 69 28 29 20 6f 72 20 61  t of atoi() or a
bcf0: 74 6f 66 28 29 20 61 6e 64 20 73 74 6f 72 65 20  tof() and store 
bd00: 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e  0 if no such con
bd10: 76 65 72 73 69 6f 6e 20 0a 2a 2a 20 69 73 20 70  version .** is p
bd20: 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  ossible..**.** A
bd30: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
bd40: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
bd50: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
bd60: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
bd70: 0a 63 61 73 65 20 4f 50 5f 54 6f 4e 75 6d 65 72  .case OP_ToNumer
bd80: 69 63 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ic: {           
bd90: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
bda0: 73 20 54 4b 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c  s TK_TO_NUMERIC,
bdb0: 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70   in1 */.  if( (p
bdc0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  In1->flags & (ME
bdd0: 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 49 6e 74 7c 4d  M_Null|MEM_Int|M
bde0: 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20 29 7b 0a  EM_Real))==0 ){.
bdf0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
be00: 65 6d 4e 75 6d 65 72 69 66 79 28 70 49 6e 31 29  emNumerify(pIn1)
be10: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
be20: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
be30: 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a  E_OMIT_CAST */..
be40: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 49 6e 74  /* Opcode: ToInt
be50: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
be60: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
be70: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
be80: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   be an integer. 
be90: 20 49 66 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65   If.** The value
bea0: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61 20   is currently a 
beb0: 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20 64 72 6f  real number, dro
bec0: 70 20 69 74 73 20 66 72 61 63 74 69 6f 6e 61 6c  p its fractional
bed0: 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20 74 68 65   part..** If the
bee0: 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f   value is text o
bef0: 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63  r blob, try to c
bf00: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20  onvert it to an 
bf10: 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74 68  integer using th
bf20: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
bf30: 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74  of atoi() and st
bf40: 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63 68  ore 0 if no such
bf50: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70   conversion is p
bf60: 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  ossible..**.** A
bf70: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
bf80: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
bf90: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
bfa0: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
bfb0: 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e 74 3a 20  .case OP_ToInt: 
bfc0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
bfd0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
bfe0: 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31 20 2a 2f 0a  _TO_INT, in1 */.
bff0: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
c000: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
c010: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
c020: 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
c030: 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  y(pIn1);.  }.  b
c040: 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
c050: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53   SQLITE_OMIT_CAS
c060: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52  T./* Opcode: ToR
c070: 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  eal P1 * * * *.*
c080: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
c090: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
c0a0: 20 50 31 20 74 6f 20 62 65 20 61 20 66 6c 6f 61   P1 to be a floa
c0b0: 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65  ting point numbe
c0c0: 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76 61 6c  r..** If The val
c0d0: 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  ue is currently 
c0e0: 61 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76  an integer, conv
c0f0: 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68  ert it..** If th
c100: 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20  e value is text 
c110: 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20  or blob, try to 
c120: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e  convert it to an
c130: 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74   integer using t
c140: 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74  he.** equivalent
c150: 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73   of atoi() and s
c160: 74 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f 20 73  tore 0.0 if no s
c170: 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  uch conversion i
c180: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
c190: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
c1a0: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
c1b0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
c1c0: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
c1d0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65  .*/.case OP_ToRe
c1e0: 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  al: {           
c1f0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
c200: 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e  s TK_TO_REAL, in
c210: 31 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31  1 */.  if( (pIn1
c220: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
c230: 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  ll)==0 ){.    sq
c240: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c  lite3VdbeMemReal
c250: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  ify(pIn1);.  }. 
c260: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
c270: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
c280: 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  CAST */../* Opco
c290: 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20  de: Lt P1 P2 P3 
c2a0: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  P4 P5.**.** Comp
c2b0: 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69  are the values i
c2c0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
c2d0: 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33  d P3.  If reg(P3
c2e0: 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a  )<reg(P1) then.*
c2f0: 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  * jump to addres
c300: 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66  s P2.  .**.** If
c310: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
c320: 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35  IFNULL bit of P5
c330: 20 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68   is set and eith
c340: 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a  er reg(P1) or.**
c350: 20 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c   reg(P3) is NULL
c360: 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
c370: 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c  ump.  If the SQL
c380: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a  ITE_JUMPIFNULL .
c390: 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72 20  ** bit is clear 
c3a0: 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 75 20 69  then fall thru i
c3b0: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
c3c0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   is NULL..**.** 
c3d0: 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  The SQLITE_AFF_M
c3e0: 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50  ASK portion of P
c3f0: 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66  5 must be an aff
c400: 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72 20  inity character 
c410: 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  -.** SQLITE_AFF_
c420: 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46  TEXT, SQLITE_AFF
c430: 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f  _INTEGER, and so
c440: 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d   forth. An attem
c450: 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74  pt is made .** t
c460: 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e  o coerce both in
c470: 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74  puts according t
c480: 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20  o this affinity 
c490: 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f  before the.** co
c4a0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65  mparison is made
c4b0: 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  . If the SQLITE_
c4c0: 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30  AFF_MASK is 0x00
c4d0: 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a  , then numeric.*
c4e0: 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75 73  * affinity is us
c4f0: 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68  ed. Note that th
c500: 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65  e affinity conve
c510: 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65  rsions are store
c520: 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74  d.** back into t
c530: 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
c540: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53  rs P1 and P3.  S
c550: 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61  o this opcode ca
c560: 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69  n cause.** persi
c570: 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f  stent changes to
c580: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
c590: 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65  d P3..**.** Once
c5a0: 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73   any conversions
c5b0: 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63   have taken plac
c5c0: 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76  e, and neither v
c5d0: 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a  alue is NULL, .*
c5e0: 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65  * the values are
c5f0: 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f   compared. If bo
c600: 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c  th values are bl
c610: 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28  obs then memcmp(
c620: 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20  ) is.** used to 
c630: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65  determine the re
c640: 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d  sults of the com
c650: 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74  parison.  If bot
c660: 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  h values.** are 
c670: 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61  text, then the a
c680: 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61  ppropriate colla
c690: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70  ting function sp
c6a0: 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34  ecified in.** P4
c6b0: 20 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f 20   is  used to do 
c6c0: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
c6d0: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70   If P4 is not sp
c6e0: 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20  ecified then.** 
c6f0: 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64  memcmp() is used
c700: 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74   to compare text
c710: 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74   string.  If bot
c720: 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20  h values are.** 
c730: 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20  numeric, then a 
c740: 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73  numeric comparis
c750: 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20 74  on is used. If t
c760: 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a  he two values.**
c770: 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e   are of differen
c780: 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75  t types, then nu
c790: 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64  mbers are consid
c7a0: 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a  ered less than.*
c7b0: 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74  * strings and st
c7c0: 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64  rings are consid
c7d0: 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62  ered less than b
c7e0: 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  lobs..**.** If t
c7f0: 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50  he SQLITE_STOREP
c800: 32 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73  2 bit of P5 is s
c810: 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20  et, then do not 
c820: 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c 0a  jump.  Instead,.
c830: 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c 65  ** store a boole
c840: 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74 68 65  an result (eithe
c850: 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e 55  r 0, or 1, or NU
c860: 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65 72 20  LL) in register 
c870: 50 32 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  P2..*/./* Opcode
c880: 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20 50 34  : Ne P1 P2 P3 P4
c890: 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P5.**.** This w
c8a0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
c8b0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
c8c0: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
c8d0: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
c8e0: 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e   the operands in
c8f0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
c900: 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75  d P3 are not equ
c910: 61 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  al.  See the Lt 
c920: 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64  opcode for.** ad
c930: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
c940: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
c950: 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33 20  de: Eq P1 P2 P3 
c960: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
c970: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
c980: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
c990: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
c9a0: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
c9b0: 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20  ** the operands 
c9c0: 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
c9d0: 61 6e 64 20 50 33 20 61 72 65 20 65 71 75 61 6c  and P3 are equal
c9e0: 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c 74 20  ..** See the Lt 
c9f0: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
ca00: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
ca10: 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
ca20: 20 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Le P1 P2 P3 P4 
ca30: 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P5.**.** This wo
ca40: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
ca50: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
ca60: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
ca70: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
ca80: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
ca90: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6c 65  egister P3 is le
caa0: 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
cab0: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
cac0: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
cad0: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
cae0: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
caf0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
cb00: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
cb10: 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Gt P1 P2 P3 P4 P
cb20: 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  5.**.** This wor
cb30: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
cb40: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
cb50: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
cb60: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
cb70: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
cb80: 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65  gister P3 is gre
cb90: 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f  ater than the co
cba0: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
cbb0: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
cbc0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
cbd0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
cbe0: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
cbf0: 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20 50  code: Ge P1 P2 P
cc00: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
cc10: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
cc20: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
cc30: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
cc40: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
cc50: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
cc60: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
cc70: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
cc80: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
cc90: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
cca0: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
ccb0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
ccc0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
ccd0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  ormation..*/.cas
cce0: 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20  e OP_Eq:        
ccf0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
cd00: 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69  s TK_EQ, jump, i
cd10: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
cd20: 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Ne:          
cd30: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
cd40: 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_NE, jump, in1
cd50: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
cd60: 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Lt:            
cd70: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
cd80: 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LT, jump, in1, 
cd90: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
cda0: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
cdb0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
cdc0: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
cdd0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a  3 */.case OP_Gt:
cde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cdf0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c  * same as TK_GT,
ce00: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
ce10: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b  */.case OP_Ge: {
ce20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ce30: 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a  same as TK_GE, j
ce40: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
ce50: 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20  .  int flags;.  
ce60: 69 6e 74 20 72 65 73 3b 0a 20 20 63 68 61 72 20  int res;.  char 
ce70: 61 66 66 69 6e 69 74 79 3b 0a 0a 20 20 66 6c 61  affinity;..  fla
ce80: 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73  gs = pIn1->flags
ce90: 7c 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 0a 20  |pIn3->flags;.. 
cea0: 20 69 66 28 20 66 6c 61 67 73 26 4d 45 4d 5f 4e   if( flags&MEM_N
ceb0: 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  ull ){.    /* If
cec0: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
ced0: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
cee0: 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79   result is alway
cef0: 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2a 20 54  s NULL..    ** T
cf00: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
cf10: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   if the SQLITE_J
cf20: 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73  UMPIFNULL bit is
cf30: 20 73 65 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20   set..    */.   
cf40: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
cf50: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
cf60: 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 70  .      pOut = &p
cf70: 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b  ->aMem[pOp->p2];
cf80: 0a 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70  .      MemSetTyp
cf90: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
cfa0: 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 52 45 47  Null);.      REG
cfb0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
cfc0: 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  >p2, pOut);.    
cfd0: 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
cfe0: 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  5 & SQLITE_JUMPI
cff0: 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 70  FNULL ){.      p
d000: 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
d010: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
d020: 20 20 7d 0a 0a 20 20 61 66 66 69 6e 69 74 79 20    }..  affinity 
d030: 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  = pOp->p5 & SQLI
d040: 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 69  TE_AFF_MASK;.  i
d050: 66 28 20 61 66 66 69 6e 69 74 79 20 29 7b 0a 20  f( affinity ){. 
d060: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
d070: 28 70 49 6e 31 2c 20 61 66 66 69 6e 69 74 79 2c  (pIn1, affinity,
d080: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
d090: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
d0a0: 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e  n3, affinity, en
d0b0: 63 6f 64 69 6e 67 29 3b 0a 20 20 7d 0a 0a 20 20  coding);.  }..  
d0c0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
d0d0: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
d0e0: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c  || pOp->p4.pColl
d0f0: 3d 3d 30 20 29 3b 0a 20 20 45 78 70 61 6e 64 42  ==0 );.  ExpandB
d100: 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 45 78 70  lob(pIn1);.  Exp
d110: 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20  andBlob(pIn3);. 
d120: 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65   res = sqlite3Me
d130: 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70  mCompare(pIn3, p
d140: 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  In1, pOp->p4.pCo
d150: 6c 6c 29 3b 0a 20 20 73 77 69 74 63 68 28 20 70  ll);.  switch( p
d160: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
d170: 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20    case OP_Eq:   
d180: 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20   res = res==0;  
d190: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
d1a0: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73  se OP_Ne:    res
d1b0: 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62   = res!=0;     b
d1c0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
d1d0: 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Lt:    res = r
d1e0: 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es<0;      break
d1f0: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65  ;.    case OP_Le
d200: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d  :    res = res<=
d210: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
d220: 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20    case OP_Gt:   
d230: 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20   res = res>0;   
d240: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
d250: 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73  fault:       res
d260: 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62   = res>=0;     b
d270: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  reak;.  }..  if(
d280: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
d290: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
d2a0: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
d2b0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 4d  [pOp->p2];.    M
d2c0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
d2d0: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
d2e0: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65    pOut->u.i = re
d2f0: 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  s;.    REGISTER_
d300: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
d310: 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  Out);.  }else if
d320: 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  ( res ){.    pc 
d330: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
d340: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
d350: 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74  Opcode: Permutat
d360: 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  ion * * * P4 *.*
d370: 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72  *.** Set the per
d380: 6d 75 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  muation used by 
d390: 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f  the OP_Compare o
d3a0: 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74 68  perator to be th
d3b0: 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e  e array.** of in
d3c0: 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a  tegers in P4..**
d3d0: 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74  .** The permutat
d3e0: 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ion is only vali
d3f0: 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74  d until the next
d400: 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 2c   OP_Permutation,
d410: 20 4f 50 5f 43 6f 6d 70 61 72 65 2c 0a 2a 2a 20   OP_Compare,.** 
d420: 4f 50 5f 48 61 6c 74 2c 20 6f 72 20 4f 50 5f 52  OP_Halt, or OP_R
d430: 65 73 75 6c 74 52 6f 77 2e 20 20 54 79 70 69 63  esultRow.  Typic
d440: 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d  ally the OP_Perm
d450: 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6f  utation should o
d460: 63 63 75 72 0a 2a 2a 20 69 6d 6d 65 64 69 61 74  ccur.** immediat
d470: 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65  ely prior to the
d480: 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a   OP_Compare..*/.
d490: 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74  case OP_Permutat
d4a0: 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ion: {.  assert(
d4b0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
d4c0: 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61  _INTARRAY );.  a
d4d0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61  ssert( pOp->p4.a
d4e0: 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65 20  i );.  aPermute 
d4f0: 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20  = pOp->p4.ai;.  
d500: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
d510: 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20  ode: Compare P1 
d520: 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
d530: 20 43 6f 6d 70 61 72 65 20 74 6f 20 76 65 63 74   Compare to vect
d540: 6f 72 73 20 6f 66 20 72 65 67 69 73 74 65 72 73  ors of registers
d550: 20 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67   in reg(P1)..reg
d560: 28 50 31 2b 50 33 2d 31 29 20 28 61 6c 6c 20 74  (P1+P3-1) (all t
d570: 68 69 73 0a 2a 2a 20 6f 6e 65 20 22 41 22 29 20  his.** one "A") 
d580: 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e  and in reg(P2)..
d590: 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42  reg(P2+P3-1) ("B
d5a0: 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65  ").  Save the re
d5b0: 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63  sult of.** the c
d5c0: 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73  omparison for us
d5d0: 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50  e by the next OP
d5e0: 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a  _Jump instruct..
d5f0: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65  **.** P4 is a Ke
d600: 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
d610: 74 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c  that defines col
d620: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
d630: 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64   and sort.** ord
d640: 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70  ers for the comp
d650: 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72  arison.  The per
d660: 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73  mutation applies
d670: 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a   to registers.**
d680: 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49   only.  The KeyI
d690: 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65  nfo elements are
d6a0: 20 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c   used sequential
d6b0: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ly..**.** The co
d6c0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f  mparison is a so
d6d0: 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73  rt comparison, s
d6e0: 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20  o NULLs compare 
d6f0: 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20  equal,.** NULLs 
d700: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75  are less than nu
d710: 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61  mbers, numbers a
d720: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72  re less than str
d730: 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72  ings,.** and str
d740: 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68  ings are less th
d750: 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73  an blobs..*/.cas
d760: 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a  e OP_Compare: {.
d770: 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e 70    int n = pOp->p
d780: 33 3b 0a 20 20 69 6e 74 20 69 2c 20 70 31 2c 20  3;.  int i, p1, 
d790: 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49  p2;.  const KeyI
d7a0: 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 20 3d 20  nfo *pKeyInfo = 
d7b0: 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
d7c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20  ;.  assert( n>0 
d7d0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65  );.  assert( pKe
d7e0: 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31  yInfo!=0 );.  p1
d7f0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73   = pOp->p1;.  as
d800: 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31  sert( p1>0 && p1
d810: 2b 6e 2d 31 3c 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  +n-1<p->nMem );.
d820: 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
d830: 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
d840: 26 20 70 32 2b 6e 2d 31 3c 70 2d 3e 6e 4d 65 6d  & p2+n-1<p->nMem
d850: 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   );.  for(i=0; i
d860: 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 6e  <n; i++){.    in
d870: 74 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65  t idx = aPermute
d880: 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a   ? aPermute[i] :
d890: 20 69 3b 0a 20 20 20 20 43 6f 6c 6c 53 65 71 20   i;.    CollSeq 
d8a0: 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f  *pColl;    /* Co
d8b0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
d8c0: 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20   to use on this 
d8d0: 74 65 72 6d 20 2a 2f 0a 20 20 20 20 69 6e 74 20  term */.    int 
d8e0: 62 52 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f  bRev;          /
d8f0: 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 45  * True for DESCE
d900: 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72  NDING sort order
d910: 20 2a 2f 0a 20 20 20 20 52 45 47 49 53 54 45 52   */.    REGISTER
d920: 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26  _TRACE(p1+idx, &
d930: 70 2d 3e 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  p->aMem[p1+idx])
d940: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
d950: 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 70 2d  RACE(p2+idx, &p-
d960: 3e 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a  >aMem[p2+idx]);.
d970: 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b      assert( i<pK
d980: 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29  eyInfo->nField )
d990: 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b  ;.    pColl = pK
d9a0: 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d  eyInfo->aColl[i]
d9b0: 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65  ;.    bRev = pKe
d9c0: 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65  yInfo->aSortOrde
d9d0: 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61  r[i];.    iCompa
d9e0: 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  re = sqlite3MemC
d9f0: 6f 6d 70 61 72 65 28 26 70 2d 3e 61 4d 65 6d 5b  ompare(&p->aMem[
da00: 70 31 2b 69 64 78 5d 2c 20 26 70 2d 3e 61 4d 65  p1+idx], &p->aMe
da10: 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c  m[p2+idx], pColl
da20: 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70  );.    if( iComp
da30: 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  are ){.      if(
da40: 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65   bRev ) iCompare
da50: 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20   = -iCompare;.  
da60: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
da70: 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20  .  }.  aPermute 
da80: 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
da90: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70  ./* Opcode: Jump
daa0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
dab0: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
dac0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61  instruction at a
dad0: 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f  ddress P1, P2, o
dae0: 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f  r P3 depending o
daf0: 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20  n whether.** in 
db00: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
db10: 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72  OP_Compare instr
db20: 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65  uction the P1 ve
db30: 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68  ctor was less th
db40: 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20  an.** equal to, 
db50: 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  or greater than 
db60: 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72  the P2 vector, r
db70: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
db80: 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20  case OP_Jump: { 
db90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
dba0: 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f  ump */.  if( iCo
dbb0: 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 70  mpare<0 ){.    p
dbc0: 63 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b  c = pOp->p1 - 1;
dbd0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f  .  }else if( iCo
dbe0: 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20  mpare==0 ){.    
dbf0: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
dc00: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
dc10: 63 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b  c = pOp->p3 - 1;
dc20: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
dc30: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20  ./* Opcode: And 
dc40: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
dc50: 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
dc60: 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76  cal AND of the v
dc70: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
dc80: 72 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  rs P1 and P2 and
dc90: 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65  .** write the re
dca0: 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74  sult into regist
dcb0: 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
dcc0: 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
dcd0: 69 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65  is 0 (false) the
dce0: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
dcf0: 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65  0 even if.** the
dd00: 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20   other input is 
dd10: 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e  NULL.  A NULL an
dd20: 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55  d true or two NU
dd30: 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55  LLs give.** a NU
dd40: 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a  LL output..*/./*
dd50: 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50   Opcode: Or P1 P
dd60: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
dd70: 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
dd80: 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
dd90: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
dda0: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
ddb0: 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69  ore the answer i
ddc0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
ddd0: 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
dde0: 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65  1 or P2 is nonze
ddf0: 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74  ro (true) then t
de00: 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28  he result is 1 (
de10: 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66  true).** even if
de20: 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
de30: 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
de40: 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74  L and false or t
de50: 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65  wo NULLs.** give
de60: 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
de70: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20  */.case OP_And: 
de80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
de90: 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20  same as TK_AND, 
dea0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
deb0: 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20  /.case OP_Or: { 
dec0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
ded0: 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e  ame as TK_OR, in
dee0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
def0: 20 20 69 6e 74 20 76 31 2c 20 76 32 3b 20 20 20    int v1, v2;   
df00: 20 2f 2a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d   /* 0==FALSE, 1=
df10: 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57  =TRUE, 2==UNKNOW
df20: 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20  N or NULL */..  
df30: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
df40: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
df50: 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v1 = 2;.  }els
df60: 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69  e{.    v1 = sqli
df70: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
df80: 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn1)!=0;.  }.  
df90: 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  if( pIn2->flags 
dfa0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
dfb0: 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v2 = 2;.  }els
dfc0: 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69  e{.    v2 = sqli
dfd0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
dfe0: 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn2)!=0;.  }.  
dff0: 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
e000: 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73  =OP_And ){.    s
e010: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
e020: 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f  gned char and_lo
e030: 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20  gic[] = { 0, 0, 
e040: 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32  0, 0, 1, 2, 0, 2
e050: 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20  , 2 };.    v1 = 
e060: 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76  and_logic[v1*3+v
e070: 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  2];.  }else{.   
e080: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
e090: 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c  signed char or_l
e0a0: 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c  ogic[] = { 0, 1,
e0b0: 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20   2, 1, 1, 1, 2, 
e0c0: 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d  1, 2 };.    v1 =
e0d0: 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76   or_logic[v1*3+v
e0e0: 32 5d 3b 0a 20 20 7d 0a 20 20 69 66 28 20 76 31  2];.  }.  if( v1
e0f0: 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65  ==2 ){.    MemSe
e100: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
e110: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c  MEM_Null);.  }el
e120: 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  se{.    pOut->u.
e130: 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53  i = v1;.    MemS
e140: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
e150: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20   MEM_Int);.  }. 
e160: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
e170: 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 2a 20 2a  code: Not P1 * *
e180: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72   * *.**.** Inter
e190: 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20 69  pret the value i
e1a0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  n register P1 as
e1b0: 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
e1c0: 2e 20 20 52 65 70 6c 61 63 65 20 69 74 0a 2a 2a  .  Replace it.**
e1d0: 20 77 69 74 68 20 69 74 73 20 63 6f 6d 70 6c 65   with its comple
e1e0: 6d 65 6e 74 2e 20 20 49 66 20 74 68 65 20 76 61  ment.  If the va
e1f0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
e200: 50 31 20 69 73 20 4e 55 4c 4c 20 69 74 73 20 76  P1 is NULL its v
e210: 61 6c 75 65 0a 2a 2a 20 69 73 20 75 6e 63 68 61  alue.** is uncha
e220: 6e 67 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  nged..*/.case OP
e230: 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  _Not: {         
e240: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
e250: 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 20 2a 2f  s TK_NOT, in1 */
e260: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
e270: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20  gs & MEM_Null ) 
e280: 62 72 65 61 6b 3b 20 20 2f 2a 20 44 6f 20 6e 6f  break;  /* Do no
e290: 74 68 69 6e 67 20 74 6f 20 4e 55 4c 4c 73 20 2a  thing to NULLs *
e2a0: 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  /.  sqlite3VdbeM
e2b0: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
e2c0: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
e2d0: 3d 20 21 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20  = !pIn1->u.i;.  
e2e0: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
e2f0: 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
e300: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
e310: 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20  code: BitNot P1 
e320: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  * * * *.**.** In
e330: 74 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74  terpret the cont
e340: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
e350: 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  P1 as an integer
e360: 2e 20 20 52 65 70 6c 61 63 65 20 69 74 0a 2a 2a  .  Replace it.**
e370: 20 77 69 74 68 20 69 74 73 20 6f 6e 65 73 2d 63   with its ones-c
e380: 6f 6d 70 6c 65 6d 65 6e 74 2e 20 20 49 66 20 74  omplement.  If t
e390: 68 65 20 76 61 6c 75 65 20 69 73 20 6f 72 69 67  he value is orig
e3a0: 69 6e 61 6c 6c 79 20 4e 55 4c 4c 2c 20 6c 65 61  inally NULL, lea
e3b0: 76 65 0a 2a 2a 20 69 74 20 75 6e 63 68 61 6e 67  ve.** it unchang
e3c0: 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  ed..*/.case OP_B
e3d0: 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  itNot: {        
e3e0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
e3f0: 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 20 2a  TK_BITNOT, in1 *
e400: 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  /.  if( pIn1->fl
e410: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
e420: 20 62 72 65 61 6b 3b 20 20 2f 2a 20 44 6f 20 6e   break;  /* Do n
e430: 6f 74 68 69 6e 67 20 74 6f 20 4e 55 4c 4c 73 20  othing to NULLs 
e440: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
e450: 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
e460: 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  n1);.  pIn1->u.i
e470: 20 3d 20 7e 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20   = ~pIn1->u.i;. 
e480: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
e490: 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
e4a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
e4b0: 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20  pcode: If P1 P2 
e4c0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
e4d0: 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
e4e0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
e4f0: 20 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68   P1 is true.  Th
e500: 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 69 73  e value is.** is
e510: 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65   considered true
e520: 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69   if it is numeri
e530: 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  c and non-zero. 
e540: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
e550: 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74   in P1 is NULL t
e560: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
e570: 70 20 69 66 20 50 33 20 69 73 20 74 72 75 65 2e  p if P3 is true.
e580: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
e590: 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20  fNot P1 P2 P3 * 
e5a0: 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
e5b0: 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
e5c0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
e5d0: 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61  s False.  The va
e5e0: 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20 63 6f 6e  lue is.** is con
e5f0: 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20  sidered true if 
e600: 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63  it has a numeric
e610: 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20   value of zero. 
e620: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
e630: 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74   in P1 is NULL t
e640: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
e650: 70 20 69 66 20 50 33 20 69 73 20 74 72 75 65 2e  p if P3 is true.
e660: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20  .*/.case OP_If: 
e670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e680: 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
e690: 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b  case OP_IfNot: {
e6a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
e6b0: 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e  ump, in1 */.  in
e6c0: 74 20 63 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  t c;.  if( pIn1-
e6d0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
e6e0: 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70  l ){.    c = pOp
e6f0: 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23  ->p3;.  }else{.#
e700: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
e710: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
e720: 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33  .    c = sqlite3
e730: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
e740: 31 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20  1);.#else.    c 
e750: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
e760: 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e  lValue(pIn1)!=0.
e770: 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66  0;.#endif.    if
e780: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
e790: 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63  P_IfNot ) c = !c
e7a0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 20 29 7b  ;.  }.  if( c ){
e7b0: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
e7c0: 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  2-1;.  }.  break
e7d0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
e7e0: 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20  IsNull P1 P2 P3 
e7f0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
e800: 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
e810: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
e820: 20 69 73 20 4e 55 4c 4c 2e 20 20 49 66 20 50 33   is NULL.  If P3
e830: 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74   is greater.** t
e840: 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 63  han zero, then c
e850: 68 65 63 6b 20 61 6c 6c 20 76 61 6c 75 65 73 20  heck all values 
e860: 72 65 67 28 50 31 29 2c 20 72 65 67 28 50 31 2b  reg(P1), reg(P1+
e870: 31 29 2c 20 0a 2a 2a 20 72 65 67 28 50 31 2b 32  1), .** reg(P1+2
e880: 29 2c 20 2e 2e 2e 2c 20 72 65 67 28 50 31 2b 50  ), ..., reg(P1+P
e890: 33 2d 31 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  3-1)..*/.case OP
e8a0: 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  _IsNull: {      
e8b0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
e8c0: 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70   TK_ISNULL, jump
e8d0: 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 6e  , in1 */.  int n
e8e0: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
e8f0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30  sert( pOp->p3==0
e900: 20 7c 7c 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b   || pOp->p1>0 );
e910: 0a 20 20 64 6f 7b 0a 20 20 20 20 69 66 28 20 28  .  do{.    if( (
e920: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
e930: 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20  M_Null)!=0 ){.  
e940: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
e950: 20 2d 20 31 3b 0a 20 20 20 20 20 20 62 72 65 61   - 1;.      brea
e960: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 49 6e  k;.    }.    pIn
e970: 31 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20 2d  1++;.  }while( -
e980: 2d 6e 20 3e 20 30 20 29 3b 0a 20 20 62 72 65 61  -n > 0 );.  brea
e990: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
e9a0: 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a   NotNull P1 P2 *
e9b0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
e9c0: 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
e9d0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
e9e0: 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20  1 is not NULL.  
e9f0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e  .*/.case OP_NotN
ea00: 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
ea10: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
ea20: 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69  NOTNULL, jump, i
ea30: 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e  n1 */.  if( (pIn
ea40: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
ea50: 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  ull)==0 ){.    p
ea60: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
ea70: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
ea80: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74 4e  ./* Opcode: SetN
ea90: 75 6d 43 6f 6c 75 6d 6e 73 20 2a 20 50 32 20 2a  umColumns * P2 *
eaa0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   * *.**.** This 
eab0: 6f 70 63 6f 64 65 20 73 65 74 73 20 74 68 65 20  opcode sets the 
eac0: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
ead0: 73 20 66 6f 72 20 74 68 65 20 63 75 72 73 6f 72  s for the cursor
eae0: 20 6f 70 65 6e 65 64 20 62 79 20 74 68 65 0a 2a   opened by the.*
eaf0: 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  * following inst
eb00: 72 75 63 74 69 6f 6e 20 74 6f 20 50 32 2e 0a 2a  ruction to P2..*
eb10: 2a 0a 2a 2a 20 41 6e 20 4f 50 5f 53 65 74 4e 75  *.** An OP_SetNu
eb20: 6d 43 6f 6c 75 6d 6e 73 20 69 73 20 6f 6e 6c 79  mColumns is only
eb30: 20 75 73 65 66 75 6c 20 69 66 20 69 74 20 6f 63   useful if it oc
eb40: 63 75 72 73 20 69 6d 6d 65 64 69 61 74 65 6c 79  curs immediately
eb50: 20 62 65 66 6f 72 65 20 0a 2a 2a 20 6f 6e 65 20   before .** one 
eb60: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
eb70: 20 6f 70 63 6f 64 65 73 3a 0a 2a 2a 0a 2a 2a 20   opcodes:.**.** 
eb80: 20 20 20 20 4f 70 65 6e 52 65 61 64 0a 2a 2a 20      OpenRead.** 
eb90: 20 20 20 20 4f 70 65 6e 57 72 69 74 65 0a 2a 2a      OpenWrite.**
eba0: 20 20 20 20 20 4f 70 65 6e 50 73 65 75 64 6f 0a       OpenPseudo.
ebb0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 5f  **.** If the OP_
ebc0: 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 69 73  Column opcode is
ebd0: 20 74 6f 20 62 65 20 65 78 65 63 75 74 65 64 20   to be executed 
ebe0: 6f 6e 20 61 20 63 75 72 73 6f 72 2c 20 74 68 65  on a cursor, the
ebf0: 6e 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65  n.** this opcode
ec00: 20 6d 75 73 74 20 62 65 20 70 72 65 73 65 6e 74   must be present
ec10: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62 65 66   immediately bef
ec20: 6f 72 65 20 74 68 65 20 6f 70 63 6f 64 65 20 74  ore the opcode t
ec30: 68 61 74 0a 2a 2a 20 6f 70 65 6e 73 20 74 68 65  hat.** opens the
ec40: 20 63 75 72 73 6f 72 2e 0a 2a 2f 0a 63 61 73 65   cursor..*/.case
ec50: 20 4f 50 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e   OP_SetNumColumn
ec60: 73 3a 20 7b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  s: {.  break;.}.
ec70: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75  ./* Opcode: Colu
ec80: 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  mn P1 P2 P3 P4 *
ec90: 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
eca0: 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20 63   the data that c
ecb0: 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20  ursor P1 points 
ecc0: 74 6f 20 61 73 20 61 20 73 74 72 75 63 74 75 72  to as a structur
ecd0: 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a  e built using.**
ece0: 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20   the MakeRecord 
ecf0: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53  instruction.  (S
ed00: 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72  ee the MakeRecor
ed10: 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  d opcode for add
ed20: 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72  itional.** infor
ed30: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
ed40: 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64   format of the d
ed50: 61 74 61 2e 29 20 20 45 78 74 72 61 63 74 20 74  ata.)  Extract t
ed60: 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a  he P2-th column.
ed70: 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63  ** from this rec
ed80: 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65 20 61  ord.  If there a
ed90: 72 65 20 6c 65 73 73 20 74 68 61 74 20 28 50 32  re less that (P2
eda0: 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69  +1) .** values i
edb0: 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78  n the record, ex
edc0: 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a  tract a NULL..**
edd0: 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78  .** The value ex
ede0: 74 72 61 63 74 65 64 20 69 73 20 73 74 6f 72 65  tracted is store
edf0: 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
ee00: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4b  ..**.** If the K
ee10: 65 79 41 73 44 61 74 61 20 6f 70 63 6f 64 65 20  eyAsData opcode 
ee20: 68 61 73 20 70 72 65 76 69 6f 75 73 6c 79 20 65  has previously e
ee30: 78 65 63 75 74 65 64 20 6f 6e 20 74 68 69 73 20  xecuted on this 
ee40: 63 75 72 73 6f 72 2c 20 74 68 65 6e 20 74 68 65  cursor, then the
ee50: 0a 2a 2a 20 66 69 65 6c 64 20 6d 69 67 68 74 20  .** field might 
ee60: 62 65 20 65 78 74 72 61 63 74 65 64 20 66 72 6f  be extracted fro
ee70: 6d 20 74 68 65 20 6b 65 79 20 72 61 74 68 65 72  m the key rather
ee80: 20 74 68 61 6e 20 74 68 65 20 64 61 74 61 2e 0a   than the data..
ee90: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c  **.** If the col
eea0: 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77  umn contains few
eeb0: 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64  er than P2 field
eec0: 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20  s, then extract 
eed0: 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20  a NULL.  Or,.** 
eee0: 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  if the P4 argume
eef0: 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75  nt is a P4_MEM u
ef00: 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  se the value of 
ef10: 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
ef20: 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  as.** the result
ef30: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
ef40: 75 6d 6e 3a 20 7b 0a 20 20 75 33 32 20 70 61 79  umn: {.  u32 pay
ef50: 6c 6f 61 64 53 69 7a 65 3b 20 20 20 2f 2a 20 4e  loadSize;   /* N
ef60: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
ef70: 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
ef80: 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e    int p1 = pOp->
ef90: 70 31 3b 20 20 2f 2a 20 50 31 20 76 61 6c 75 65  p1;  /* P1 value
efa0: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 20 2a   of the opcode *
efb0: 2f 0a 20 20 69 6e 74 20 70 32 20 3d 20 70 4f 70  /.  int p2 = pOp
efc0: 2d 3e 70 32 3b 20 20 2f 2a 20 63 6f 6c 75 6d 6e  ->p2;  /* column
efd0: 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69   number to retri
efe0: 65 76 65 20 2a 2f 0a 20 20 43 75 72 73 6f 72 20  eve */.  Cursor 
eff0: 2a 70 43 20 3d 20 30 3b 20 20 20 20 2f 2a 20 54  *pC = 0;    /* T
f000: 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a  he VDBE cursor *
f010: 2f 0a 20 20 63 68 61 72 20 2a 7a 52 65 63 3b 20  /.  char *zRec; 
f020: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
f030: 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 72 65  r to complete re
f040: 63 6f 72 64 2d 64 61 74 61 20 2a 2f 0a 20 20 42  cord-data */.  B
f050: 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20  tCursor *pCrsr; 
f060: 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63    /* The BTree c
f070: 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a  ursor */.  u32 *
f080: 61 54 79 70 65 3b 20 20 20 20 20 20 20 20 2f 2a  aType;        /*
f090: 20 61 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20   aType[i] holds 
f0a0: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
f0b0: 20 6f 66 20 74 68 65 20 69 2d 74 68 20 63 6f 6c   of the i-th col
f0c0: 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f  umn */.  u32 *aO
f0d0: 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61  ffset;      /* a
f0e0: 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66  Offset[i] is off
f0f0: 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20  set to start of 
f100: 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f  data for i-th co
f110: 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 6e 46  lumn */.  u32 nF
f120: 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  ield;        /* 
f130: 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  number of fields
f140: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
f150: 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20  /.  int len;    
f160: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65         /* The le
f170: 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65 72 69  ngth of the seri
f180: 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20  alized data for 
f190: 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  the column */.  
f1a0: 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
f1b0: 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
f1c0: 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44  er */.  char *zD
f1d0: 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 50 61  ata;       /* Pa
f1e0: 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  rt of the record
f1f0: 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a   being decoded *
f200: 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20  /.  Mem *pDest; 
f210: 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20         /* Where 
f220: 74 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74  to write the ext
f230: 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a  racted value */.
f240: 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20    Mem sMem;     
f250: 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72       /* For stor
f260: 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62  ing the record b
f270: 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
f280: 0a 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20  .  sMem.flags = 
f290: 30 3b 0a 20 20 73 4d 65 6d 2e 64 62 20 3d 20 30  0;.  sMem.db = 0
f2a0: 3b 0a 20 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63  ;.  sMem.zMalloc
f2b0: 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
f2c0: 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
f2d0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
f2e0: 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
f2f0: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44  =p->nMem );.  pD
f300: 65 73 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  est = &p->aMem[p
f310: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 4d 65 6d 53 65  Op->p3];.  MemSe
f320: 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c  tTypeFlag(pDest,
f330: 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 2f   MEM_Null);..  /
f340: 2a 20 54 68 69 73 20 62 6c 6f 63 6b 20 73 65 74  * This block set
f350: 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 70  s the variable p
f360: 61 79 6c 6f 61 64 53 69 7a 65 20 74 6f 20 62 65  ayloadSize to be
f370: 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
f380: 72 20 6f 66 0a 20 20 2a 2a 20 62 79 74 65 73 20  r of.  ** bytes 
f390: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20  in the record.. 
f3a0: 20 2a 2a 0a 20 20 2a 2a 20 7a 52 65 63 20 69 73   **.  ** zRec is
f3b0: 20 73 65 74 20 74 6f 20 62 65 20 74 68 65 20 63   set to be the c
f3c0: 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20  omplete text of 
f3d0: 74 68 65 20 72 65 63 6f 72 64 20 69 66 20 69 74  the record if it
f3e0: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 20   is available.. 
f3f0: 20 2a 2a 20 54 68 65 20 63 6f 6d 70 6c 65 74 65   ** The complete
f400: 20 72 65 63 6f 72 64 20 74 65 78 74 20 69 73 20   record text is 
f410: 61 6c 77 61 79 73 20 61 76 61 69 6c 61 62 6c 65  always available
f420: 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61 62 6c   for pseudo-tabl
f430: 65 73 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 72  es.  ** If the r
f440: 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65 64 20  ecord is stored 
f450: 69 6e 20 61 20 63 75 72 73 6f 72 2c 20 74 68 65  in a cursor, the
f460: 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64   complete record
f470: 20 74 65 78 74 0a 20 20 2a 2a 20 6d 69 67 68 74   text.  ** might
f480: 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 69 6e   be available in
f490: 20 74 68 65 20 20 70 43 2d 3e 61 52 6f 77 20 63   the  pC->aRow c
f4a0: 61 63 68 65 2e 20 20 4f 72 20 69 74 20 6d 69 67  ache.  Or it mig
f4b0: 68 74 20 6e 6f 74 20 62 65 2e 0a 20 20 2a 2a 20  ht not be..  ** 
f4c0: 49 66 20 74 68 65 20 64 61 74 61 20 69 73 20 75  If the data is u
f4d0: 6e 61 76 61 69 6c 61 62 6c 65 2c 20 20 7a 52 65  navailable,  zRe
f4e0: 63 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c  c is set to NULL
f4f0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 65 20 61  ..  **.  ** We a
f500: 6c 73 6f 20 63 6f 6d 70 75 74 65 20 74 68 65 20  lso compute the 
f510: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
f520: 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2e  s in the record.
f530: 20 20 46 6f 72 20 63 75 72 73 6f 72 73 2c 0a 20    For cursors,. 
f540: 20 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   ** the number o
f550: 66 20 63 6f 6c 75 6d 6e 73 20 69 73 20 73 74 6f  f columns is sto
f560: 72 65 64 20 69 6e 20 74 68 65 20 43 75 72 73 6f  red in the Curso
f570: 72 2e 6e 46 69 65 6c 64 20 65 6c 65 6d 65 6e 74  r.nField element
f580: 2e 0a 20 20 2a 2f 0a 20 20 70 43 20 3d 20 70 2d  ..  */.  pC = p-
f590: 3e 61 70 43 73 72 5b 70 31 5d 3b 0a 20 20 61 73  >apCsr[p1];.  as
f5a0: 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23  sert( pC!=0 );.#
f5b0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
f5c0: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
f5d0: 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56    assert( pC->pV
f5e0: 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 0a  tabCursor==0 );.
f5f0: 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 43 2d  #endif.  if( pC-
f600: 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20  >pCursor!=0 ){. 
f610: 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64     /* The record
f620: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20   is stored in a 
f630: 42 2d 54 72 65 65 20 2a 2f 0a 20 20 20 20 72 63  B-Tree */.    rc
f640: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
f650: 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
f660: 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
f670: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
f680: 72 72 6f 72 3b 0a 20 20 20 20 7a 52 65 63 20 3d  rror;.    zRec =
f690: 20 30 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20   0;.    pCrsr = 
f6a0: 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20  pC->pCursor;.   
f6b0: 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
f6c0: 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61   ){.      payloa
f6d0: 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20 7d  dSize = 0;.    }
f6e0: 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 63 61 63  else if( pC->cac
f6f0: 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63  heStatus==p->cac
f700: 68 65 43 74 72 20 29 7b 0a 20 20 20 20 20 20 70  heCtr ){.      p
f710: 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d  ayloadSize = pC-
f720: 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20  >payloadSize;.  
f730: 20 20 20 20 7a 52 65 63 20 3d 20 28 63 68 61 72      zRec = (char
f740: 2a 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20  *)pC->aRow;.    
f750: 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 69 73  }else if( pC->is
f760: 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20 69  Index ){.      i
f770: 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  64 payloadSize64
f780: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ;.      sqlite3B
f790: 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73  treeKeySize(pCrs
f7a0: 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36  r, &payloadSize6
f7b0: 34 29 3b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61  4);.      payloa
f7c0: 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f 61 64 53  dSize = payloadS
f7d0: 69 7a 65 36 34 3b 0a 20 20 20 20 7d 65 6c 73 65  ize64;.    }else
f7e0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  {.      sqlite3B
f7f0: 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
f800: 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65  sr, &payloadSize
f810: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 46 69  );.    }.    nFi
f820: 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c 64  eld = pC->nField
f830: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
f840: 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
f850: 6f 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 2f 2a  oTable );.    /*
f860: 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 74   The record is t
f870: 68 65 20 73 6f 6c 65 20 65 6e 74 72 79 20 6f 66  he sole entry of
f880: 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
f890: 2a 2f 0a 20 20 20 20 70 61 79 6c 6f 61 64 53 69  */.    payloadSi
f8a0: 7a 65 20 3d 20 70 43 2d 3e 6e 44 61 74 61 3b 0a  ze = pC->nData;.
f8b0: 20 20 20 20 7a 52 65 63 20 3d 20 70 43 2d 3e 70      zRec = pC->p
f8c0: 44 61 74 61 3b 0a 20 20 20 20 70 43 2d 3e 63 61  Data;.    pC->ca
f8d0: 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
f8e0: 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 61 73 73  E_STALE;.    ass
f8f0: 65 72 74 28 20 70 61 79 6c 6f 61 64 53 69 7a 65  ert( payloadSize
f900: 3d 3d 30 20 7c 7c 20 7a 52 65 63 21 3d 30 20 29  ==0 || zRec!=0 )
f910: 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  ;.    nField = p
f920: 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70  C->nField;.    p
f930: 43 72 73 72 20 3d 20 30 3b 0a 20 20 7d 0a 0a 20  Crsr = 0;.  }.. 
f940: 20 2f 2a 20 49 66 20 70 61 79 6c 6f 61 64 53 69   /* If payloadSi
f950: 7a 65 20 69 73 20 30 2c 20 74 68 65 6e 20 6a 75  ze is 0, then ju
f960: 73 74 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20  st store a NULL 
f970: 2a 2f 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64  */.  if( payload
f980: 53 69 7a 65 3d 3d 30 20 29 7b 0a 20 20 20 20 61  Size==0 ){.    a
f990: 73 73 65 72 74 28 20 70 44 65 73 74 2d 3e 66 6c  ssert( pDest->fl
f9a0: 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a  ags&MEM_Null );.
f9b0: 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
f9c0: 6d 6e 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 69 66  mn_out;.  }.  if
f9d0: 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 3e 64 62  ( payloadSize>db
f9e0: 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
f9f0: 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
fa00: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
fa10: 67 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74  g;.  }..  assert
fa20: 28 20 70 32 3c 6e 46 69 65 6c 64 20 29 3b 0a 0a  ( p2<nField );..
fa30: 20 20 2f 2a 20 52 65 61 64 20 61 6e 64 20 70 61    /* Read and pa
fa40: 72 73 65 20 74 68 65 20 74 61 62 6c 65 20 68 65  rse the table he
fa50: 61 64 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65  ader.  Store the
fa60: 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
fa70: 70 61 72 73 65 0a 20 20 2a 2a 20 69 6e 74 6f 20  parse.  ** into 
fa80: 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65  the record heade
fa90: 72 20 63 61 63 68 65 20 66 69 65 6c 64 73 20 6f  r cache fields o
faa0: 66 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 20 20  f the cursor..  
fab0: 2a 2f 0a 20 20 61 54 79 70 65 20 3d 20 70 43 2d  */.  aType = pC-
fac0: 3e 61 54 79 70 65 3b 0a 20 20 69 66 28 20 70 43  >aType;.  if( pC
fad0: 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d 3d 70  ->cacheStatus==p
fae0: 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20  ->cacheCtr ){.  
faf0: 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e    aOffset = pC->
fb00: 61 4f 66 66 73 65 74 3b 0a 20 20 7d 65 6c 73 65  aOffset;.  }else
fb10: 7b 0a 20 20 20 20 75 38 20 2a 7a 49 64 78 3b 20  {.    u8 *zIdx; 
fb20: 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
fb30: 69 6e 74 6f 20 68 65 61 64 65 72 20 2a 2f 0a 20  into header */. 
fb40: 20 20 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20     u8 *zEndHdr; 
fb50: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
fb60: 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66 74  o first byte aft
fb70: 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  er the header */
fb80: 0a 20 20 20 20 75 33 32 20 6f 66 66 73 65 74 3b  .    u32 offset;
fb90: 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20        /* Offset 
fba0: 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a 2f  into the data */
fbb0: 0a 20 20 20 20 69 6e 74 20 73 7a 48 64 72 53 7a  .    int szHdrSz
fbc0: 3b 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66  ;     /* Size of
fbd0: 20 74 68 65 20 68 65 61 64 65 72 20 73 69 7a 65   the header size
fbe0: 20 66 69 65 6c 64 20 61 74 20 73 74 61 72 74 20   field at start 
fbf0: 6f 66 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 20  of record */.   
fc00: 20 69 6e 74 20 61 76 61 69 6c 3b 20 20 20 20 20   int avail;     
fc10: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
fc20: 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c  ytes of availabl
fc30: 65 20 64 61 74 61 20 2a 2f 0a 0a 20 20 20 20 61  e data */..    a
fc40: 73 73 65 72 74 28 61 54 79 70 65 29 3b 0a 20 20  ssert(aType);.  
fc50: 20 20 70 43 2d 3e 61 4f 66 66 73 65 74 20 3d 20    pC->aOffset = 
fc60: 61 4f 66 66 73 65 74 20 3d 20 26 61 54 79 70 65  aOffset = &aType
fc70: 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 70 43  [nField];.    pC
fc80: 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20  ->payloadSize = 
fc90: 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20  payloadSize;.   
fca0: 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
fcb0: 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a   = p->cacheCtr;.
fcc0: 0a 20 20 20 20 2f 2a 20 46 69 67 75 72 65 20 6f  .    /* Figure o
fcd0: 75 74 20 68 6f 77 20 6d 61 6e 79 20 62 79 74 65  ut how many byte
fce0: 73 20 61 72 65 20 69 6e 20 74 68 65 20 68 65 61  s are in the hea
fcf0: 64 65 72 20 2a 2f 0a 20 20 20 20 69 66 28 20 7a  der */.    if( z
fd00: 52 65 63 20 29 7b 0a 20 20 20 20 20 20 7a 44 61  Rec ){.      zDa
fd10: 74 61 20 3d 20 7a 52 65 63 3b 0a 20 20 20 20 7d  ta = zRec;.    }
fd20: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20  else{.      if( 
fd30: 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20  pC->isIndex ){. 
fd40: 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28         zData = (
fd50: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74 72  char*)sqlite3Btr
fd60: 65 65 4b 65 79 46 65 74 63 68 28 70 43 72 73 72  eeKeyFetch(pCrsr
fd70: 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20  , &avail);.     
fd80: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
fd90: 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73  zData = (char*)s
fda0: 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 46  qlite3BtreeDataF
fdb0: 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61  etch(pCrsr, &ava
fdc0: 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  il);.      }.   
fdd0: 20 20 20 2f 2a 20 49 66 20 4b 65 79 46 65 74 63     /* If KeyFetc
fde0: 68 28 29 2f 44 61 74 61 46 65 74 63 68 28 29 20  h()/DataFetch() 
fdf0: 6d 61 6e 61 67 65 64 20 74 6f 20 67 65 74 20 74  managed to get t
fe00: 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f 61  he entire payloa
fe10: 64 2c 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  d,.      ** save
fe20: 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69 6e 20   the payload in 
fe30: 74 68 65 20 70 43 2d 3e 61 52 6f 77 20 63 61 63  the pC->aRow cac
fe40: 68 65 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 73  he.  That will s
fe50: 61 76 65 20 75 73 20 66 72 6f 6d 0a 20 20 20 20  ave us from.    
fe60: 20 20 2a 2a 20 68 61 76 69 6e 67 20 74 6f 20 6d    ** having to m
fe70: 61 6b 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 63  ake additional c
fe80: 61 6c 6c 73 20 74 6f 20 66 65 74 63 68 20 74 68  alls to fetch th
fe90: 65 20 63 6f 6e 74 65 6e 74 20 70 6f 72 74 69 6f  e content portio
fea0: 6e 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74 68  n of.      ** th
feb0: 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20  e record..      
fec0: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 61 76 61  */.      if( ava
fed0: 69 6c 3e 3d 70 61 79 6c 6f 61 64 53 69 7a 65 20  il>=payloadSize 
fee0: 29 7b 0a 20 20 20 20 20 20 20 20 7a 52 65 63 20  ){.        zRec 
fef0: 3d 20 7a 44 61 74 61 3b 0a 20 20 20 20 20 20 20  = zData;.       
ff00: 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a   pC->aRow = (u8*
ff10: 29 7a 44 61 74 61 3b 0a 20 20 20 20 20 20 7d 65  )zData;.      }e
ff20: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  lse{.        pC-
ff30: 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20  >aRow = 0;.     
ff40: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20   }.    }.    /* 
ff50: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73  The following as
ff60: 73 65 72 74 20 69 73 20 74 72 75 65 20 69 6e 20  sert is true in 
ff70: 61 6c 6c 20 63 61 73 65 73 20 61 63 63 65 70 74  all cases accept
ff80: 20 77 68 65 6e 0a 20 20 20 20 2a 2a 20 74 68 65   when.    ** the
ff90: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68   database file h
ffa0: 61 73 20 62 65 65 6e 20 63 6f 72 72 75 70 74 65  as been corrupte
ffb0: 64 20 65 78 74 65 72 6e 61 6c 6c 79 2e 0a 20 20  d externally..  
ffc0: 20 20 2a 2a 20 20 20 20 61 73 73 65 72 74 28 20    **    assert( 
ffd0: 7a 52 65 63 21 3d 30 20 7c 7c 20 61 76 61 69 6c  zRec!=0 || avail
ffe0: 3e 3d 70 61 79 6c 6f 61 64 53 69 7a 65 20 7c 7c  >=payloadSize ||
fff0: 20 61 76 61 69 6c 3e 3d 39 20 29 3b 20 2a 2f 0a   avail>=9 ); */.
10000 20 20 20 20 73 7a 48 64 72 53 7a 20 3d 20 67 65      szHdrSz = ge
10010 74 56 61 72 69 6e 74 33 32 28 28 75 38 2a 29 7a  tVarint32((u8*)z
10020 44 61 74 61 2c 20 6f 66 66 73 65 74 29 3b 0a 0a  Data, offset);..
10030 20 20 20 20 2f 2a 20 54 68 65 20 4b 65 79 46 65      /* The KeyFe
10040 74 63 68 28 29 20 6f 72 20 44 61 74 61 46 65 74  tch() or DataFet
10050 63 68 28 29 20 61 62 6f 76 65 20 61 72 65 20 66  ch() above are f
10060 61 73 74 20 61 6e 64 20 77 69 6c 6c 20 67 65 74  ast and will get
10070 20 74 68 65 20 65 6e 74 69 72 65 0a 20 20 20 20   the entire.    
10080 2a 2a 20 72 65 63 6f 72 64 20 68 65 61 64 65 72  ** record header
10090 20 69 6e 20 6d 6f 73 74 20 63 61 73 65 73 2e 20   in most cases. 
100a0 20 42 75 74 20 74 68 65 79 20 77 69 6c 6c 20 66   But they will f
100b0 61 69 6c 20 74 6f 20 67 65 74 20 74 68 65 20 63  ail to get the c
100c0 6f 6d 70 6c 65 74 65 0a 20 20 20 20 2a 2a 20 72  omplete.    ** r
100d0 65 63 6f 72 64 20 68 65 61 64 65 72 20 69 66 20  ecord header if 
100e0 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65  the record heade
100f0 72 20 64 6f 65 73 20 6e 6f 74 20 66 69 74 20 6f  r does not fit o
10100 6e 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65 0a  n a single page.
10110 20 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 42 2d      ** in the B-
10120 54 72 65 65 2e 20 20 57 68 65 6e 20 74 68 61 74  Tree.  When that
10130 20 68 61 70 70 65 6e 73 2c 20 75 73 65 20 73 71   happens, use sq
10140 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
10150 42 74 72 65 65 28 29 20 74 6f 0a 20 20 20 20 2a  Btree() to.    *
10160 2a 20 61 63 71 75 69 72 65 20 74 68 65 20 63 6f  * acquire the co
10170 6d 70 6c 65 74 65 20 68 65 61 64 65 72 20 74 65  mplete header te
10180 78 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  xt..    */.    i
10190 66 28 20 21 7a 52 65 63 20 26 26 20 61 76 61 69  f( !zRec && avai
101a0 6c 3c 6f 66 66 73 65 74 20 29 7b 0a 20 20 20 20  l<offset ){.    
101b0 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 30    sMem.flags = 0
101c0 3b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 64 62 20  ;.      sMem.db 
101d0 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
101e0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
101f0 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30  omBtree(pCrsr, 0
10200 2c 20 6f 66 66 73 65 74 2c 20 70 43 2d 3e 69 73  , offset, pC->is
10210 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20  Index, &sMem);. 
10220 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
10230 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
10240 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
10250 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
10260 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d      zData = sMem
10270 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 45  .z;.    }.    zE
10280 6e 64 48 64 72 20 3d 20 28 75 38 20 2a 29 26 7a  ndHdr = (u8 *)&z
10290 44 61 74 61 5b 6f 66 66 73 65 74 5d 3b 0a 20 20  Data[offset];.  
102a0 20 20 7a 49 64 78 20 3d 20 28 75 38 20 2a 29 26    zIdx = (u8 *)&
102b0 7a 44 61 74 61 5b 73 7a 48 64 72 53 7a 5d 3b 0a  zData[szHdrSz];.
102c0 0a 20 20 20 20 2f 2a 20 53 63 61 6e 20 74 68 65  .    /* Scan the
102d0 20 68 65 61 64 65 72 20 61 6e 64 20 75 73 65 20   header and use 
102e0 69 74 20 74 6f 20 66 69 6c 6c 20 69 6e 20 74 68  it to fill in th
102f0 65 20 61 54 79 70 65 5b 5d 20 61 6e 64 20 61 4f  e aType[] and aO
10300 66 66 73 65 74 5b 5d 0a 20 20 20 20 2a 2a 20 61  ffset[].    ** a
10310 72 72 61 79 73 2e 20 20 61 54 79 70 65 5b 69 5d  rrays.  aType[i]
10320 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68   will contain th
10330 65 20 74 79 70 65 20 69 6e 74 65 67 65 72 20 66  e type integer f
10340 6f 72 20 74 68 65 20 69 2d 74 68 0a 20 20 20 20  or the i-th.    
10350 2a 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f  ** column and aO
10360 66 66 73 65 74 5b 69 5d 20 77 69 6c 6c 20 63 6f  ffset[i] will co
10370 6e 74 61 69 6e 20 74 68 65 20 6f 66 66 73 65 74  ntain the offset
10380 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
10390 69 6e 67 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  ing.    ** of th
103a0 65 20 72 65 63 6f 72 64 20 74 6f 20 74 68 65 20  e record to the 
103b0 73 74 61 72 74 20 6f 66 20 74 68 65 20 64 61 74  start of the dat
103c0 61 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 63  a for the i-th c
103d0 6f 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20 20  olumn.    */.   
103e0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 46 69 65   for(i=0; i<nFie
103f0 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ld; i++){.      
10400 69 66 28 20 7a 49 64 78 3c 7a 45 6e 64 48 64 72  if( zIdx<zEndHdr
10410 20 29 7b 0a 20 20 20 20 20 20 20 20 61 4f 66 66   ){.        aOff
10420 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65 74 3b  set[i] = offset;
10430 0a 20 20 20 20 20 20 20 20 7a 49 64 78 20 2b 3d  .        zIdx +=
10440 20 67 65 74 56 61 72 69 6e 74 33 32 28 7a 49 64   getVarint32(zId
10450 78 2c 20 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20  x, aType[i]);.  
10460 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20        offset += 
10470 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
10480 6c 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 69  lTypeLen(aType[i
10490 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ]);.      }else{
104a0 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 69  .        /* If i
104b0 20 69 73 20 6c 65 73 73 20 74 68 61 74 20 6e 46   is less that nF
104c0 69 65 6c 64 2c 20 74 68 65 6e 20 74 68 65 72 65  ield, then there
104d0 20 61 72 65 20 6c 65 73 73 20 66 69 65 6c 64 73   are less fields
104e0 20 69 6e 20 74 68 69 73 0a 20 20 20 20 20 20 20   in this.       
104f0 20 2a 2a 20 72 65 63 6f 72 64 20 74 68 61 6e 20   ** record than 
10500 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e  SetNumColumns in
10510 64 69 63 61 74 65 64 20 74 68 65 72 65 20 61 72  dicated there ar
10520 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
10530 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c  .        ** tabl
10540 65 2e 20 53 65 74 20 74 68 65 20 6f 66 66 73 65  e. Set the offse
10550 74 20 66 6f 72 20 61 6e 79 20 65 78 74 72 61 20  t for any extra 
10560 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65 73  columns not pres
10570 65 6e 74 20 69 6e 0a 20 20 20 20 20 20 20 20 2a  ent in.        *
10580 2a 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  * the record to 
10590 30 2e 20 54 68 69 73 20 74 65 6c 6c 73 20 63 6f  0. This tells co
105a0 64 65 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f 72  de below to stor
105b0 65 20 61 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20  e a NULL.       
105c0 20 2a 2a 20 69 6e 73 74 65 61 64 20 6f 66 20 64   ** instead of d
105d0 65 73 65 72 69 61 6c 69 7a 69 6e 67 20 61 20 76  eserializing a v
105e0 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65  alue from the re
105f0 63 6f 72 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f  cord..        */
10600 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74  .        aOffset
10610 5b 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  [i] = 0;.      }
10620 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
10630 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
10640 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 73 4d 65  (&sMem);.    sMe
10650 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  m.flags = MEM_Nu
10660 6c 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 77  ll;..    /* If w
10670 65 20 68 61 76 65 20 72 65 61 64 20 6d 6f 72 65  e have read more
10680 20 68 65 61 64 65 72 20 64 61 74 61 20 74 68 61   header data tha
10690 6e 20 77 61 73 20 63 6f 6e 74 61 69 6e 65 64 20  n was contained 
106a0 69 6e 20 74 68 65 20 68 65 61 64 65 72 2c 0a 20  in the header,. 
106b0 20 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20     ** or if the 
106c0 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20  end of the last 
106d0 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f  field appears to
106e0 20 62 65 20 70 61 73 74 20 74 68 65 20 65 6e 64   be past the end
106f0 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 72   of the.    ** r
10700 65 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68 65  ecord, or if the
10710 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74   end of the last
10720 20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74   field appears t
10730 6f 20 62 65 20 62 65 66 6f 72 65 20 74 68 65 20  o be before the 
10740 65 6e 64 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  end.    ** of th
10750 65 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61  e record (when a
10760 6c 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e  ll fields presen
10770 74 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74  t), then we must
10780 20 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20   be dealing .   
10790 20 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75   ** with a corru
107a0 70 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20  pt database..   
107b0 20 2a 2f 0a 20 20 20 20 69 66 28 20 7a 49 64 78   */.    if( zIdx
107c0 3e 7a 45 6e 64 48 64 72 20 7c 7c 20 6f 66 66 73  >zEndHdr || offs
107d0 65 74 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 7c  et>payloadSize |
107e0 7c 20 28 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72  | (zIdx==zEndHdr
107f0 20 26 26 20 6f 66 66 73 65 74 21 3d 70 61 79 6c   && offset!=payl
10800 6f 61 64 53 69 7a 65 29 20 29 7b 0a 20 20 20 20  oadSize) ){.    
10810 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
10820 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
10830 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
10840 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _out;.    }.  }.
10850 0a 20 20 2f 2a 20 47 65 74 20 74 68 65 20 63 6f  .  /* Get the co
10860 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  lumn information
10870 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  . If aOffset[p2]
10880 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
10890 65 6e 20 0a 20 20 2a 2a 20 64 65 73 65 72 69 61  en .  ** deseria
108a0 6c 69 7a 65 20 74 68 65 20 76 61 6c 75 65 20 66  lize the value f
108b0 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 20  rom the record. 
108c0 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69  If aOffset[p2] i
108d0 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74 68 65  s zero,.  ** the
108e0 6e 20 74 68 65 72 65 20 61 72 65 20 6e 6f 74 20  n there are not 
108f0 65 6e 6f 75 67 68 20 66 69 65 6c 64 73 20 69 6e  enough fields in
10900 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 73   the record to s
10910 61 74 69 73 66 79 20 74 68 65 0a 20 20 2a 2a 20  atisfy the.  ** 
10920 72 65 71 75 65 73 74 2e 20 20 49 6e 20 74 68 69  request.  In thi
10930 73 20 63 61 73 65 2c 20 73 65 74 20 74 68 65 20  s case, set the 
10940 76 61 6c 75 65 20 4e 55 4c 4c 20 6f 72 20 74 6f  value NULL or to
10950 20 50 34 20 69 66 20 50 34 20 69 73 0a 20 20 2a   P4 if P4 is.  *
10960 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  * a pointer to a
10970 20 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 20 20 2a   Mem object..  *
10980 2f 0a 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b  /.  if( aOffset[
10990 70 32 5d 20 29 7b 0a 20 20 20 20 61 73 73 65 72  p2] ){.    asser
109a0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
109b0 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 65 63   );.    if( zRec
109c0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
109d0 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45  3VdbeMemReleaseE
109e0 78 74 65 72 6e 61 6c 28 70 44 65 73 74 29 3b 0a  xternal(pDest);.
109f0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10a00 65 53 65 72 69 61 6c 47 65 74 28 28 75 38 20 2a  eSerialGet((u8 *
10a10 29 26 7a 52 65 63 5b 61 4f 66 66 73 65 74 5b 70  )&zRec[aOffset[p
10a20 32 5d 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20  2]], aType[p2], 
10a30 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73  pDest);.    }els
10a40 65 7b 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 73  e{.      len = s
10a50 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
10a60 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 70 32  TypeLen(aType[p2
10a70 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ]);.      sqlite
10a80 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 4d  3VdbeMemMove(&sM
10a90 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  em, pDest);.    
10aa0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
10ab0 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
10ac0 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32  Crsr, aOffset[p2
10ad0 5d 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e  ], len, pC->isIn
10ae0 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20  dex, &sMem);.   
10af0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
10b00 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
10b10 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
10b20 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ut;.      }.    
10b30 20 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a    zData = sMem.z
10b40 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
10b50 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 75 38  dbeSerialGet((u8
10b60 2a 29 7a 44 61 74 61 2c 20 61 54 79 70 65 5b 70  *)zData, aType[p
10b70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  2], pDest);.    
10b80 7d 0a 20 20 20 20 70 44 65 73 74 2d 3e 65 6e 63  }.    pDest->enc
10b90 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 7d   = encoding;.  }
10ba0 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 4f  else{.    if( pO
10bb0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45  p->p4type==P4_ME
10bc0 4d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  M ){.      sqlit
10bd0 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
10be0 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d  Copy(pDest, pOp-
10bf0 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74  >p4.pMem, MEM_St
10c00 61 74 69 63 29 3b 0a 20 20 20 20 7d 65 6c 73 65  atic);.    }else
10c10 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
10c20 70 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d  pDest->flags&MEM
10c30 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 7d 0a 20  _Null );.    }. 
10c40 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 64   }..  /* If we d
10c50 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
10c60 61 74 65 64 20 73 70 61 63 65 20 74 6f 20 68 6f  ated space to ho
10c70 6c 64 20 74 68 65 20 64 61 74 61 20 28 69 6e 20  ld the data (in 
10c80 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  the.  ** sqlite3
10c90 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
10ca0 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 29 20 74  () call above) t
10cb0 68 65 6e 20 74 72 61 6e 73 66 65 72 20 63 6f 6e  hen transfer con
10cc0 74 72 6f 6c 20 6f 66 20 74 68 61 74 0a 20 20 2a  trol of that.  *
10cd0 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
10ce0 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 6f 76  located space ov
10cf0 65 72 20 74 6f 20 74 68 65 20 70 44 65 73 74 20  er to the pDest 
10d00 73 74 72 75 63 74 75 72 65 2e 0a 20 20 2a 2a 20  structure..  ** 
10d10 54 68 69 73 20 70 72 65 76 65 6e 74 73 20 61 20  This prevents a 
10d20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 0a 20 20 2a  memory copy..  *
10d30 2f 0a 20 20 69 66 28 20 73 4d 65 6d 2e 7a 4d 61  /.  if( sMem.zMa
10d40 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 61 73 73 65  lloc ){.    asse
10d50 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d  rt( sMem.z==sMem
10d60 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20  .zMalloc );.    
10d70 61 73 73 65 72 74 28 20 21 28 70 44 65 73 74 2d  assert( !(pDest-
10d80 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
10d90 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
10da0 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20   !(pDest->flags 
10db0 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f  & (MEM_Blob|MEM_
10dc0 53 74 72 29 29 20 7c 7c 20 70 44 65 73 74 2d 3e  Str)) || pDest->
10dd0 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20  z==sMem.z );.   
10de0 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d   pDest->flags &=
10df0 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d   ~(MEM_Ephem|MEM
10e00 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 70 44  _Static);.    pD
10e10 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  est->flags |= ME
10e20 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 70 44 65 73  M_Term;.    pDes
10e30 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20  t->z = sMem.z;. 
10e40 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f     pDest->zMallo
10e50 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63  c = sMem.zMalloc
10e60 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71  ;.  }..  rc = sq
10e70 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65  lite3VdbeMemMake
10e80 57 72 69 74 65 61 62 6c 65 28 70 44 65 73 74 29  Writeable(pDest)
10e90 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  ;..op_column_out
10ea0 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  :.  UPDATE_MAX_B
10eb0 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
10ec0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
10ed0 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
10ee0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
10ef0 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74   Opcode: Affinit
10f00 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  y P1 P2 * P4 *.*
10f10 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e  *.** Apply affin
10f20 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65  ities to a range
10f30 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73   of P2 registers
10f40 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50   starting with P
10f50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
10f60 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
10f70 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
10f80 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72  ng. The nth char
10f90 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
10fa0 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
10fb0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
10fc0 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
10fd0 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
10fe0 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63   nth.** memory c
10ff0 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65  ell in the range
11000 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66  ..*/.case OP_Aff
11010 69 6e 69 74 79 3a 20 7b 0a 20 20 63 68 61 72 20  inity: {.  char 
11020 2a 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70  *zAffinity = pOp
11030 2d 3e 70 34 2e 7a 3b 0a 20 20 4d 65 6d 20 2a 70  ->p4.z;.  Mem *p
11040 44 61 74 61 30 20 3d 20 26 70 2d 3e 61 4d 65 6d  Data0 = &p->aMem
11050 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 4d 65 6d  [pOp->p1];.  Mem
11060 20 2a 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61   *pLast = &pData
11070 30 5b 70 4f 70 2d 3e 70 32 2d 31 5d 3b 0a 20 20  0[pOp->p2-1];.  
11080 4d 65 6d 20 2a 70 52 65 63 3b 0a 0a 20 20 66 6f  Mem *pRec;..  fo
11090 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70  r(pRec=pData0; p
110a0 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63  Rec<=pLast; pRec
110b0 2b 2b 29 7b 0a 20 20 20 20 45 78 70 61 6e 64 42  ++){.    ExpandB
110c0 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20 61  lob(pRec);.    a
110d0 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65  pplyAffinity(pRe
110e0 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65  c, zAffinity[pRe
110f0 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64  c-pData0], encod
11100 69 6e 67 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ing);.  }.  brea
11110 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11120 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50   MakeRecord P1 P
11130 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
11140 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69 73  Convert P2 regis
11150 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  ters beginning w
11160 69 74 68 20 50 31 20 69 6e 74 6f 20 61 20 73 69  ith P1 into a si
11170 6e 67 6c 65 20 65 6e 74 72 79 0a 2a 2a 20 73 75  ngle entry.** su
11180 69 74 61 62 6c 65 20 66 6f 72 20 75 73 65 20 61  itable for use a
11190 73 20 61 20 64 61 74 61 20 72 65 63 6f 72 64 20  s a data record 
111a0 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 61  in a database ta
111b0 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a  ble or as a key.
111c0 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20  ** in an index. 
111d0 20 54 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20   The details of 
111e0 74 68 65 20 66 6f 72 6d 61 74 20 61 72 65 20 69  the format are i
111f0 72 72 65 6c 65 76 61 6e 74 20 61 73 20 6c 6f 6e  rrelevant as lon
11200 67 20 61 73 0a 2a 2a 20 74 68 65 20 4f 50 5f 43  g as.** the OP_C
11210 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e  olumn opcode can
11220 20 64 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f   decode the reco
11230 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 20 52 65 66  rd later..** Ref
11240 65 72 20 74 6f 20 73 6f 75 72 63 65 20 63 6f 64  er to source cod
11250 65 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 74  e comments for t
11260 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68  he details of th
11270 65 20 72 65 63 6f 72 64 0a 2a 2a 20 66 6f 72 6d  e record.** form
11280 61 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  at..**.** P4 may
11290 20 62 65 20 61 20 73 74 72 69 6e 67 20 74 68 61   be a string tha
112a0 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65  t is P2 characte
112b0 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74  rs long.  The nt
112c0 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74  h character of t
112d0 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64  he.** string ind
112e0 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d  icates the colum
112f0 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20  n affinity that 
11300 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66  should be used f
11310 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69  or the nth.** fi
11320 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78  eld of the index
11330 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20   key..**.** The 
11340 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61  mapping from cha
11350 72 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69  racter to affini
11360 74 79 20 69 73 20 67 69 76 65 6e 20 62 79 20 74  ty is given by t
11370 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a  he SQLITE_AFF_.*
11380 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64  * macros defined
11390 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e   in sqliteInt.h.
113a0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
113b0 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e  NULL then all in
113c0 64 65 78 20 66 69 65 6c 64 73 20 68 61 76 65 20  dex fields have 
113d0 74 68 65 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e  the affinity NON
113e0 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61  E..*/.case OP_Ma
113f0 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 2f 2a  keRecord: {.  /*
11400 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65   Assuming the re
11410 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20  cord contains N 
11420 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f  fields, the reco
11430 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a  rd format looks.
11440 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a    ** like this:.
11450 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d    **.  ** ------
11460 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11470 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11480 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11490 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
114a0 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69  --.  ** | hdr-si
114b0 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79  ze | type 0 | ty
114c0 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70  pe 1 | ... | typ
114d0 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20  e N-1 | data0 | 
114e0 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c  ... | data N-1 |
114f0 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d   .  ** ---------
11500 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11510 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11520 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11530 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
11540 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30    **.  ** Data(0
11550 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  ) is taken from 
11560 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 44 61  register P1.  Da
11570 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d  ta(1) comes from
11580 20 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20   register P1+1. 
11590 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74 68   ** and so froth
115a0 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68  ..  **.  ** Each
115b0 20 74 79 70 65 20 66 69 65 6c 64 20 69 73 20 61   type field is a
115c0 20 76 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e   varint represen
115d0 74 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20  ting the serial 
115e0 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a  type of the .  *
115f0 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
11600 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65  data element (se
11610 65 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  e sqlite3VdbeSer
11620 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a  ialType()). The.
11630 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69    ** hdr-size fi
11640 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61  eld is also a va
11650 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
11660 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68  e offset from th
11670 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a  e beginning.  **
11680 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74   of the record t
11690 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20  o data0..  */.  
116a0 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20  u8 *zNewRecord; 
116b0 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66         /* A buff
116c0 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  er to hold the d
116d0 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20  ata for the new 
116e0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
116f0 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20  *pRec;          
11700 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65     /* The new re
11710 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44  cord */.  u64 nD
11720 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ata = 0;        
11730 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
11740 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63  tes of data spac
11750 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 20  e */.  int nHdr 
11760 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
11770 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
11780 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65   of header space
11790 20 2a 2f 0a 20 20 75 36 34 20 6e 42 79 74 65 20   */.  u64 nByte 
117a0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
117b0 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69  Data space requi
117c0 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63  red for this rec
117d0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65  ord */.  int nZe
117e0 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ro = 0;         
117f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
11800 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
11810 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
11820 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e   */.  int nVarin
11830 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
11840 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
11850 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20  in a varint */. 
11860 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65   u32 serial_type
11870 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  ;       /* Type 
11880 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  field */.  Mem *
11890 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20  pData0;         
118a0 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64    /* First field
118b0 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20   to be combined 
118c0 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  into the record 
118d0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b  */.  Mem *pLast;
118e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
118f0 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65  ast field of the
11900 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
11910 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
11920 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11930 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
11940 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20  ecord */.  char 
11950 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20  *zAffinity;     
11960 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
11970 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  y string for the
11980 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
11990 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20   file_format;   
119a0 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d      /* File form
119b0 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e  at to use for en
119c0 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  coding */.  int 
119d0 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
119e0 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64     /* Space used
119f0 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d   in zNewRecord[]
11a00 20 2a 2f 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20   */..  nField = 
11a10 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69  pOp->p1;.  zAffi
11a20 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
11a30 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65  ;.  assert( nFie
11a40 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e  ld>0 && pOp->p2>
11a50 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69  0 && pOp->p2+nFi
11a60 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  eld<=p->nMem );.
11a70 20 20 70 44 61 74 61 30 20 3d 20 26 70 2d 3e 61    pData0 = &p->a
11a80 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e  Mem[nField];.  n
11a90 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b  Field = pOp->p2;
11aa0 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74  .  pLast = &pDat
11ab0 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20  a0[nField-1];.  
11ac0 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d  file_format = p-
11ad0 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
11ae0 6d 61 74 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20  mat;..  /* Loop 
11af0 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d  through the elem
11b00 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d  ents that will m
11b10 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f 72  ake up the recor
11b20 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a  d to figure.  **
11b30 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70   out how much sp
11b40 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64 20  ace is required 
11b50 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f  for the new reco
11b60 72 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 70  rd..  */.  for(p
11b70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63  Rec=pData0; pRec
11b80 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29  <=pLast; pRec++)
11b90 7b 0a 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0a 20  {.    int len;. 
11ba0 20 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79     if( zAffinity
11bb0 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41   ){.      applyA
11bc0 66 66 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41  ffinity(pRec, zA
11bd0 66 66 69 6e 69 74 79 5b 70 52 65 63 2d 70 44 61  ffinity[pRec-pDa
11be0 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  ta0], encoding);
11bf0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
11c00 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a  Rec->flags&MEM_Z
11c10 65 72 6f 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30  ero && pRec->n>0
11c20 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
11c30 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
11c40 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a  ob(pRec);.    }.
11c50 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20      serial_type 
11c60 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
11c70 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69  ialType(pRec, fi
11c80 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20  le_format);.    
11c90 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62  len = sqlite3Vdb
11ca0 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73  eSerialTypeLen(s
11cb0 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20  erial_type);.   
11cc0 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20   nData += len;. 
11cd0 20 20 20 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74     nHdr += sqlit
11ce0 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69  e3VarintLen(seri
11cf0 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66  al_type);.    if
11d00 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20  ( pRec->flags & 
11d10 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
11d20 20 20 2f 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a    /* Only pure z
11d30 65 72 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73  ero-filled BLOBs
11d40 20 63 61 6e 20 62 65 20 69 6e 70 75 74 20 74 6f   can be input to
11d50 20 74 68 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20   this Opcode..  
11d60 20 20 20 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74      ** We do not
11d70 20 61 6c 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74   allow blobs wit
11d80 68 20 61 20 70 72 65 66 69 78 20 61 6e 64 20 61  h a prefix and a
11d90 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69   zero-filled tai
11da0 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72  l. */.      nZer
11db0 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 69 3b 0a  o += pRec->u.i;.
11dc0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6c 65      }else if( le
11dd0 6e 20 29 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f  n ){.      nZero
11de0 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 0;.    }.  }.
11df0 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20 69 6e  .  /* Add the in
11e00 69 74 69 61 6c 20 68 65 61 64 65 72 20 76 61 72  itial header var
11e10 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20 74 68  int and total th
11e20 65 20 73 69 7a 65 20 2a 2f 0a 20 20 6e 48 64 72  e size */.  nHdr
11e30 20 2b 3d 20 6e 56 61 72 69 6e 74 20 3d 20 73 71   += nVarint = sq
11e40 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e  lite3VarintLen(n
11e50 48 64 72 29 3b 0a 20 20 69 66 28 20 6e 56 61 72  Hdr);.  if( nVar
11e60 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e  int<sqlite3Varin
11e70 74 4c 65 6e 28 6e 48 64 72 29 20 29 7b 0a 20 20  tLen(nHdr) ){.  
11e80 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20    nHdr++;.  }.  
11e90 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61  nByte = nHdr+nDa
11ea0 74 61 2d 6e 5a 65 72 6f 3b 0a 20 20 69 66 28 20  ta-nZero;.  if( 
11eb0 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  nByte>db->aLimit
11ec0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
11ed0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
11ee0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a  o too_big;.  }..
11ef0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
11f00 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
11f10 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20  er has a buffer 
11f20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
11f30 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20  store .  ** the 
11f40 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20  new record. The 
11f50 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
11f60 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74  (pOp->p3) is not
11f70 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a   allowed to.  **
11f80 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69   be one of the i
11f90 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28  nput registers (
11fa0 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c  because the foll
11fb0 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20  owing call to.  
11fc0 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
11fd0 6d 47 72 6f 77 28 29 20 63 6f 75 6c 64 20 63 6c  mGrow() could cl
11fe0 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65 20  obber the value 
11ff0 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73 65  before it is use
12000 64 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  d)..  */.  asser
12010 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
12020 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p1 || pOp->p3>=p
12030 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29  Op->p1+pOp->p2 )
12040 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61  ;.  pOut = &p->a
12050 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
12060 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
12070 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e 42 79  emGrow(pOut, nBy
12080 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f  te, 0) ){.    go
12090 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
120a0 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75   zNewRecord = (u
120b0 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20  8 *)pOut->z;..  
120c0 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63  /* Write the rec
120d0 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74  ord */.  i = put
120e0 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63  Varint32(zNewRec
120f0 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f  ord, nHdr);.  fo
12100 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70  r(pRec=pData0; p
12110 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63  Rec<=pLast; pRec
12120 2b 2b 29 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f  ++){.    serial_
12130 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
12140 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
12150 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b  c, file_format);
12160 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72  .    i += putVar
12170 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72  int32(&zNewRecor
12180 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70  d[i], serial_typ
12190 65 29 3b 20 20 20 20 20 20 2f 2a 20 73 65 72 69  e);      /* seri
121a0 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20  al type */.  }. 
121b0 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30   for(pRec=pData0
121c0 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70  ; pRec<=pLast; p
121d0 52 65 63 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69  Rec++){  /* seri
121e0 61 6c 20 64 61 74 61 20 2a 2f 0a 20 20 20 20 69  al data */.    i
121f0 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53   += sqlite3VdbeS
12200 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65  erialPut(&zNewRe
12210 63 6f 72 64 5b 69 5d 2c 20 6e 42 79 74 65 2d 69  cord[i], nByte-i
12220 2c 20 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72  , pRec, file_for
12230 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65  mat);.  }.  asse
12240 72 74 28 20 69 3d 3d 6e 42 79 74 65 20 29 3b 0a  rt( i==nByte );.
12250 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
12260 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
12270 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f  =p->nMem );.  pO
12280 75 74 2d 3e 6e 20 3d 20 6e 42 79 74 65 3b 0a 20  ut->n = nByte;. 
12290 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
122a0 45 4d 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79  EM_Blob | MEM_Dy
122b0 6e 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20  n;.  pOut->xDel 
122c0 3d 20 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f  = 0;.  if( nZero
122d0 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e   ){.    pOut->u.
122e0 69 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70  i = nZero;.    p
122f0 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
12300 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f  M_Zero;.  }.  pO
12310 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
12320 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
12330 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
12340 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  ver converted to
12350 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53   text */.  REGIS
12360 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
12370 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
12380 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
12390 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
123a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74  }../* Opcode: St
123b0 61 74 65 6d 65 6e 74 20 50 31 20 2a 20 2a 20 2a  atement P1 * * *
123c0 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61   *.**.** Begin a
123d0 6e 20 69 6e 64 69 76 69 64 75 61 6c 20 73 74 61  n individual sta
123e0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
123f0 6f 6e 20 77 68 69 63 68 20 69 73 20 70 61 72 74  on which is part
12400 20 6f 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20   of a larger.** 
12410 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68  transaction.  Th
12420 69 73 20 69 73 20 6e 65 65 64 65 64 20 73 6f 20  is is needed so 
12430 74 68 61 74 20 74 68 65 20 73 74 61 74 65 6d 65  that the stateme
12440 6e 74 0a 2a 2a 20 63 61 6e 20 62 65 20 72 6f 6c  nt.** can be rol
12450 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61  led back after a
12460 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20  n error without 
12470 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62  having to roll b
12480 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72  ack the.** entir
12490 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  e transaction.  
124a0 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  The statement tr
124b0 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61  ansaction will a
124c0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20  utomatically.** 
124d0 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20  commit when the 
124e0 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a  VDBE halts..**.*
124f0 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
12500 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
12510 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 75 74  currently in aut
12520 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 20 28 74 68  ocommit mode (th
12530 61 74 20 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79  at .** is to say
12540 2c 20 69 66 20 69 74 20 69 73 20 69 6e 20 62 65  , if it is in be
12550 74 77 65 65 6e 20 42 45 47 49 4e 20 61 6e 64 20  tween BEGIN and 
12560 43 4f 4d 4d 49 54 29 0a 2a 2a 20 61 6e 64 20 69  COMMIT).** and i
12570 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6f  f there are no o
12580 74 68 65 72 20 61 63 74 69 76 65 20 73 74 61 74  ther active stat
12590 65 6d 65 6e 74 73 20 6f 6e 20 74 68 65 20 73 61  ements on the sa
125a0 6d 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  me database.** c
125b0 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e 20  onnection, then 
125c0 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69  this operation i
125d0 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 4e 6f 20 73  s a no-op.  No s
125e0 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
125f0 74 69 6f 6e 0a 2a 2a 20 69 73 20 6e 65 65 64 65  tion.** is neede
12600 64 20 73 69 6e 63 65 20 61 6e 79 20 65 72 72 6f  d since any erro
12610 72 20 63 61 6e 20 75 73 65 20 74 68 65 20 6e 6f  r can use the no
12620 72 6d 61 6c 20 52 4f 4c 4c 42 41 43 4b 20 70 72  rmal ROLLBACK pr
12630 6f 63 65 73 73 20 74 6f 0a 2a 2a 20 75 6e 64 6f  ocess to.** undo
12640 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 0a 2a 2a 20   changes..**.** 
12650 49 66 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  If a statement t
12660 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
12670 61 72 74 65 64 2c 20 74 68 65 6e 20 61 20 73 74  arted, then a st
12680 61 74 65 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 20  atement journal 
12690 66 69 6c 65 0a 2a 2a 20 77 69 6c 6c 20 62 65 20  file.** will be 
126a0 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 69 6e  allocated and in
126b0 69 74 69 61 6c 69 7a 65 64 2e 0a 2a 2a 0a 2a 2a  itialized..**.**
126c0 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69   The statement i
126d0 73 20 62 65 67 75 6e 20 6f 6e 20 74 68 65 20 64  s begun on the d
126e0 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 69 74  atabase file wit
126f0 68 20 69 6e 64 65 78 20 50 31 2e 20 20 54 68 65  h index P1.  The
12700 20 6d 61 69 6e 0a 2a 2a 20 64 61 74 61 62 61 73   main.** databas
12710 65 20 66 69 6c 65 20 68 61 73 20 61 6e 20 69 6e  e file has an in
12720 64 65 78 20 6f 66 20 30 20 61 6e 64 20 74 68 65  dex of 0 and the
12730 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74   file used for t
12740 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 0a  emporary tables.
12750 2a 2a 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  ** has an index 
12760 6f 66 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  of 1..*/.case OP
12770 5f 53 74 61 74 65 6d 65 6e 74 3a 20 7b 0a 20 20  _Statement: {.  
12780 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  if( db->autoComm
12790 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 63 74  it==0 || db->act
127a0 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a  iveVdbeCnt>1 ){.
127b0 20 20 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d      int i = pOp-
127c0 3e 70 31 3b 0a 20 20 20 20 42 74 72 65 65 20 2a  >p1;.    Btree *
127d0 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28  pBt;.    assert(
127e0 20 69 3e 3d 30 20 26 26 20 69 3c 64 62 2d 3e 6e   i>=0 && i<db->n
127f0 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Db );.    assert
12800 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  ( db->aDb[i].pBt
12810 21 3d 30 20 29 3b 0a 20 20 20 20 70 42 74 20 3d  !=0 );.    pBt =
12820 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b   db->aDb[i].pBt;
12830 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
12840 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
12850 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 61  ns(pBt) );.    a
12860 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
12870 4d 61 73 6b 20 26 20 28 31 3c 3c 69 29 29 21 3d  Mask & (1<<i))!=
12880 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 73 71  0 );.    if( !sq
12890 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 53 74  lite3BtreeIsInSt
128a0 6d 74 28 70 42 74 29 20 29 7b 0a 20 20 20 20 20  mt(pBt) ){.     
128b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
128c0 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 29  eeBeginStmt(pBt)
128d0 3b 0a 20 20 20 20 20 20 70 2d 3e 6f 70 65 6e 65  ;.      p->opene
128e0 64 53 74 61 74 65 6d 65 6e 74 20 3d 20 31 3b 0a  dStatement = 1;.
128f0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
12900 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
12910 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50   AutoCommit P1 P
12920 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65  2 * * *.**.** Se
12930 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  t the database a
12940 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20  uto-commit flag 
12950 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20  to P1 (1 or 0). 
12960 49 66 20 50 32 20 69 73 20 74 72 75 65 2c 20 72  If P2 is true, r
12970 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20  oll.** back any 
12980 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65  currently active
12990 20 62 74 72 65 65 20 74 72 61 6e 73 61 63 74 69   btree transacti
129a0 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61 72  ons. If there ar
129b0 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20  e any active.** 
129c0 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20  VMs (apart from 
129d0 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20  this one), then 
129e0 74 68 65 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f  the COMMIT or RO
129f0 4c 4c 42 41 43 4b 20 73 74 61 74 65 6d 65 6e 74  LLBACK statement
12a00 20 66 61 69 6c 73 2e 0a 2a 2a 0a 2a 2a 20 54 68   fails..**.** Th
12a10 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
12a20 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20  auses the VM to 
12a30 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  halt..*/.case OP
12a40 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20  _AutoCommit: {. 
12a50 20 75 38 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b   u8 i = pOp->p1;
12a60 0a 20 20 75 38 20 72 6f 6c 6c 62 61 63 6b 20 3d  .  u8 rollback =
12a70 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 61 73 73   pOp->p2;..  ass
12a80 65 72 74 28 20 69 3d 3d 31 20 7c 7c 20 69 3d 3d  ert( i==1 || i==
12a90 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  0 );.  assert( i
12aa0 3d 3d 31 20 7c 7c 20 72 6f 6c 6c 62 61 63 6b 3d  ==1 || rollback=
12ab0 3d 30 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28  =0 );..  assert(
12ac0 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43   db->activeVdbeC
12ad0 6e 74 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c  nt>0 );  /* At l
12ae0 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d  east this one VM
12af0 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 0a 20   is active */.. 
12b00 20 69 66 28 20 64 62 2d 3e 61 63 74 69 76 65 56   if( db->activeV
12b10 64 62 65 43 6e 74 3e 31 20 26 26 20 69 20 26 26  dbeCnt>1 && i &&
12b20 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   !db->autoCommit
12b30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
12b40 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
12b50 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d  mplements a COMM
12b60 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20  IT or ROLLBACK, 
12b70 6f 74 68 65 72 20 56 4d 73 20 61 72 65 0a 20 20  other VMs are.  
12b80 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e 6e 69    ** still runni
12b90 6e 67 2c 20 61 6e 64 20 61 20 74 72 61 6e 73 61  ng, and a transa
12ba0 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 2c  ction is active,
12bb0 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
12bc0 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20 20 20   indicating.    
12bd0 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 74 68 65  ** that the othe
12be0 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c  r VMs must compl
12bf0 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20  ete first. .    
12c00 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  */.    sqlite3Se
12c10 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
12c20 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74  Msg, db, "cannot
12c30 20 25 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   %s transaction 
12c40 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c  - ".        "SQL
12c50 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
12c60 72 6f 67 72 65 73 73 22 2c 0a 20 20 20 20 20 20  rogress",.      
12c70 20 20 72 6f 6c 6c 62 61 63 6b 20 3f 20 22 72 6f    rollback ? "ro
12c80 6c 6c 62 61 63 6b 22 20 3a 20 22 63 6f 6d 6d 69  llback" : "commi
12c90 74 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  t");.    rc = SQ
12ca0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 65  LITE_ERROR;.  }e
12cb0 6c 73 65 20 69 66 28 20 69 21 3d 64 62 2d 3e 61  lse if( i!=db->a
12cc0 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
12cd0 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 7b 0a   if( pOp->p2 ){.
12ce0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69 3d        assert( i=
12cf0 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  =1 );.      sqli
12d00 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64  te3RollbackAll(d
12d10 62 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  b);.      db->au
12d20 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
12d30 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
12d40 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
12d50 69 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  i;.      if( sql
12d60 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d  ite3VdbeHalt(p)=
12d70 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
12d80 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20          p->pc = 
12d90 70 63 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  pc;.        db->
12da0 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 2d 69  autoCommit = 1-i
12db0 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20  ;.        p->rc 
12dc0 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
12dd0 53 59 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  SY;.        goto
12de0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
12df0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
12e00 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  if( p->rc==SQLIT
12e10 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63  E_OK ){.      rc
12e20 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a   = SQLITE_DONE;.
12e30 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12e40 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
12e50 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f  OR;.    }.    go
12e60 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
12e70 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
12e80 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
12e90 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20  ->zErrMsg, db,. 
12ea0 20 20 20 20 20 20 20 28 21 69 29 3f 22 63 61 6e         (!i)?"can
12eb0 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e  not start a tran
12ec0 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61  saction within a
12ed0 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a   transaction":(.
12ee0 20 20 20 20 20 20 20 20 28 72 6f 6c 6c 62 61 63          (rollbac
12ef0 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62  k)?"cannot rollb
12f00 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  ack - no transac
12f10 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a  tion is active":
12f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12f30 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d      "cannot comm
12f40 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  it - no transact
12f50 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29  ion is active"))
12f60 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20  ;.         .    
12f70 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
12f80 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  R;.  }.  break;.
12f90 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72  }../* Opcode: Tr
12fa0 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20  ansaction P1 P2 
12fb0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69  * * *.**.** Begi
12fc0 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  n a transaction.
12fd0 20 20 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f    The transactio
12fe0 6e 20 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f  n ends when a Co
12ff0 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b  mmit or Rollback
13000 0a 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e  .** opcode is en
13010 63 6f 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65  countered.  Depe
13020 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20  nding on the ON 
13030 43 4f 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67  CONFLICT setting
13040 2c 20 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63  , the.** transac
13050 74 69 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20  tion might also 
13060 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69  be rolled back i
13070 66 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e  f an error is en
13080 63 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a  countered..**.**
13090 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
130a0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
130b0 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74   file on which t
130c0 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
130d0 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49  s.** started.  I
130e0 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61  ndex 0 is the ma
130f0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
13100 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20   and index 1 is 
13110 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64  the.** file used
13120 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74   for temporary t
13130 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20  ables.  Indices 
13140 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65  of 2 or more are
13150 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74   used for.** att
13160 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
13170 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  .**.** If P2 is 
13180 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61  non-zero, then a
13190 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
131a0 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20 20  on is started.  
131b0 41 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20  A RESERVED lock 
131c0 69 73 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f  is.** obtained o
131d0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
131e0 69 6c 65 20 77 68 65 6e 20 61 20 77 72 69 74 65  ile when a write
131f0 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
13200 73 74 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20  started.  No.** 
13210 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 63 61  other process ca
13220 6e 20 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20  n start another 
13230 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
13240 6e 20 77 68 69 6c 65 20 74 68 69 73 20 74 72 61  n while this tra
13250 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75  nsaction is.** u
13260 6e 64 65 72 77 61 79 2e 20 20 53 74 61 72 74 69  nderway.  Starti
13270 6e 67 20 61 20 77 72 69 74 65 20 74 72 61 6e 73  ng a write trans
13280 61 63 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61  action also crea
13290 74 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a  tes a rollback j
132a0 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69  ournal. A.** wri
132b0 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  te transaction m
132c0 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62  ust be started b
132d0 65 66 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65  efore any change
132e0 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f  s can be made to
132f0 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
13300 2e 20 20 49 66 20 50 32 20 69 73 20 32 20 6f 72  .  If P2 is 2 or
13310 20 67 72 65 61 74 65 72 20 74 68 65 6e 20 61 6e   greater then an
13320 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20   EXCLUSIVE lock 
13330 69 73 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64  is also obtained
13340 0a 2a 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e  .** on the file.
13350 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  .**.** If P2 is 
13360 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61  zero, then a rea
13370 64 2d 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e  d-lock is obtain
13380 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ed on the databa
13390 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65  se file..*/.case
133a0 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a   OP_Transaction:
133b0 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70   {.  int i = pOp
133c0 2d 3e 70 31 3b 0a 20 20 42 74 72 65 65 20 2a 70  ->p1;.  Btree *p
133d0 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69  Bt;..  assert( i
133e0 3e 3d 30 20 26 26 20 69 3c 64 62 2d 3e 6e 44 62  >=0 && i<db->nDb
133f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
13400 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31  ->btreeMask & (1
13410 3c 3c 69 29 29 21 3d 30 20 29 3b 0a 20 20 70 42  <<i))!=0 );.  pB
13420 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70  t = db->aDb[i].p
13430 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29  Bt;..  if( pBt )
13440 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
13450 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e  e3BtreeBeginTran
13460 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b  s(pBt, pOp->p2);
13470 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
13480 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
13490 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20    p->pc = pc;.  
134a0 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
134b0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
134c0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
134d0 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20  turn;.    }.    
134e0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
134f0 4b 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f  K && rc!=SQLITE_
13500 52 45 41 44 4f 4e 4c 59 20 2f 2a 20 26 26 20 72  READONLY /* && r
13510 63 21 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 2a  c!=SQLITE_BUSY *
13520 2f 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  / ){.      goto 
13530 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
13540 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  or;.    }.  }.  
13550 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
13560 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20  ode: ReadCookie 
13570 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
13580 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e  ** Read cookie n
13590 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61  umber P3 from da
135a0 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 77 72  tabase P1 and wr
135b0 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69  ite it into regi
135c0 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d  ster P2..** P3==
135d0 30 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20  0 is the schema 
135e0 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 31 20  version.  P3==1 
135f0 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
13600 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 32  format..** P3==2
13610 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e   is the recommen
13620 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20  ded pager cache 
13630 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72  size, and so for
13640 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a  th.  P1==0 is.**
13650 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
13660 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d  se file and P1==
13670 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  1 is the databas
13680 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73  e file used to s
13690 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72  tore.** temporar
136a0 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  y tables..**.** 
136b0 49 66 20 50 31 20 69 73 20 6e 65 67 61 74 69 76  If P1 is negativ
136c0 65 2c 20 74 68 65 6e 20 74 68 69 73 20 69 73 20  e, then this is 
136d0 61 20 72 65 71 75 65 73 74 20 74 6f 20 72 65 61  a request to rea
136e0 64 20 74 68 65 20 73 69 7a 65 20 6f 66 20 61 0a  d the size of a.
136f0 2a 2a 20 64 61 74 61 62 61 73 65 73 20 66 72 65  ** databases fre
13700 65 2d 6c 69 73 74 2e 20 50 33 20 6d 75 73 74 20  e-list. P3 must 
13710 62 65 20 73 65 74 20 74 6f 20 31 20 69 6e 20 74  be set to 1 in t
13720 68 69 73 20 63 61 73 65 2e 20 54 68 65 20 61 63  his case. The ac
13730 74 75 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65  tual.** database
13740 20 61 63 63 65 73 73 65 64 20 69 73 20 28 28 50   accessed is ((P
13750 31 2b 31 29 2a 2d 31 29 2e 20 46 6f 72 20 65 78  1+1)*-1). For ex
13760 61 6d 70 6c 65 2c 20 61 20 50 31 20 70 61 72 61  ample, a P1 para
13770 6d 65 74 65 72 20 6f 66 20 2d 31 0a 2a 2a 20 63  meter of -1.** c
13780 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 64 61  orresponds to da
13790 74 61 62 61 73 65 20 30 20 28 22 6d 61 69 6e 22  tabase 0 ("main"
137a0 29 2c 20 61 20 50 31 20 6f 66 20 2d 32 20 69 73  ), a P1 of -2 is
137b0 20 64 61 74 61 62 61 73 65 20 31 20 28 22 74 65   database 1 ("te
137c0 6d 70 22 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  mp")..**.** Ther
137d0 65 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64  e must be a read
137e0 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74  -lock on the dat
137f0 61 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20  abase (either a 
13800 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d  transaction.** m
13810 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f  ust be started o
13820 72 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20  r there must be 
13830 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20  an open cursor) 
13840 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74  before.** execut
13850 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
13860 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
13870 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20  _ReadCookie: {  
13880 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13890 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
138a0 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a  */.  int iMeta;.
138b0 20 20 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d    int iDb = pOp-
138c0 3e 70 31 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b  >p1;.  int iCook
138d0 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 0a 20  ie = pOp->p3;.. 
138e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
138f0 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f  <SQLITE_N_BTREE_
13900 4d 45 54 41 20 29 3b 0a 20 20 69 66 28 20 69 44  META );.  if( iD
13910 62 3c 30 20 29 7b 0a 20 20 20 20 69 44 62 20 3d  b<0 ){.    iDb =
13920 20 28 2d 31 2a 28 69 44 62 2b 31 29 29 3b 0a 20   (-1*(iDb+1));. 
13930 20 20 20 69 43 6f 6f 6b 69 65 20 2a 3d 20 2d 31     iCookie *= -1
13940 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
13950 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
13960 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
13970 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  t( db->aDb[iDb].
13980 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  pBt!=0 );.  asse
13990 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
139a0 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d 30  k & (1<<iDb))!=0
139b0 20 29 3b 0a 20 20 2f 2a 20 54 68 65 20 69 6e 64   );.  /* The ind
139c0 65 78 69 6e 67 20 6f 66 20 6d 65 74 61 20 76 61  exing of meta va
139d0 6c 75 65 73 20 61 74 20 74 68 65 20 73 63 68 65  lues at the sche
139e0 6d 61 20 6c 61 79 65 72 20 69 73 20 6f 66 66 20  ma layer is off 
139f0 62 79 20 6f 6e 65 20 66 72 6f 6d 0a 20 20 2a 2a  by one from.  **
13a00 20 74 68 65 20 69 6e 64 65 78 69 6e 67 20 69 6e   the indexing in
13a10 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65 72   the btree layer
13a20 2e 20 20 54 68 65 20 62 74 72 65 65 20 63 6f 6e  .  The btree con
13a30 73 69 64 65 72 73 20 6d 65 74 61 5b 30 5d 20 74  siders meta[0] t
13a40 6f 0a 20 20 2a 2a 20 62 65 20 74 68 65 20 6e 75  o.  ** be the nu
13a50 6d 62 65 72 20 6f 66 20 66 72 65 65 20 70 61 67  mber of free pag
13a60 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
13a70 73 65 20 28 61 20 72 65 61 64 2d 6f 6e 6c 79 20  se (a read-only 
13a80 76 61 6c 75 65 29 0a 20 20 2a 2a 20 61 6e 64 20  value).  ** and 
13a90 6d 65 74 61 5b 31 5d 20 74 6f 20 62 65 20 74 68  meta[1] to be th
13aa0 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 2e  e schema cookie.
13ab0 20 20 54 68 65 20 73 63 68 65 6d 61 20 6c 61 79    The schema lay
13ac0 65 72 20 63 6f 6e 73 69 64 65 72 73 0a 20 20 2a  er considers.  *
13ad0 2a 20 6d 65 74 61 5b 31 5d 20 74 6f 20 62 65 20  * meta[1] to be 
13ae0 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
13af0 65 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74  e.  So we have t
13b00 6f 20 73 68 69 66 74 20 74 68 65 20 69 6e 64 65  o shift the inde
13b10 78 0a 20 20 2a 2a 20 62 79 20 6f 6e 65 20 69 6e  x.  ** by one in
13b20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
13b30 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20  tatement..  */. 
13b40 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
13b50 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44  eeGetMeta(db->aD
13b60 62 5b 69 44 62 5d 2e 70 42 74 2c 20 31 20 2b 20  b[iDb].pBt, 1 + 
13b70 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29  iCookie, (u32 *)
13b80 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d  &iMeta);.  pOut-
13b90 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20  >u.i = iMeta;.  
13ba0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
13bb0 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
13bc0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
13bd0 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20  code: SetCookie 
13be0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
13bf0 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e  ** Write the con
13c00 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
13c10 20 50 33 20 28 69 6e 74 65 72 70 72 65 74 65 64   P3 (interpreted
13c20 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a   as an integer).
13c30 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e  ** into cookie n
13c40 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74 61  umber P2 of data
13c50 62 61 73 65 20 50 31 2e 0a 2a 2a 20 50 32 3d 3d  base P1..** P2==
13c60 30 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20  0 is the schema 
13c70 76 65 72 73 69 6f 6e 2e 20 20 50 32 3d 3d 31 20  version.  P2==1 
13c80 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
13c90 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d 3d 32  format..** P2==2
13ca0 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e   is the recommen
13cb0 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20  ded pager cache 
13cc0 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72  size, and so for
13cd0 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a  th.  P1==0 is.**
13ce0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
13cf0 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d  se file and P1==
13d00 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  1 is the databas
13d10 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73  e file used to s
13d20 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72  tore.** temporar
13d30 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  y tables..**.** 
13d40 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75  A transaction mu
13d50 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65  st be started be
13d60 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20 74  fore executing t
13d70 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  his opcode..*/.c
13d80 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65  ase OP_SetCookie
13d90 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33  : {       /* in3
13da0 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20   */.  Db *pDb;. 
13db0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
13dc0 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f  <SQLITE_N_BTREE_
13dd0 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74  META );.  assert
13de0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
13df0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
13e00 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
13e10 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
13e20 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
13e30 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
13e40 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
13e50 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
13e60 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  0 );.  sqlite3Vd
13e70 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
13e80 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20  pIn3);.  /* See 
13e90 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78  note about index
13ea0 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f   shifting on OP_
13eb0 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20  ReadCookie */.  
13ec0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
13ed0 65 55 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d  eUpdateMeta(pDb-
13ee0 3e 70 42 74 2c 20 31 2b 70 4f 70 2d 3e 70 32 2c  >pBt, 1+pOp->p2,
13ef0 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29   (int)pIn3->u.i)
13f00 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  ;.  if( pOp->p2=
13f10 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65  =0 ){.    /* Whe
13f20 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  n the schema coo
13f30 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63  kie changes, rec
13f40 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b  ord the new cook
13f50 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f  ie internally */
13f60 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
13f70 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  a->schema_cookie
13f80 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20   = pIn3->u.i;.  
13f90 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53    db->flags |= S
13fa0 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
13fb0 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  ges;.  }else if(
13fc0 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 29 7b 0a 20   pOp->p2==1 ){. 
13fd0 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61     /* Record cha
13fe0 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65  nges in the file
13ff0 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70   format */.    p
14000 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
14010 65 5f 66 6f 72 6d 61 74 20 3d 20 70 49 6e 33 2d  e_format = pIn3-
14020 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20  >u.i;.  }.  if( 
14030 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20  pOp->p1==1 ){.  
14040 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
14050 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74 61  all prepared sta
14060 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72  tements whenever
14070 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
14080 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61  se.    ** schema
14090 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69   is changed.  Ti
140a0 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20  cket #1644 */.  
140b0 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
140c0 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
140d0 73 28 64 62 29 3b 0a 20 20 7d 0a 20 20 62 72 65  s(db);.  }.  bre
140e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
140f0 3a 20 56 65 72 69 66 79 43 6f 6f 6b 69 65 20 50  : VerifyCookie P
14100 31 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65  1 P2 *.**.** Che
14110 63 6b 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ck the value of 
14120 67 6c 6f 62 61 6c 20 64 61 74 61 62 61 73 65 20  global database 
14130 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
14140 20 30 20 28 74 68 65 0a 2a 2a 20 73 63 68 65 6d   0 (the.** schem
14150 61 20 76 65 72 73 69 6f 6e 29 20 61 6e 64 20 6d  a version) and m
14160 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 65  ake sure it is e
14170 71 75 61 6c 20 74 6f 20 50 32 2e 20 20 0a 2a 2a  qual to P2.  .**
14180 20 50 31 20 69 73 20 74 68 65 20 64 61 74 61 62   P1 is the datab
14190 61 73 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68  ase number which
141a0 20 69 73 20 30 20 66 6f 72 20 74 68 65 20 6d 61   is 0 for the ma
141b0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
141c0 0a 2a 2a 20 61 6e 64 20 31 20 66 6f 72 20 74 68  .** and 1 for th
141d0 65 20 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74  e file holding t
141e0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20  emporary tables 
141f0 61 6e 64 20 73 6f 6d 65 20 68 69 67 68 65 72 20  and some higher 
14200 6e 75 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75  number.** for au
14210 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
14220 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f  s..**.** The coo
14230 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20  kie changes its 
14240 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74  value whenever t
14250 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
14260 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54  ma changes..** T
14270 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  his operation is
14280 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20   used to detect 
14290 77 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f  when that the co
142a0 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64  okie has changed
142b0 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65  .** and that the
142c0 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
142d0 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64   needs to reread
142e0 20 74 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a   the schema..**.
142f0 2a 2a 20 45 69 74 68 65 72 20 61 20 74 72 61 6e  ** Either a tran
14300 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f  saction needs to
14310 20 68 61 76 65 20 62 65 65 6e 20 73 74 61 72 74   have been start
14320 65 64 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e  ed or an OP_Open
14330 20 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20   needs.** to be 
14340 65 78 65 63 75 74 65 64 20 28 74 6f 20 65 73 74  executed (to est
14350 61 62 6c 69 73 68 20 61 20 72 65 61 64 20 6c 6f  ablish a read lo
14360 63 6b 29 20 62 65 66 6f 72 65 20 74 68 69 73 20  ck) before this 
14370 6f 70 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76  opcode is.** inv
14380 6f 6b 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  oked..*/.case OP
14390 5f 56 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b  _VerifyCookie: {
143a0 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
143b0 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 61 73  Btree *pBt;.  as
143c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
143d0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
143e0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
143f0 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
14400 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d   (1<<pOp->p1))!=
14410 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d  0 );.  pBt = db-
14420 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
14430 74 3b 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a  t;.  if( pBt ){.
14440 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
14450 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74  BtreeGetMeta(pBt
14460 2c 20 31 2c 20 28 75 33 32 20 2a 29 26 69 4d 65  , 1, (u32 *)&iMe
14470 74 61 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ta);.  }else{.  
14480 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
14490 3b 0a 20 20 20 20 69 4d 65 74 61 20 3d 20 30 3b  ;.    iMeta = 0;
144a0 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53  .  }.  if( rc==S
144b0 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d 65 74  QLITE_OK && iMet
144c0 61 21 3d 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20  a!=pOp->p2 ){.  
144d0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
144e0 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
144f0 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  .    p->zErrMsg 
14500 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75  = sqlite3DbStrDu
14510 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65 20  p(db, "database 
14520 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67  schema has chang
14530 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20  ed");.    /* If 
14540 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69  the schema-cooki
14550 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  e from the datab
14560 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73  ase file matches
14570 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20   the cookie .   
14580 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20   ** stored with 
14590 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65  the in-memory re
145a0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
145b0 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20  the schema, do. 
145c0 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64     ** not reload
145d0 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d   the schema from
145e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
145f0 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  le..    **.    *
14600 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62  * If virtual-tab
14610 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20  les are in use, 
14620 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74  this is not just
14630 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
14640 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20  ..    ** Often, 
14650 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74  v-tables store t
14660 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68  heir data in oth
14670 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73  er SQLite tables
14680 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61  , which.    ** a
14690 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20  re queried from 
146a0 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61  within xNext() a
146b0 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65  nd other v-table
146c0 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20   methods using. 
146d0 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71     ** prepared q
146e0 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68 20  ueries. If such 
146f0 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f  a query is out-o
14700 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f  f-date, we do no
14710 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a  t want to.    **
14720 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61 74   discard the dat
14730 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73  abase schema, as
14740 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20 69   the user code i
14750 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a  mplementing the.
14760 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77      ** v-table w
14770 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20  ould have to be 
14780 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73 71  ready for the sq
14790 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
147a0 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20  ture itself.    
147b0 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64  ** to be invalid
147c0 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73 71  ated whenever sq
147d0 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73 20  lite3_step() is 
147e0 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
147f0 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74  in .    ** a v-t
14800 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20  able method..   
14810 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   */.    if( db->
14820 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63  aDb[pOp->p1].pSc
14830 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
14840 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20  kie!=iMeta ){.  
14850 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
14860 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64  InternalSchema(d
14870 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20  b, pOp->p1);.   
14880 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 45   }..    sqlite3E
14890 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
148a0 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20  tements(db);.   
148b0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48   rc = SQLITE_SCH
148c0 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  EMA;.  }.  break
148d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
148e0 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20 50  OpenRead P1 P2 P
148f0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70  3 P4 P5.**.** Op
14900 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63  en a read-only c
14910 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61  ursor for the da
14920 74 61 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f  tabase table who
14930 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a  se root page is.
14940 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61 62  ** P2 in a datab
14950 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64  ase file.  The d
14960 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20  atabase file is 
14970 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33  determined by P3
14980 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e  . .** P3==0 mean
14990 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
149a0 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73  ase, P3==1 means
149b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73   the database us
149c0 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f  ed for .** tempo
149d0 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64  rary tables, and
149e0 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64   P3>1 means used
149f0 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
14a00 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64  ng attached.** d
14a10 61 74 61 62 61 73 65 2e 20 20 47 69 76 65 20 74  atabase.  Give t
14a20 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e  he new cursor an
14a30 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50   identifier of P
14a40 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61  1.  The P1.** va
14a50 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65  lues need not be
14a60 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20   contiguous but 
14a70 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68  all P1 values sh
14a80 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e  ould be small in
14a90 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73  tegers..** It is
14aa0 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31   an error for P1
14ab0 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e   to be negative.
14ac0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20  .**.** If P5!=0 
14ad0 74 68 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e  then use the con
14ae0 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
14af0 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20   P2 as the root 
14b00 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65  page, not.** the
14b10 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73   value of P2 its
14b20 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  elf..**.** There
14b30 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20   will be a read 
14b40 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61  lock on the data
14b50 62 61 73 65 20 77 68 65 6e 65 76 65 72 20 74 68  base whenever th
14b60 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65  ere is an.** ope
14b70 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68  n cursor.  If th
14b80 65 20 64 61 74 61 62 61 73 65 20 77 61 73 20 75  e database was u
14b90 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f  nlocked prior to
14ba0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
14bb0 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64  n.** then a read
14bc0 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65   lock is acquire
14bd0 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69  d as part of thi
14be0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  s instruction.  
14bf0 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61  A read.** lock a
14c00 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63  llows other proc
14c10 65 73 73 65 73 20 74 6f 20 72 65 61 64 20 74 68  esses to read th
14c20 65 20 64 61 74 61 62 61 73 65 20 62 75 74 20 70  e database but p
14c30 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20  rohibits.** any 
14c40 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 66 72  other process fr
14c50 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65  om modifying the
14c60 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20   database.  The 
14c70 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20  read lock is.** 
14c80 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c  released when al
14c90 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c  l cursors are cl
14ca0 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73 20 69  osed.  If this i
14cb0 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d  nstruction attem
14cc0 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20  pts.** to get a 
14cd0 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61  read lock but fa
14ce0 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70 74 20  ils, the script 
14cf0 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20  terminates with 
14d00 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53  an.** SQLITE_BUS
14d10 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a  Y error code..**
14d20 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
14d30 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
14d40 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
14d50 74 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65  ture that define
14d60 73 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74  s the.** content
14d70 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 73   and collating s
14d80 65 71 75 65 6e 63 65 20 6f 66 20 69 6e 64 69 63  equence of indic
14d90 65 73 2e 20 20 50 34 20 69 73 20 4e 55 4c 4c 20  es.  P4 is NULL 
14da0 66 6f 72 20 63 75 72 73 6f 72 73 0a 2a 2a 20 74  for cursors.** t
14db0 68 61 74 20 61 72 65 20 6e 6f 74 20 70 6f 69 6e  hat are not poin
14dc0 74 69 6e 67 20 74 6f 20 69 6e 64 69 63 65 73 2e  ting to indices.
14dd0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20  .**.** See also 
14de0 4f 70 65 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a  OpenWrite..*/./*
14df0 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69   Opcode: OpenWri
14e00 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
14e10 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  5.**.** Open a r
14e20 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
14e30 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65   named P1 on the
14e40 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
14e50 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61  whose root.** pa
14e60 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66  ge is P2.  Or if
14e70 20 50 35 21 3d 30 20 75 73 65 20 74 68 65 20 63   P5!=0 use the c
14e80 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
14e90 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68  er P2 to find th
14ea0 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a  e.** root page..
14eb0 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  **.** The P4 val
14ec0 75 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ue is a pointer 
14ed0 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  to a KeyInfo str
14ee0 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66 69  ucture that defi
14ef0 6e 65 73 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65  nes the.** conte
14f00 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  nt and collating
14f10 20 73 65 71 75 65 6e 63 65 20 6f 66 20 69 6e 64   sequence of ind
14f20 69 63 65 73 2e 20 20 50 34 20 69 73 20 4e 55 4c  ices.  P4 is NUL
14f30 4c 20 66 6f 72 20 63 75 72 73 6f 72 73 0a 2a 2a  L for cursors.**
14f40 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 70 6f   that are not po
14f50 69 6e 74 69 6e 67 20 74 6f 20 69 6e 64 69 63 65  inting to indice
14f60 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  s..**.** This in
14f70 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20  struction works 
14f80 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65  just like OpenRe
14f90 61 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ad except that i
14fa0 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73  t opens the curs
14fb0 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72  or.** in read/wr
14fc0 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61  ite mode.  For a
14fd0 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68   given table, th
14fe0 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f  ere can be one o
14ff0 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79  r more read-only
15000 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61  .** cursors or a
15010 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69   single read/wri
15020 74 65 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f  te cursor but no
15030 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65  t both..**.** Se
15040 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e  e also OpenRead.
15050 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
15060 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70  Read:.case OP_Op
15070 65 6e 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74  enWrite: {.  int
15080 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
15090 69 6e 74 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  int p2 = pOp->p2
150a0 3b 0a 20 20 69 6e 74 20 69 44 62 20 3d 20 70 4f  ;.  int iDb = pO
150b0 70 2d 3e 70 33 3b 0a 20 20 69 6e 74 20 77 72 46  p->p3;.  int wrF
150c0 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58  lag;.  Btree *pX
150d0 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 75 72  ;.  Cursor *pCur
150e0 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 0a  ;.  Db *pDb;.  .
150f0 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
15100 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
15110 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
15120 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
15130 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 70  <iDb))!=0 );.  p
15140 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44  Db = &db->aDb[iD
15150 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e  b];.  pX = pDb->
15160 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pBt;.  assert( p
15170 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  X!=0 );.  if( pO
15180 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
15190 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77  enWrite ){.    w
151a0 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 69  rFlag = 1;.    i
151b0 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  f( pDb->pSchema-
151c0 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70  >file_format < p
151d0 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
151e0 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d  rmat ){.      p-
151f0 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
15200 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65  mat = pDb->pSche
15210 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b  ma->file_format;
15220 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
15230 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a      wrFlag = 0;.
15240 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
15250 35 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  5 ){.    assert(
15260 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73   p2>0 );.    ass
15270 65 72 74 28 20 70 32 3c 3d 70 2d 3e 6e 4d 65 6d  ert( p2<=p->nMem
15280 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26   );.    pIn2 = &
15290 70 2d 3e 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20  p->aMem[p2];.   
152a0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
152b0 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b  ntegerify(pIn2);
152c0 0a 20 20 20 20 70 32 20 3d 20 70 49 6e 32 2d 3e  .    p2 = pIn2->
152d0 75 2e 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28  u.i;.    assert(
152e0 20 70 32 3e 3d 32 20 29 3b 0a 20 20 7d 0a 20 20   p2>=2 );.  }.  
152f0 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29 3b 0a  assert( i>=0 );.
15300 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74    pCur = allocat
15310 65 43 75 72 73 6f 72 28 70 2c 20 69 2c 20 26 70  eCursor(p, i, &p
15320 4f 70 5b 2d 31 5d 2c 20 69 44 62 2c 20 31 29 3b  Op[-1], iDb, 1);
15330 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29  .  if( pCur==0 )
15340 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
15350 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20  pCur->nullRow = 
15360 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  1;.  rc = sqlite
15370 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c  3BtreeCursor(pX,
15380 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4f 70   p2, wrFlag, pOp
15390 2d 3e 70 34 2e 70 2c 20 70 43 75 72 2d 3e 70 43  ->p4.p, pCur->pC
153a0 75 72 73 6f 72 29 3b 0a 20 20 69 66 28 20 70 4f  ursor);.  if( pO
153b0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
153c0 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 43 75  YINFO ){.    pCu
153d0 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  r->pKeyInfo = pO
153e0 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
153f0 20 20 20 20 70 43 75 72 2d 3e 70 49 6e 63 72 4b      pCur->pIncrK
15400 65 79 20 3d 20 26 70 43 75 72 2d 3e 70 4b 65 79  ey = &pCur->pKey
15410 49 6e 66 6f 2d 3e 69 6e 63 72 4b 65 79 3b 0a 20  Info->incrKey;. 
15420 20 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66     pCur->pKeyInf
15430 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e  o->enc = ENC(p->
15440 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  db);.  }else{.  
15450 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f    pCur->pKeyInfo
15460 20 3d 20 30 3b 0a 20 20 20 20 70 43 75 72 2d 3e   = 0;.    pCur->
15470 70 49 6e 63 72 4b 65 79 20 3d 20 26 70 43 75 72  pIncrKey = &pCur
15480 2d 3e 62 6f 67 75 73 49 6e 63 72 4b 65 79 3b 0a  ->bogusIncrKey;.
15490 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20 72 63    }.  switch( rc
154a0 20 29 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c   ){.    case SQL
154b0 49 54 45 5f 42 55 53 59 3a 20 7b 0a 20 20 20 20  ITE_BUSY: {.    
154c0 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20    p->pc = pc;.  
154d0 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
154e0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
154f0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
15500 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20  turn;.    }.    
15510 63 61 73 65 20 53 51 4c 49 54 45 5f 4f 4b 3a 20  case SQLITE_OK: 
15520 7b 0a 20 20 20 20 20 20 69 6e 74 20 66 6c 61 67  {.      int flag
15530 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  s = sqlite3Btree
15540 46 6c 61 67 73 28 70 43 75 72 2d 3e 70 43 75 72  Flags(pCur->pCur
15550 73 6f 72 29 3b 0a 20 20 20 20 20 20 2f 2a 20 53  sor);.      /* S
15560 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 2e 20  anity checking. 
15570 20 4f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20   Only the lower 
15580 66 6f 75 72 20 62 69 74 73 20 6f 66 20 74 68 65  four bits of the
15590 20 66 6c 61 67 73 20 62 79 74 65 20 73 68 6f 75   flags byte shou
155a0 6c 64 0a 20 20 20 20 20 20 2a 2a 20 62 65 20 75  ld.      ** be u
155b0 73 65 64 2e 20 20 42 69 74 20 33 20 28 6d 61 73  sed.  Bit 3 (mas
155c0 6b 20 30 78 30 38 29 20 69 73 20 75 6e 70 72 65  k 0x08) is unpre
155d0 64 69 63 74 61 62 6c 65 2e 20 20 54 68 65 20 6c  dictable.  The l
155e0 6f 77 65 72 20 33 20 62 69 74 73 0a 20 20 20 20  ower 3 bits.    
155f0 20 20 2a 2a 20 28 6d 61 73 6b 20 30 78 30 37 29    ** (mask 0x07)
15600 20 73 68 6f 75 6c 64 20 62 65 20 65 69 74 68 65   should be eithe
15610 72 20 35 20 28 69 6e 74 6b 65 79 2b 6c 65 61 66  r 5 (intkey+leaf
15620 64 61 74 61 20 66 6f 72 20 74 61 62 6c 65 73 29  data for tables)
15630 20 6f 72 0a 20 20 20 20 20 20 2a 2a 20 32 20 28   or.      ** 2 (
15640 7a 65 72 6f 64 61 74 61 20 66 6f 72 20 69 6e 64  zerodata for ind
15650 69 63 65 73 29 2e 20 20 49 66 20 74 68 65 73 65  ices).  If these
15660 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 72 65 20   conditions are 
15670 6e 6f 74 20 6d 65 74 20 69 74 20 63 61 6e 0a 20  not met it can. 
15680 20 20 20 20 20 2a 2a 20 6f 6e 6c 79 20 6d 65 61       ** only mea
15690 6e 20 74 68 61 74 20 77 65 20 61 72 65 20 64 65  n that we are de
156a0 61 6c 69 6e 67 20 77 69 74 68 20 61 20 63 6f 72  aling with a cor
156b0 72 75 70 74 20 64 61 74 61 62 61 73 65 20 66 69  rupt database fi
156c0 6c 65 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  le.      */.    
156d0 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 30    if( (flags & 0
156e0 78 66 30 29 21 3d 30 20 7c 7c 20 28 28 66 6c 61  xf0)!=0 || ((fla
156f0 67 73 20 26 20 30 78 30 37 29 21 3d 35 20 26 26  gs & 0x07)!=5 &&
15700 20 28 66 6c 61 67 73 20 26 20 30 78 30 37 29 21   (flags & 0x07)!
15710 3d 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  =2) ){.        r
15720 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
15730 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20  PT_BKPT;.       
15740 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
15750 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
15760 7d 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 69 73  }.      pCur->is
15770 54 61 62 6c 65 20 3d 20 28 66 6c 61 67 73 20 26  Table = (flags &
15780 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 29 21 3d   BTREE_INTKEY)!=
15790 30 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 69  0;.      pCur->i
157a0 73 49 6e 64 65 78 20 3d 20 28 66 6c 61 67 73 20  sIndex = (flags 
157b0 26 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41  & BTREE_ZERODATA
157c0 29 21 3d 30 3b 0a 20 20 20 20 20 20 2f 2a 20 49  )!=0;.      /* I
157d0 66 20 50 34 3d 3d 30 20 69 74 20 6d 65 61 6e 73  f P4==0 it means
157e0 20 77 65 20 61 72 65 20 65 78 70 65 63 74 65 64   we are expected
157f0 20 74 6f 20 6f 70 65 6e 20 61 20 74 61 62 6c 65   to open a table
15800 2e 20 20 49 66 20 50 34 21 3d 30 20 74 68 65 6e  .  If P4!=0 then
15810 0a 20 20 20 20 20 20 2a 2a 20 77 65 20 65 78 70  .      ** we exp
15820 65 63 74 20 74 6f 20 62 65 20 6f 70 65 6e 69 6e  ect to be openin
15830 67 20 61 6e 20 69 6e 64 65 78 2e 20 20 49 66 20  g an index.  If 
15840 74 68 69 73 20 69 73 20 6e 6f 74 20 77 68 61 74  this is not what
15850 20 68 61 70 70 65 6e 65 64 2c 0a 20 20 20 20 20   happened,.     
15860 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 64 61 74   ** then the dat
15870 61 62 61 73 65 20 69 73 20 63 6f 72 72 75 70 74  abase is corrupt
15880 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
15890 69 66 28 20 28 70 43 75 72 2d 3e 69 73 54 61 62  if( (pCur->isTab
158a0 6c 65 20 26 26 20 70 4f 70 2d 3e 70 34 74 79 70  le && pOp->p4typ
158b0 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 29 0a 20  e==P4_KEYINFO). 
158c0 20 20 20 20 20 20 7c 7c 20 28 70 43 75 72 2d 3e        || (pCur->
158d0 69 73 49 6e 64 65 78 20 26 26 20 70 4f 70 2d 3e  isIndex && pOp->
158e0 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e  p4type!=P4_KEYIN
158f0 46 4f 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  FO) ){.        r
15900 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
15910 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20  PT_BKPT;.       
15920 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
15930 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
15940 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
15950 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 53 51     }.    case SQ
15960 4c 49 54 45 5f 45 4d 50 54 59 3a 20 7b 0a 20 20  LITE_EMPTY: {.  
15970 20 20 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c      pCur->isTabl
15980 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21  e = pOp->p4type!
15990 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20 20  =P4_KEYINFO;.   
159a0 20 20 20 70 43 75 72 2d 3e 69 73 49 6e 64 65 78     pCur->isIndex
159b0 20 3d 20 21 70 43 75 72 2d 3e 69 73 54 61 62 6c   = !pCur->isTabl
159c0 65 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70  e;.      pCur->p
159d0 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 20 20  Cursor = 0;.    
159e0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
159f0 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
15a00 20 20 20 7d 0a 20 20 20 20 64 65 66 61 75 6c 74     }.    default
15a10 3a 20 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  : {.      goto a
15a20 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
15a30 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  r;.    }.  }.  b
15a40 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
15a50 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  de: OpenEphemera
15a60 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  l P1 P2 * P4 *.*
15a70 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
15a80 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74  cursor P1 to a t
15a90 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a  ransient table..
15aa0 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  ** The cursor is
15ab0 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72   always opened r
15ac0 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69  ead/write even i
15ad0 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  f .** the main d
15ae0 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d  atabase is read-
15af0 6f 6e 6c 79 2e 20 20 54 68 65 20 74 72 61 6e 73  only.  The trans
15b00 69 65 6e 74 20 6f 72 20 76 69 72 74 75 61 6c 0a  ient or virtual.
15b10 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65  ** table is dele
15b20 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
15b30 79 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f  y when the curso
15b40 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a  r is closed..**.
15b50 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d  ** P2 is the num
15b60 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
15b70 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
15b80 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
15b90 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42  or points to a B
15ba0 54 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34  Tree table if P4
15bb0 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72  ==0 and to a BTr
15bc0 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50  ee index.** if P
15bd0 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20  4 is not 0.  If 
15be0 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
15bf0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b  it points to a K
15c00 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
15c10 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73  .** that defines
15c20 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b   the format of k
15c30 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  eys in the index
15c40 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
15c50 6f 64 65 20 77 61 73 20 6f 6e 63 65 20 63 61 6c  ode was once cal
15c60 6c 65 64 20 4f 70 65 6e 54 65 6d 70 2e 20 20 42  led OpenTemp.  B
15c70 75 74 20 74 68 61 74 20 63 72 65 61 74 65 64 0a  ut that created.
15c80 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e 20 62 65 63  ** confusion bec
15c90 61 75 73 65 20 74 68 65 20 74 65 72 6d 20 22 74  ause the term "t
15ca0 65 6d 70 20 74 61 62 6c 65 22 2c 20 6d 69 67 68  emp table", migh
15cb0 74 20 72 65 66 65 72 20 65 69 74 68 65 72 0a 2a  t refer either.*
15cc0 2a 20 74 6f 20 61 20 54 45 4d 50 20 74 61 62 6c  * to a TEMP tabl
15cd0 65 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76  e at the SQL lev
15ce0 65 6c 2c 20 6f 72 20 74 6f 20 61 20 74 61 62 6c  el, or to a tabl
15cf0 65 20 6f 70 65 6e 65 64 20 62 79 0a 2a 2a 20 74  e opened by.** t
15d00 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 54 68 65  his opcode.  The
15d10 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 61  n this opcode wa
15d20 73 20 63 61 6c 6c 20 4f 70 65 6e 56 69 72 74 75  s call OpenVirtu
15d30 61 6c 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  al.  But.** that
15d40 20 63 72 65 61 74 65 64 20 63 6f 6e 66 75 73 69   created confusi
15d50 6f 6e 20 77 69 74 68 20 74 68 65 20 77 68 6f 6c  on with the whol
15d60 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20  e virtual-table 
15d70 69 64 65 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  idea..*/.case OP
15d80 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20  _OpenEphemeral: 
15d90 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  {.  int i = pOp-
15da0 3e 70 31 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70  >p1;.  Cursor *p
15db0 43 78 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  Cx;.  static con
15dc0 73 74 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73  st int openFlags
15dd0 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45   = .      SQLITE
15de0 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20  _OPEN_READWRITE 
15df0 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
15e00 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20  PEN_CREATE |.   
15e10 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45     SQLITE_OPEN_E
15e20 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20  XCLUSIVE |.     
15e30 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c   SQLITE_OPEN_DEL
15e40 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20  ETEONCLOSE |.   
15e50 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54     SQLITE_OPEN_T
15e60 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 0a 20 20  RANSIENT_DB;..  
15e70 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29 3b 0a  assert( i>=0 );.
15e80 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
15e90 43 75 72 73 6f 72 28 70 2c 20 69 2c 20 70 4f 70  Cursor(p, i, pOp
15ea0 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20  , -1, 1);.  if( 
15eb0 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
15ec0 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
15ed0 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d  lRow = 1;.  rc =
15ee0 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 61 63   sqlite3BtreeFac
15ef0 74 6f 72 79 28 64 62 2c 20 30 2c 20 31 2c 20 53  tory(db, 0, 1, S
15f00 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 54 45  QLITE_DEFAULT_TE
15f10 4d 50 5f 43 41 43 48 45 5f 53 49 5a 45 2c 20 6f  MP_CACHE_SIZE, o
15f20 70 65 6e 46 6c 61 67 73 2c 0a 20 20 20 20 20 20  penFlags,.      
15f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f40 20 20 20 20 20 26 70 43 78 2d 3e 70 42 74 29 3b       &pCx->pBt);
15f50 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
15f60 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d  E_OK ){.    rc =
15f70 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
15f80 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74  inTrans(pCx->pBt
15f90 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  , 1);.  }.  if( 
15fa0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
15fb0 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61  .    /* If a tra
15fc0 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20  nsient index is 
15fd0 72 65 71 75 69 72 65 64 2c 20 63 72 65 61 74 65  required, create
15fe0 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20   it by calling. 
15ff0 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72     ** sqlite3Btr
16000 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20  eeCreateTable() 
16010 77 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 5a  with the BTREE_Z
16020 45 52 4f 44 41 54 41 20 66 6c 61 67 20 62 65 66  ERODATA flag bef
16030 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69  ore.    ** openi
16040 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e  ng it. If a tran
16050 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72  sient table is r
16060 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73  equired, just us
16070 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74  e the.    ** aut
16080 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74  omatically creat
16090 65 64 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f  ed table with ro
160a0 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20 49 4e  ot-page 1 (an IN
160b0 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20  TKEY table)..   
160c0 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   */.    if( pOp-
160d0 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 20 29 7b 0a  >p4.pKeyInfo ){.
160e0 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a        int pgno;.
160f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
16100 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
16110 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72  YINFO );.      r
16120 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
16130 43 72 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d  CreateTable(pCx-
16140 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52  >pBt, &pgno, BTR
16150 45 45 5f 5a 45 52 4f 44 41 54 41 29 3b 20 0a 20  EE_ZERODATA); . 
16160 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
16170 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
16180 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d    assert( pgno==
16190 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b  MASTER_ROOT+1 );
161a0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
161b0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
161c0 28 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c  (pCx->pBt, pgno,
161d0 20 31 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20   1, .           
161e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161f0 20 20 20 20 20 28 4b 65 79 49 6e 66 6f 2a 29 70       (KeyInfo*)p
16200 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43 78 2d 3e 70  Op->p4.z, pCx->p
16210 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20  Cursor);.       
16220 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d   pCx->pKeyInfo =
16230 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
16240 6f 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e  o;.        pCx->
16250 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20  pKeyInfo->enc = 
16260 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20  ENC(p->db);.    
16270 20 20 20 20 70 43 78 2d 3e 70 49 6e 63 72 4b 65      pCx->pIncrKe
16280 79 20 3d 20 26 70 43 78 2d 3e 70 4b 65 79 49 6e  y = &pCx->pKeyIn
16290 66 6f 2d 3e 69 6e 63 72 4b 65 79 3b 0a 20 20 20  fo->incrKey;.   
162a0 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e     }.      pCx->
162b0 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20  isTable = 0;.   
162c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
162d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
162e0 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20  ursor(pCx->pBt, 
162f0 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20  MASTER_ROOT, 1, 
16300 30 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  0, pCx->pCursor)
16310 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54  ;.      pCx->isT
16320 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 20 20  able = 1;.      
16330 70 43 78 2d 3e 70 49 6e 63 72 4b 65 79 20 3d 20  pCx->pIncrKey = 
16340 26 70 43 78 2d 3e 62 6f 67 75 73 49 6e 63 72 4b  &pCx->bogusIncrK
16350 65 79 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ey;.    }.  }.  
16360 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21  pCx->isIndex = !
16370 70 43 78 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20  pCx->isTable;.  
16380 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
16390 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20  ode: OpenPseudo 
163a0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
163b0 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
163c0 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20  sor that points 
163d0 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20  to a fake table 
163e0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20  that contains a 
163f0 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66  single.** row of
16400 20 64 61 74 61 2e 20 20 41 6e 79 20 61 74 74 65   data.  Any atte
16410 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61 20 73  mpt to write a s
16420 65 63 6f 6e 64 20 72 6f 77 20 6f 66 20 64 61 74  econd row of dat
16430 61 20 63 61 75 73 65 73 20 74 68 65 0a 2a 2a 20  a causes the.** 
16440 66 69 72 73 74 20 72 6f 77 20 74 6f 20 62 65 20  first row to be 
16450 64 65 6c 65 74 65 64 2e 20 20 41 6c 6c 20 64 61  deleted.  All da
16460 74 61 20 69 73 20 64 65 6c 65 74 65 64 20 77 68  ta is deleted wh
16470 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  en the cursor is
16480 0a 2a 2a 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a  .** closed..**.*
16490 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  * A pseudo-table
164a0 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73   created by this
164b0 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 66 75   opcode is usefu
164c0 6c 20 66 6f 72 20 68 6f 6c 64 69 6e 67 20 74 68  l for holding th
164d0 65 0a 2a 2a 20 4e 45 57 20 6f 72 20 4f 4c 44 20  e.** NEW or OLD 
164e0 74 61 62 6c 65 73 20 69 6e 20 61 20 74 72 69 67  tables in a trig
164f0 67 65 72 2e 20 20 41 6c 73 6f 20 75 73 65 64 20  ger.  Also used 
16500 74 6f 20 68 6f 6c 64 20 74 68 65 20 61 20 73 69  to hold the a si
16510 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70  ngle.** row outp
16520 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74  ut from the sort
16530 65 72 20 73 6f 20 74 68 61 74 20 74 68 65 20 72  er so that the r
16540 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70  ow can be decomp
16550 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64  osed into.** ind
16560 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20  ividual columns 
16570 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c  using the OP_Col
16580 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  umn opcode..**.*
16590 2a 20 57 68 65 6e 20 4f 50 5f 49 6e 73 65 72 74  * When OP_Insert
165a0 20 69 73 20 65 78 65 63 75 74 65 64 20 74 6f 20   is executed to 
165b0 69 6e 73 65 72 74 20 61 20 72 6f 77 20 69 6e 20  insert a row in 
165c0 74 6f 20 74 68 65 20 70 73 65 75 64 6f 20 74 61  to the pseudo ta
165d0 62 6c 65 2c 0a 2a 2a 20 74 68 65 20 70 73 65 75  ble,.** the pseu
165e0 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20  do-table cursor 
165f0 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 6d  may or may not m
16600 61 6b 65 20 69 74 27 73 20 6f 77 6e 20 63 6f 70  ake it's own cop
16610 79 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 72 69 67  y of the.** orig
16620 69 6e 61 6c 20 72 6f 77 20 64 61 74 61 2e 20 49  inal row data. I
16630 66 20 50 32 20 69 73 20 30 2c 20 74 68 65 6e 20  f P2 is 0, then 
16640 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  the pseudo-table
16650 20 77 69 6c 6c 20 63 6f 70 79 20 74 68 65 0a 2a   will copy the.*
16660 2a 20 6f 72 69 67 69 6e 61 6c 20 72 6f 77 20 64  * original row d
16670 61 74 61 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ata. Otherwise, 
16680 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
16690 20 6f 72 69 67 69 6e 61 6c 20 6d 65 6d 6f 72 79   original memory
166a0 20 63 65 6c 6c 0a 2a 2a 20 69 73 20 73 74 6f 72   cell.** is stor
166b0 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
166c0 2c 20 74 68 65 20 76 64 62 65 20 70 72 6f 67 72  , the vdbe progr
166d0 61 6d 20 6d 75 73 74 20 65 6e 73 75 72 65 20 74  am must ensure t
166e0 68 61 74 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f  hat the .** memo
166f0 72 79 20 63 65 6c 6c 20 63 6f 6e 74 61 69 6e 69  ry cell containi
16700 6e 67 20 74 68 65 20 72 6f 77 20 64 61 74 61 20  ng the row data 
16710 69 73 20 6e 6f 74 20 6f 76 65 72 77 72 69 74 74  is not overwritt
16720 65 6e 20 75 6e 74 69 6c 20 74 68 65 0a 2a 2a 20  en until the.** 
16730 70 73 65 75 64 6f 20 74 61 62 6c 65 20 69 73 20  pseudo table is 
16740 63 6c 6f 73 65 64 20 28 6f 72 20 61 20 6e 65 77  closed (or a new
16750 20 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64   row is inserted
16760 20 69 6e 74 6f 20 69 74 29 2e 0a 2a 2f 0a 63 61   into it)..*/.ca
16770 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f  se OP_OpenPseudo
16780 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f  : {.  int i = pO
16790 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f 72 20  p->p1;.  Cursor 
167a0 2a 70 43 78 3b 0a 20 20 61 73 73 65 72 74 28 20  *pCx;.  assert( 
167b0 69 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  i>=0 );.  pCx = 
167c0 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
167d0 2c 20 69 2c 20 26 70 4f 70 5b 2d 31 5d 2c 20 2d  , i, &pOp[-1], -
167e0 31 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78  1, 0);.  if( pCx
167f0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
16800 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
16810 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73  w = 1;.  pCx->ps
16820 65 75 64 6f 54 61 62 6c 65 20 3d 20 31 3b 0a 20  eudoTable = 1;. 
16830 20 70 43 78 2d 3e 65 70 68 65 6d 50 73 65 75 64   pCx->ephemPseud
16840 6f 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 32  oTable = pOp->p2
16850 3b 0a 20 20 70 43 78 2d 3e 70 49 6e 63 72 4b 65  ;.  pCx->pIncrKe
16860 79 20 3d 20 26 70 43 78 2d 3e 62 6f 67 75 73 49  y = &pCx->bogusI
16870 6e 63 72 4b 65 79 3b 0a 20 20 70 43 78 2d 3e 69  ncrKey;.  pCx->i
16880 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43  sTable = 1;.  pC
16890 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20 30 3b 0a  x->isIndex = 0;.
168a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
168b0 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20  pcode: Close P1 
168c0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c  * * * *.**.** Cl
168d0 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65  ose a cursor pre
168e0 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61  viously opened a
168f0 73 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20  s P1.  If P1 is 
16900 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79  not.** currently
16910 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74   open, this inst
16920 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d  ruction is a no-
16930 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  op..*/.case OP_C
16940 6c 6f 73 65 3a 20 7b 0a 20 20 69 6e 74 20 69 20  lose: {.  int i 
16950 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73  = pOp->p1;.  ass
16960 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70  ert( i>=0 && i<p
16970 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73  ->nCursor );.  s
16980 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75  qlite3VdbeFreeCu
16990 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72  rsor(p, p->apCsr
169a0 5b 69 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72  [i]);.  p->apCsr
169b0 5b 69 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  [i] = 0;.  break
169c0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
169d0 4d 6f 76 65 47 65 20 50 31 20 50 32 20 50 33 20  MoveGe P1 P2 P3 
169e0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  P4 *.**.** If cu
169f0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
16a00 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
16a10 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
16a20 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
16a30 0a 2a 2a 20 75 73 65 20 74 68 65 20 69 6e 74 65  .** use the inte
16a40 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ger value in reg
16a50 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
16a60 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
16a70 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
16a80 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
16a90 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
16aa0 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
16ab0 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
16ac0 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
16ad0 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
16ae0 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
16af0 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
16b00 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
16b10 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73   points to the s
16b20 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68  mallest entry th
16b30 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  at .** is greate
16b40 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
16b50 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
16b60 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
16b70 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72  o records .** gr
16b80 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
16b90 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
16ba0 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
16bb0 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
16bc0 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 73 70 65 63  P2..**.** A spec
16bd0 69 61 6c 20 66 65 61 74 75 72 65 20 6f 66 20 74  ial feature of t
16be0 68 69 73 20 6f 70 63 6f 64 65 20 28 61 6e 64 20  his opcode (and 
16bf0 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74  different from t
16c00 68 65 0a 2a 2a 20 72 65 6c 61 74 65 64 20 4f 50  he.** related OP
16c10 5f 4d 6f 76 65 47 74 2c 20 4f 50 5f 4d 6f 76 65  _MoveGt, OP_Move
16c20 4c 74 2c 20 61 6e 64 20 4f 50 5f 4d 6f 76 65 4c  Lt, and OP_MoveL
16c30 65 29 20 69 73 20 74 68 61 74 20 69 66 20 50 32  e) is that if P2
16c40 20 69 73 0a 2a 2a 20 7a 65 72 6f 20 61 6e 64 20   is.** zero and 
16c50 50 31 20 69 73 20 61 6e 20 53 51 4c 20 74 61 62  P1 is an SQL tab
16c60 6c 65 20 28 61 20 62 2d 74 72 65 65 20 77 69 74  le (a b-tree wit
16c70 68 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 20  h integer keys) 
16c80 74 68 65 6e 0a 2a 2a 20 74 68 65 20 73 65 65 6b  then.** the seek
16c90 20 69 73 20 64 65 66 65 72 72 65 64 20 75 6e 74   is deferred unt
16ca0 69 6c 20 69 74 20 69 73 20 61 63 74 75 61 6c 6c  il it is actuall
16cb0 79 20 6e 65 65 64 65 64 2e 20 20 49 74 20 6d 69  y needed.  It mi
16cc0 67 68 74 20 62 65 0a 2a 2a 20 74 68 65 20 63 61  ght be.** the ca
16cd0 73 65 20 74 68 61 74 20 74 68 65 20 63 75 72 73  se that the curs
16ce0 6f 72 20 69 73 20 6e 65 76 65 72 20 61 63 63 65  or is never acce
16cf0 73 73 65 64 2e 20 20 42 79 20 64 65 66 65 72 72  ssed.  By deferr
16d00 69 6e 67 20 74 68 65 0a 2a 2a 20 73 65 65 6b 2c  ing the.** seek,
16d10 20 77 65 20 61 76 6f 69 64 20 75 6e 6e 65 63 65   we avoid unnece
16d20 73 73 61 72 79 20 73 65 65 6b 73 2e 0a 2a 2a 0a  ssary seeks..**.
16d30 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
16d40 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
16d50 73 74 69 6e 63 74 2c 20 4d 6f 76 65 4c 74 2c 20  stinct, MoveLt, 
16d60 4d 6f 76 65 47 74 2c 20 4d 6f 76 65 4c 65 0a 2a  MoveGt, MoveLe.*
16d70 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76  /./* Opcode: Mov
16d80 65 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20  eGt P1 P2 P3 P4 
16d90 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  *.**.** If curso
16da0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
16db0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
16dc0 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
16dd0 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
16de0 20 75 73 65 20 74 68 65 20 69 6e 74 65 67 65 72   use the integer
16df0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
16e00 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
16e10 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
16e20 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
16e30 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
16e40 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
16e50 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
16e60 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
16e70 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
16e80 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
16e90 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
16ea0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
16eb0 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
16ec0 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
16ed0 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
16ee0 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
16ef0 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
16f00 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
16f10 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74  no records great
16f20 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  er than .** the 
16f30 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
16f40 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
16f50 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  p to P2..**.** S
16f60 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
16f70 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e  NotFound, Distin
16f80 63 74 2c 20 4d 6f 76 65 4c 74 2c 20 4d 6f 76 65  ct, MoveLt, Move
16f90 47 65 2c 20 4d 6f 76 65 4c 65 0a 2a 2f 0a 2f 2a  Ge, MoveLe.*/./*
16fa0 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 4c 74 20   Opcode: MoveLt 
16fb0 50 31 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a  P1 P2 P3 P4 * .*
16fc0 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
16fd0 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
16fe0 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
16ff0 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
17000 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
17010 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  e the integer va
17020 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
17030 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
17040 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
17050 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
17060 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
17070 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
17080 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
17090 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
170a0 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
170b0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
170c0 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
170d0 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
170e0 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
170f0 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74  s to the largest
17100 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
17110 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  is less than the
17120 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
17130 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
17140 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a  rds less than .*
17150 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  * the key and P2
17160 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
17170 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
17180 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
17190 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
171a0 44 69 73 74 69 6e 63 74 2c 20 4d 6f 76 65 47 74  Distinct, MoveGt
171b0 2c 20 4d 6f 76 65 47 65 2c 20 4d 6f 76 65 4c 65  , MoveGe, MoveLe
171c0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .*/./* Opcode: M
171d0 6f 76 65 4c 65 20 50 31 20 50 32 20 50 33 20 50  oveLe P1 P2 P3 P
171e0 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  4 *.**.** If cur
171f0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
17200 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
17210 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
17220 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
17230 2a 2a 20 75 73 65 20 74 68 65 20 69 6e 74 65 67  ** use the integ
17240 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  er value in regi
17250 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
17260 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
17270 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
17280 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
17290 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
172a0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
172b0 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
172c0 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
172d0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
172e0 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
172f0 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
17300 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
17310 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
17320 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
17330 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
17340 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
17350 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
17360 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
17370 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61  rds .** less tha
17380 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
17390 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
173a0 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
173b0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
173c0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
173d0 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
173e0 69 6e 63 74 2c 20 4d 6f 76 65 47 74 2c 20 4d 6f  inct, MoveGt, Mo
173f0 76 65 47 65 2c 20 4d 6f 76 65 4c 74 0a 2a 2f 0a  veGe, MoveLt.*/.
17400 63 61 73 65 20 4f 50 5f 4d 6f 76 65 4c 74 3a 20  case OP_MoveLt: 
17410 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
17420 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
17430 4d 6f 76 65 4c 65 3a 20 20 20 20 20 20 20 20 20  MoveLe:         
17440 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
17450 63 61 73 65 20 4f 50 5f 4d 6f 76 65 47 65 3a 20  case OP_MoveGe: 
17460 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
17470 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
17480 4d 6f 76 65 47 74 3a 20 7b 20 20 20 20 20 20 20  MoveGt: {       
17490 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
174a0 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70    int i = pOp->p
174b0 31 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b  1;.  Cursor *pC;
174c0 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ..  assert( i>=0
174d0 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
174e0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
174f0 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74  Csr[i];.  assert
17500 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
17510 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
17520 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 2c 20  ){.    int res, 
17530 6f 63 3b 0a 20 20 20 20 6f 63 20 3d 20 70 4f 70  oc;.    oc = pOp
17540 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 20 20 70 43  ->opcode;.    pC
17550 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
17560 20 20 20 2a 70 43 2d 3e 70 49 6e 63 72 4b 65 79     *pC->pIncrKey
17570 20 3d 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 47 74   = oc==OP_MoveGt
17580 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 4c   || oc==OP_MoveL
17590 65 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69  e;.    if( pC->i
175a0 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20  sTable ){.      
175b0 69 36 34 20 69 4b 65 79 20 3d 20 73 71 6c 69 74  i64 iKey = sqlit
175c0 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
175d0 49 6e 33 29 3b 0a 20 20 20 20 20 20 69 66 28 20  In3);.      if( 
175e0 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
175f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
17600 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4d 6f  p->opcode==OP_Mo
17610 76 65 47 65 20 29 3b 0a 20 20 20 20 20 20 20 20  veGe );.        
17620 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
17630 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20 20 20   = iKey;.       
17640 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
17650 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 70  d = 0;.        p
17660 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
17670 6f 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62  o = 1;.        b
17680 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
17690 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
176a0 42 74 72 65 65 4d 6f 76 65 74 6f 28 70 43 2d 3e  BtreeMoveto(pC->
176b0 70 43 75 72 73 6f 72 2c 20 30 2c 20 30 2c 20 28  pCursor, 0, 0, (
176c0 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65  u64)iKey, 0, &re
176d0 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
176e0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
176f0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
17700 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
17710 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43        }.      pC
17720 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b  ->lastRowid = iK
17730 65 79 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f  ey;.      pC->ro
17740 77 69 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73  widIsValid = res
17750 3d 3d 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ==0;.    }else{.
17760 20 20 20 20 20 20 55 6e 70 61 63 6b 65 64 52 65        UnpackedRe
17770 63 6f 72 64 20 72 3b 0a 20 20 20 20 20 20 69 6e  cord r;.      in
17780 74 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e  t nField = pOp->
17790 70 34 2e 69 3b 0a 20 20 20 20 20 20 61 73 73 65  p4.i;.      asse
177a0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
177b0 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20  =P4_INT32 );.   
177c0 20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c     assert( nFiel
177d0 64 3e 30 20 29 3b 0a 20 20 20 20 20 20 72 2e 70  d>0 );.      r.p
177e0 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
177f0 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 72 2e  eyInfo;.      r.
17800 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b  nField = nField;
17810 0a 20 20 20 20 20 20 72 2e 6e 65 65 64 46 72 65  .      r.needFre
17820 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 2e 6e  e = 0;.      r.n
17830 65 65 64 44 65 73 74 72 6f 79 20 3d 20 30 3b 0a  eedDestroy = 0;.
17840 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26        r.aMem = &
17850 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
17860 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
17870 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 28  ite3BtreeMoveto(
17880 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
17890 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  &r, 0, 0, &res);
178a0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
178b0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
178c0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
178d0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
178e0 20 20 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e 72     }.      pC->r
178f0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
17900 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64  .    }.    pC->d
17910 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
17920 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
17930 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
17940 54 41 4c 45 3b 0a 20 20 20 20 2a 70 43 2d 3e 70  TALE;.    *pC->p
17950 49 6e 63 72 4b 65 79 20 3d 20 30 3b 0a 23 69 66  IncrKey = 0;.#if
17960 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
17970 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72      sqlite3_sear
17980 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
17990 69 66 0a 20 20 20 20 69 66 28 20 6f 63 3d 3d 4f  if.    if( oc==O
179a0 50 5f 4d 6f 76 65 47 65 20 7c 7c 20 6f 63 3d 3d  P_MoveGe || oc==
179b0 4f 50 5f 4d 6f 76 65 47 74 20 29 7b 0a 20 20 20  OP_MoveGt ){.   
179c0 20 20 20 69 66 28 20 72 65 73 3c 30 20 29 7b 0a     if( res<0 ){.
179d0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
179e0 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43  ite3BtreeNext(pC
179f0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
17a00 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
17a10 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
17a20 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
17a30 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70  error;.        p
17a40 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
17a50 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 0;.      }else
17a60 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
17a70 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
17a80 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
17a90 72 74 28 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 4c  rt( oc==OP_MoveL
17aa0 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65  t || oc==OP_Move
17ab0 4c 65 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Le );.      if( 
17ac0 72 65 73 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20  res>=0 ){.      
17ad0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
17ae0 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e  reePrevious(pC->
17af0 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
17b00 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
17b10 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
17b20 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
17b30 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ror;.        pC-
17b40 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
17b50 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
17b60 20 20 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d          /* res m
17b70 69 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65  ight be negative
17b80 20 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62   because the tab
17b90 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68  le is empty.  Ch
17ba0 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 20 20 2a  eck to.        *
17bb0 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73  * see if this is
17bc0 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20   the case..     
17bd0 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65     */.        re
17be0 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  s = sqlite3Btree
17bf0 45 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  Eof(pC->pCursor)
17c00 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
17c10 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
17c20 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 69 66 28  >p2>0 );.    if(
17c30 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63   res ){.      pc
17c40 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
17c50 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66      }.  }else if
17c60 28 20 21 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  ( !pC->pseudoTab
17c70 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69  le ){.    /* Thi
17c80 73 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61  s happens when a
17c90 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 6f 70 65  ttempting to ope
17ca0 6e 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6d 61  n the sqlite3_ma
17cb0 73 74 65 72 20 74 61 62 6c 65 0a 20 20 20 20 2a  ster table.    *
17cc0 2a 20 66 6f 72 20 72 65 61 64 20 61 63 63 65 73  * for read acces
17cd0 73 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45  s returns SQLITE
17ce0 5f 45 4d 50 54 59 2e 20 49 6e 20 74 68 69 73 20  _EMPTY. In this 
17cf0 63 61 73 65 20 61 6c 77 61 79 73 0a 20 20 20 20  case always.    
17d00 2a 2a 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  ** take the jump
17d10 20 28 73 69 6e 63 65 20 74 68 65 72 65 20 61 72   (since there ar
17d20 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 69 6e 20  e no records in 
17d30 74 68 65 20 74 61 62 6c 65 29 2e 0a 20 20 20 20  the table)..    
17d40 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  */.    pc = pOp-
17d50 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
17d60 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
17d70 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20  de: Found P1 P2 
17d80 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 67  P3 * *.**.** Reg
17d90 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61  ister P3 holds a
17da0 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
17db0 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e  d by MakeRecord.
17dc0 20 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78    P1 is an index
17dd0 2e 0a 2a 2a 20 49 66 20 61 6e 20 65 6e 74 72 79  ..** If an entry
17de0 20 74 68 61 74 20 6d 61 74 63 68 65 73 20 74 68   that matches th
17df0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
17e00 74 65 72 20 70 33 20 65 78 69 73 74 73 20 69 6e  ter p3 exists in
17e10 20 50 31 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70   P1 then.** jump
17e20 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65 20   to P2.  If the 
17e30 50 33 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f  P3 value does no
17e40 74 20 6d 61 74 63 68 20 61 6e 79 20 65 6e 74 72  t match any entr
17e50 79 20 69 6e 20 50 31 0a 2a 2a 20 74 68 65 6e 20  y in P1.** then 
17e60 66 61 6c 6c 20 74 68 72 75 2e 20 20 54 68 65 20  fall thru.  The 
17e70 50 31 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  P1 cursor is lef
17e80 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
17e90 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79  e matching entry
17ea0 0a 2a 2a 20 69 66 20 69 74 20 65 78 69 73 74 73  .** if it exists
17eb0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
17ec0 74 72 75 63 74 69 6f 6e 20 69 73 20 75 73 65 64  truction is used
17ed0 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
17ee0 65 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 77 68  e IN operator wh
17ef0 65 72 65 20 74 68 65 0a 2a 2a 20 6c 65 66 74 2d  ere the.** left-
17f00 68 61 6e 64 20 73 69 64 65 20 69 73 20 61 20 53  hand side is a S
17f10 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
17f20 20 20 50 31 20 6d 61 79 20 62 65 20 61 20 74 72    P1 may be a tr
17f30 75 65 20 69 6e 64 65 78 2c 20 6f 72 20 69 74 0a  ue index, or it.
17f40 2a 2a 20 6d 61 79 20 62 65 20 61 20 74 65 6d 70  ** may be a temp
17f50 6f 72 61 72 79 20 69 6e 64 65 78 20 74 68 61 74  orary index that
17f60 20 68 6f 6c 64 73 20 74 68 65 20 72 65 73 75 6c   holds the resul
17f70 74 73 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  ts of the SELECT
17f80 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  .** statement.  
17f90 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
17fa0 6e 20 69 73 20 61 6c 73 6f 20 75 73 65 64 20 74  n is also used t
17fb0 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a  o implement the.
17fc0 2a 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  ** DISTINCT keyw
17fd0 6f 72 64 20 69 6e 20 53 45 4c 45 43 54 20 73 74  ord in SELECT st
17fe0 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
17ff0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
18000 20 63 68 65 63 6b 73 20 69 66 20 69 6e 64 65 78   checks if index
18010 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 61 20 72   P1 contains a r
18020 65 63 6f 72 64 20 66 6f 72 20 77 68 69 63 68 20  ecord for which 
18030 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 4e 20  .** the first N 
18040 73 65 72 69 61 6c 69 7a 65 64 20 76 61 6c 75 65  serialized value
18050 73 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20  s exactly match 
18060 74 68 65 20 4e 20 73 65 72 69 61 6c 69 7a 65 64  the N serialized
18070 20 76 61 6c 75 65 73 0a 2a 2a 20 69 6e 20 74 68   values.** in th
18080 65 20 72 65 63 6f 72 64 20 69 6e 20 72 65 67 69  e record in regi
18090 73 74 65 72 20 50 33 2c 20 77 68 65 72 65 20 4e  ster P3, where N
180a0 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
180b0 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69  mber of values i
180c0 6e 0a 2a 2a 20 74 68 65 20 50 33 20 72 65 63 6f  n.** the P3 reco
180d0 72 64 20 28 74 68 65 20 50 33 20 72 65 63 6f 72  rd (the P3 recor
180e0 64 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66  d is a prefix of
180f0 20 74 68 65 20 50 31 20 72 65 63 6f 72 64 29 2e   the P1 record).
18100 20 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f   .**.** See also
18110 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4d 6f 76 65  : NotFound, Move
18120 54 6f 2c 20 49 73 55 6e 69 71 75 65 2c 20 4e 6f  To, IsUnique, No
18130 74 45 78 69 73 74 73 0a 2a 2f 0a 2f 2a 20 4f 70  tExists.*/./* Op
18140 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50  code: NotFound P
18150 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
18160 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 68 6f  * Register P3 ho
18170 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
18180 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
18190 63 6f 72 64 2e 20 20 50 31 20 69 73 0a 2a 2a 20  cord.  P1 is.** 
181a0 61 6e 20 69 6e 64 65 78 2e 20 20 49 66 20 6e 6f  an index.  If no
181b0 20 65 6e 74 72 79 20 65 78 69 73 74 73 20 69 6e   entry exists in
181c0 20 50 31 20 74 68 61 74 20 6d 61 74 63 68 65 73   P1 that matches
181d0 20 74 68 65 20 62 6c 6f 62 20 74 68 65 6e 20 6a   the blob then j
181e0 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 20 49  ump.** to P2.  I
181f0 66 20 61 6e 20 65 6e 74 72 79 20 64 6f 65 73 20  f an entry does 
18200 65 78 69 73 74 69 6e 67 2c 20 66 61 6c 6c 20 74  existing, fall t
18210 68 72 6f 75 67 68 2e 20 20 54 68 65 20 63 75 72  hrough.  The cur
18220 73 6f 72 20 69 73 20 6c 65 66 74 0a 2a 2a 20 70  sor is left.** p
18230 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 65  ointing to the e
18240 6e 74 72 79 20 74 68 61 74 20 6d 61 74 63 68 65  ntry that matche
18250 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  s..**.** See als
18260 6f 3a 20 46 6f 75 6e 64 2c 20 4d 6f 76 65 54 6f  o: Found, MoveTo
18270 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 49 73 55  , NotExists, IsU
18280 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50  nique.*/.case OP
18290 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20  _NotFound:      
182a0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
182b0 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20  .case OP_Found: 
182c0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
182d0 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69  , in3 */.  int i
182e0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e   = pOp->p1;.  in
182f0 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20  t alreadyExists 
18300 3d 20 30 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70  = 0;.  Cursor *p
18310 43 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  C;.  assert( i>=
18320 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f  0 && i<p->nCurso
18330 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
18340 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b  ->apCsr[i]!=0 );
18350 0a 20 20 69 66 28 20 28 70 43 20 3d 20 70 2d 3e  .  if( (pC = p->
18360 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73  apCsr[i])->pCurs
18370 6f 72 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74  or!=0 ){.    int
18380 20 72 65 73 3b 0a 20 20 20 20 61 73 73 65 72 74   res;.    assert
18390 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
183a0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
183b0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
183c0 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 69 66  M_Blob );.    if
183d0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
183e0 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 20  P_Found ){.     
183f0 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 70   pC->pKeyInfo->p
18400 72 65 66 69 78 49 73 45 71 75 61 6c 20 3d 20 31  refixIsEqual = 1
18410 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d  ;.    }.    rc =
18420 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
18430 65 74 6f 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  eto(pC->pCursor,
18440 20 70 49 6e 33 2d 3e 7a 2c 20 30 2c 20 70 49 6e   pIn3->z, 0, pIn
18450 33 2d 3e 6e 2c 20 30 2c 20 26 72 65 73 29 3b 0a  3->n, 0, &res);.
18460 20 20 20 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f      pC->pKeyInfo
18470 2d 3e 70 72 65 66 69 78 49 73 45 71 75 61 6c 20  ->prefixIsEqual 
18480 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 72 63 21  = 0;.    if( rc!
18490 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
184a0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
184b0 0a 20 20 20 20 61 6c 72 65 61 64 79 45 78 69 73  .    alreadyExis
184c0 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20  ts = (res==0);. 
184d0 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
184e0 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
184f0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
18500 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
18510 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  }.  if( pOp->opc
18520 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b  ode==OP_Found ){
18530 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79  .    if( already
18540 45 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f  Exists ) pc = pO
18550 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c  p->p2 - 1;.  }el
18560 73 65 7b 0a 20 20 20 20 69 66 28 20 21 61 6c 72  se{.    if( !alr
18570 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20  eadyExists ) pc 
18580 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
18590 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
185a0 2a 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e 69 71  * Opcode: IsUniq
185b0 75 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ue P1 P2 P3 P4 *
185c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 72 65  .**.** The P3 re
185d0 67 69 73 74 65 72 20 63 6f 6e 74 61 69 6e 73 20  gister contains 
185e0 61 6e 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  an integer recor
185f0 64 20 6e 75 6d 62 65 72 2e 20 20 43 61 6c 6c 20  d number.  Call 
18600 74 68 69 73 0a 2a 2a 20 72 65 63 6f 72 64 20 6e  this.** record n
18610 75 6d 62 65 72 20 52 2e 20 20 54 68 65 20 50 34  umber R.  The P4
18620 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 61 69   register contai
18630 6e 73 20 61 6e 20 69 6e 64 65 78 20 6b 65 79 20  ns an index key 
18640 63 72 65 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67  created.** using
18650 20 4d 61 6b 65 49 64 78 52 65 63 2e 20 20 43 61   MakeIdxRec.  Ca
18660 6c 6c 20 69 74 20 4b 2e 0a 2a 2a 0a 2a 2a 20 50  ll it K..**.** P
18670 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 20 20  1 is an index.  
18680 53 6f 20 69 74 20 68 61 73 20 6e 6f 20 64 61 74  So it has no dat
18690 61 20 61 6e 64 20 69 74 73 20 6b 65 79 20 63 6f  a and its key co
186a0 6e 73 69 73 74 73 20 6f 66 20 61 0a 2a 2a 20 72  nsists of a.** r
186b0 65 63 6f 72 64 20 67 65 6e 65 72 61 74 65 64 20  ecord generated 
186c0 62 79 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  by OP_MakeRecord
186d0 20 77 68 65 72 65 20 74 68 65 20 6c 61 73 74 20   where the last 
186e0 66 69 65 6c 64 20 69 73 20 74 68 65 20 0a 2a 2a  field is the .**
186f0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 65 6e   rowid of the en
18700 74 72 79 20 74 68 61 74 20 74 68 65 20 69 6e 64  try that the ind
18710 65 78 20 72 65 66 65 72 73 20 74 6f 2e 0a 2a 2a  ex refers to..**
18720 20 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75   .** This instru
18730 63 74 69 6f 6e 20 61 73 6b 73 20 69 66 20 74 68  ction asks if th
18740 65 72 65 20 69 73 20 61 6e 20 65 6e 74 72 79 20  ere is an entry 
18750 69 6e 20 50 31 20 77 68 65 72 65 20 74 68 65 0a  in P1 where the.
18760 2a 2a 20 66 69 65 6c 64 73 20 6d 61 74 63 68 65  ** fields matche
18770 73 20 4b 20 62 75 74 20 74 68 65 20 72 6f 77 69  s K but the rowi
18780 64 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66  d is different f
18790 72 6f 6d 20 52 2e 0a 2a 2a 20 49 66 20 74 68 65  rom R..** If the
187a0 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 65 6e  re is no such en
187b0 74 72 79 2c 20 74 68 65 6e 20 74 68 65 72 65 20  try, then there 
187c0 69 73 20 61 6e 20 69 6d 6d 65 64 69 61 74 65 0a  is an immediate.
187d0 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  ** jump to P2.  
187e0 49 66 20 61 6e 79 20 65 6e 74 72 79 20 64 6f 65  If any entry doe
187f0 73 20 65 78 69 73 74 20 77 68 65 72 65 20 74 68  s exist where th
18800 65 20 69 6e 64 65 78 20 73 74 72 69 6e 67 0a 2a  e index string.*
18810 2a 20 6d 61 74 63 68 65 73 20 4b 20 62 75 74 20  * matches K but 
18820 74 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  the record numbe
18830 72 20 69 73 20 6e 6f 74 20 52 2c 20 74 68 65 6e  r is not R, then
18840 20 74 68 65 20 72 65 63 6f 72 64 0a 2a 2a 20 6e   the record.** n
18850 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 65  umber for that e
18860 6e 74 72 79 20 69 73 20 77 72 69 74 74 65 6e 20  ntry is written 
18870 69 6e 74 6f 20 50 33 20 61 6e 64 20 63 6f 6e 74  into P3 and cont
18880 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72  rol.** falls thr
18890 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
188a0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
188b0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
188c0 74 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74  tFound, NotExist
188d0 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63 61 73 65  s, Found.*/.case
188e0 20 4f 50 5f 49 73 55 6e 69 71 75 65 3a 20 7b 20   OP_IsUnique: { 
188f0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
18900 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d  in3 */.  int i =
18910 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73   pOp->p1;.  Curs
18920 6f 72 20 2a 70 43 78 3b 0a 20 20 42 74 43 75 72  or *pCx;.  BtCur
18930 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 4d 65  sor *pCrsr;.  Me
18940 6d 20 2a 70 4b 3b 0a 20 20 69 36 34 20 52 3b 0a  m *pK;.  i64 R;.
18950 0a 20 20 2f 2a 20 50 6f 70 20 74 68 65 20 76 61  .  /* Pop the va
18960 6c 75 65 20 52 20 6f 66 66 20 74 68 65 20 74 6f  lue R off the to
18970 70 20 6f 66 20 74 68 65 20 73 74 61 63 6b 0a 20  p of the stack. 
18980 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
18990 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
189a0 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T32 );.  assert(
189b0 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 26 26 20   pOp->p4.i>0 && 
189c0 70 4f 70 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d  pOp->p4.i<=p->nM
189d0 65 6d 20 29 3b 0a 20 20 70 4b 20 3d 20 26 70 2d  em );.  pK = &p-
189e0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 34 2e 69 5d  >aMem[pOp->p4.i]
189f0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
18a00 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
18a10 33 29 3b 0a 20 20 52 20 3d 20 70 49 6e 33 2d 3e  3);.  R = pIn3->
18a20 75 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 69  u.i;.  assert( i
18a30 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
18a40 73 6f 72 20 29 3b 0a 20 20 70 43 78 20 3d 20 70  sor );.  pCx = p
18a50 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73  ->apCsr[i];.  as
18a60 73 65 72 74 28 20 70 43 78 21 3d 30 20 29 3b 0a  sert( pCx!=0 );.
18a70 20 20 70 43 72 73 72 20 3d 20 70 43 78 2d 3e 70    pCrsr = pCx->p
18a80 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43  Cursor;.  if( pC
18a90 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e  rsr!=0 ){.    in
18aa0 74 20 72 65 73 3b 0a 20 20 20 20 69 36 34 20 76  t res;.    i64 v
18ab0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
18ac0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 6f   record number o
18ad0 6e 20 74 68 65 20 50 31 20 65 6e 74 72 79 20 74  n the P1 entry t
18ae0 68 61 74 20 6d 61 74 63 68 65 73 20 4b 20 2a 2f  hat matches K */
18af0 0a 20 20 20 20 63 68 61 72 20 2a 7a 4b 65 79 3b  .    char *zKey;
18b00 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65      /* The value
18b10 20 6f 66 20 4b 20 2a 2f 0a 20 20 20 20 69 6e 74   of K */.    int
18b20 20 6e 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20 4e   nKey;      /* N
18b30 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
18b40 6e 20 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c  n K */.    int l
18b50 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  en;       /* Num
18b60 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
18b70 4b 20 77 69 74 68 6f 75 74 20 74 68 65 20 72 6f  K without the ro
18b80 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 20 2a  wid at the end *
18b90 2f 0a 20 20 20 20 69 6e 74 20 73 7a 52 6f 77 69  /.    int szRowi
18ba0 64 3b 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20  d;   /* Size of 
18bb0 74 68 65 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e  the rowid column
18bc0 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 7a   at the end of z
18bd0 4b 65 79 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 4d  Key */..    /* M
18be0 61 6b 65 20 73 75 72 65 20 4b 20 69 73 20 61 20  ake sure K is a 
18bf0 73 74 72 69 6e 67 20 61 6e 64 20 6d 61 6b 65 20  string and make 
18c00 7a 4b 65 79 20 70 6f 69 6e 74 20 74 6f 20 4b 0a  zKey point to K.
18c10 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72      */.    asser
18c20 74 28 20 70 4b 2d 3e 66 6c 61 67 73 20 26 20 4d  t( pK->flags & M
18c30 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 7a  EM_Blob );.    z
18c40 4b 65 79 20 3d 20 70 4b 2d 3e 7a 3b 0a 20 20 20  Key = pK->z;.   
18c50 20 6e 4b 65 79 20 3d 20 70 4b 2d 3e 6e 3b 0a 0a   nKey = pK->n;..
18c60 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 64      /* sqlite3Vd
18c70 62 65 49 64 78 52 6f 77 69 64 4c 65 6e 28 29 20  beIdxRowidLen() 
18c80 6f 6e 6c 79 20 72 65 74 75 72 6e 73 20 6f 74 68  only returns oth
18c90 65 72 20 74 68 61 6e 20 53 51 4c 49 54 45 5f 4f  er than SQLITE_O
18ca0 4b 20 77 68 65 6e 20 74 68 65 0a 20 20 20 20 2a  K when the.    *
18cb0 2a 20 72 65 63 6f 72 64 20 70 61 73 73 65 64 20  * record passed 
18cc0 61 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 63  as an argument c
18cd0 6f 72 72 75 70 74 2e 20 53 69 6e 63 65 20 74 68  orrupt. Since th
18ce0 65 20 72 65 63 6f 72 64 20 69 6e 20 74 68 69 73  e record in this
18cf0 20 63 61 73 65 0a 20 20 20 20 2a 2a 20 68 61 73   case.    ** has
18d00 20 6a 75 73 74 20 62 65 65 6e 20 63 72 65 61 74   just been creat
18d10 65 64 20 62 79 20 61 6e 20 4f 50 5f 4d 61 6b 65  ed by an OP_Make
18d20 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
18d30 6f 6e 2c 20 61 6e 64 20 6e 6f 74 20 6c 6f 61 64  on, and not load
18d40 65 64 0a 20 20 20 20 2a 2a 20 66 72 6f 6d 20 74  ed.    ** from t
18d50 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
18d60 2c 20 69 74 20 69 73 20 6e 6f 74 20 70 6f 73 73  , it is not poss
18d70 69 62 6c 65 20 66 6f 72 20 69 74 20 74 6f 20 62  ible for it to b
18d80 65 20 63 6f 72 72 75 70 74 2e 0a 20 20 20 20 2a  e corrupt..    *
18d90 2a 20 54 68 65 72 65 66 6f 72 65 2c 20 61 73 73  * Therefore, ass
18da0 65 72 74 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  ert(rc==SQLITE_O
18db0 4b 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72  K)..    */.    r
18dc0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
18dd0 64 78 52 6f 77 69 64 4c 65 6e 28 28 75 38 2a 29  dxRowidLen((u8*)
18de0 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 26 73 7a 52  zKey, nKey, &szR
18df0 6f 77 69 64 29 3b 0a 20 20 20 20 61 73 73 65 72  owid);.    asser
18e00 74 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29  t(rc==SQLITE_OK)
18e10 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 6e 4b 65 79  ;.    len = nKey
18e20 2d 73 7a 52 6f 77 69 64 3b 0a 0a 20 20 20 20 2f  -szRowid;..    /
18e30 2a 20 53 65 61 72 63 68 20 66 6f 72 20 61 6e 20  * Search for an 
18e40 65 6e 74 72 79 20 69 6e 20 50 31 20 77 68 65 72  entry in P1 wher
18e50 65 20 61 6c 6c 20 62 75 74 20 74 68 65 20 6c 61  e all but the la
18e60 73 74 20 66 6f 75 72 20 62 79 74 65 73 20 6d 61  st four bytes ma
18e70 74 63 68 20 4b 2e 0a 20 20 20 20 2a 2a 20 49 66  tch K..    ** If
18e80 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63   there is no suc
18e90 68 20 65 6e 74 72 79 2c 20 6a 75 6d 70 20 69 6d  h entry, jump im
18ea0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
18eb0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
18ec0 72 74 28 20 70 43 78 2d 3e 64 65 66 65 72 72 65  rt( pCx->deferre
18ed0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
18ee0 20 20 70 43 78 2d 3e 63 61 63 68 65 53 74 61 74    pCx->cacheStat
18ef0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
18f00 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
18f10 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 28 70 43  e3BtreeMoveto(pC
18f20 72 73 72 2c 20 7a 4b 65 79 2c 20 30 2c 20 6c 65  rsr, zKey, 0, le
18f30 6e 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  n, 0, &res);.   
18f40 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
18f50 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
18f60 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
18f70 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ror;.    }.    i
18f80 66 28 20 72 65 73 3c 30 20 29 7b 0a 20 20 20 20  f( res<0 ){.    
18f90 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
18fa0 72 65 65 4e 65 78 74 28 70 43 72 73 72 2c 20 26  reeNext(pCrsr, &
18fb0 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
18fc0 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 70  res ){.        p
18fd0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
18fe0 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
18ff0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
19000 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
19010 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28  beIdxKeyCompare(
19020 70 43 78 2c 20 30 2c 20 6c 65 6e 2c 20 28 75 38  pCx, 0, len, (u8
19030 2a 29 7a 4b 65 79 2c 20 26 72 65 73 29 3b 20 0a  *)zKey, &res); .
19040 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
19050 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
19060 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
19070 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 29  .    if( res>0 )
19080 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
19090 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
190a0 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20  break;.    }..  
190b0 20 20 2f 2a 20 41 74 20 74 68 69 73 20 70 6f 69    /* At this poi
190c0 6e 74 2c 20 70 43 72 73 72 20 69 73 20 70 6f 69  nt, pCrsr is poi
190d0 6e 74 69 6e 67 20 74 6f 20 61 6e 20 65 6e 74 72  nting to an entr
190e0 79 20 69 6e 20 50 31 20 77 68 65 72 65 20 61 6c  y in P1 where al
190f0 6c 20 62 75 74 0a 20 20 20 20 2a 2a 20 74 68 65  l but.    ** the
19100 20 66 69 6e 61 6c 20 65 6e 74 72 79 20 28 74 68   final entry (th
19110 65 20 72 6f 77 69 64 29 20 6d 61 74 63 68 65 73  e rowid) matches
19120 20 4b 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65   K.  Check to se
19130 65 20 69 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  e if the.    ** 
19140 66 69 6e 61 6c 20 72 6f 77 69 64 20 63 6f 6c 75  final rowid colu
19150 6d 6e 20 69 73 20 64 69 66 66 65 72 65 6e 74 20  mn is different 
19160 66 72 6f 6d 20 52 2e 20 20 49 66 20 69 74 20 65  from R.  If it e
19170 71 75 61 6c 73 20 52 20 74 68 65 6e 20 6a 75 6d  quals R then jum
19180 70 0a 20 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61  p.    ** immedia
19190 74 65 6c 79 20 74 6f 20 50 32 2e 0a 20 20 20 20  tely to P2..    
191a0 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
191b0 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28  te3VdbeIdxRowid(
191c0 70 43 72 73 72 2c 20 26 76 29 3b 0a 20 20 20 20  pCrsr, &v);.    
191d0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
191e0 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
191f0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
19200 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  or;.    }.    if
19210 28 20 76 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20  ( v==R ){.      
19220 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
19230 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
19240 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 54 68 65     }..    /* The
19250 20 66 69 6e 61 6c 20 76 61 72 69 6e 74 20 6f 66   final varint of
19260 20 74 68 65 20 6b 65 79 20 69 73 20 64 69 66 66   the key is diff
19270 65 72 65 6e 74 20 66 72 6f 6d 20 52 2e 20 20 53  erent from R.  S
19280 74 6f 72 65 20 69 74 20 62 61 63 6b 0a 20 20 20  tore it back.   
19290 20 2a 2a 20 69 6e 74 6f 20 72 65 67 69 73 74 65   ** into registe
192a0 72 20 52 33 2e 20 20 28 54 68 65 20 72 65 63 6f  r R3.  (The reco
192b0 72 64 20 6e 75 6d 62 65 72 20 6f 66 20 61 6e 20  rd number of an 
192c0 65 6e 74 72 79 20 74 68 61 74 20 76 69 6f 6c 61  entry that viola
192d0 74 65 73 0a 20 20 20 20 2a 2a 20 61 20 55 4e 49  tes.    ** a UNI
192e0 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 29  QUE constraint.)
192f0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70 49 6e 33  .    */.    pIn3
19300 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 61  ->u.i = v;.    a
19310 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
19320 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
19330 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
19340 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73   Opcode: NotExis
19350 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ts P1 P2 P3 * *.
19360 2a 2a 0a 2a 2a 20 55 73 65 20 74 68 65 20 63 6f  **.** Use the co
19370 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
19380 72 20 50 33 20 61 73 20 61 20 69 6e 74 65 67 65  r P3 as a intege
19390 72 20 6b 65 79 2e 20 20 49 66 20 61 20 72 65 63  r key.  If a rec
193a0 6f 72 64 20 0a 2a 2a 20 77 69 74 68 20 74 68 61  ord .** with tha
193b0 74 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20 65  t key does not e
193c0 78 69 73 74 20 69 6e 20 74 61 62 6c 65 20 6f 66  xist in table of
193d0 20 50 31 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74   P1, then jump t
193e0 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65  o P2. .** If the
193f0 20 72 65 63 6f 72 64 20 64 6f 65 73 20 65 78 69   record does exi
19400 73 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  st, then fall th
19410 72 75 2e 20 20 54 68 65 20 63 75 72 73 6f 72 20  ru.  The cursor 
19420 69 73 20 6c 65 66 74 20 0a 2a 2a 20 70 6f 69 6e  is left .** poin
19430 74 69 6e 67 20 74 6f 20 74 68 65 20 72 65 63 6f  ting to the reco
19440 72 64 20 69 66 20 69 74 20 65 78 69 73 74 73 2e  rd if it exists.
19450 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65  .**.** The diffe
19460 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68  rence between th
19470 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64  is operation and
19480 20 4e 6f 74 46 6f 75 6e 64 20 69 73 20 74 68 61   NotFound is tha
19490 74 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74  t this.** operat
194a0 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 65 20  ion assumes the 
194b0 6b 65 79 20 69 73 20 61 6e 20 69 6e 74 65 67 65  key is an intege
194c0 72 20 61 6e 64 20 74 68 61 74 20 50 31 20 69 73  r and that P1 is
194d0 20 61 20 74 61 62 6c 65 20 77 68 65 72 65 61 73   a table whereas
194e0 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20 61 73 73  .** NotFound ass
194f0 75 6d 65 73 20 6b 65 79 20 69 73 20 61 20 62 6c  umes key is a bl
19500 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 66  ob constructed f
19510 72 6f 6d 20 4d 61 6b 65 52 65 63 6f 72 64 20 61  rom MakeRecord a
19520 6e 64 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 69  nd.** P1 is an i
19530 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ndex..**.** See 
19540 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4d 6f 76  also: Found, Mov
19550 65 54 6f 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 49  eTo, NotFound, I
19560 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20  sUnique.*/.case 
19570 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b 20  OP_NotExists: { 
19580 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
19590 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d  in3 */.  int i =
195a0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73   pOp->p1;.  Curs
195b0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
195c0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 61 73 73  or *pCrsr;.  ass
195d0 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70  ert( i>=0 && i<p
195e0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
195f0 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
19600 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28  i]!=0 );.  if( (
19610 70 43 72 73 72 20 3d 20 28 70 43 20 3d 20 70 2d  pCrsr = (pC = p-
19620 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72  >apCsr[i])->pCur
19630 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 69  sor)!=0 ){.    i
19640 6e 74 20 72 65 73 3b 0a 20 20 20 20 75 36 34 20  nt res;.    u64 
19650 69 4b 65 79 3b 0a 20 20 20 20 61 73 73 65 72 74  iKey;.    assert
19660 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
19670 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61  MEM_Int );.    a
19680 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
19690 69 5d 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  i]->isTable );. 
196a0 20 20 20 69 4b 65 79 20 3d 20 69 6e 74 54 6f 4b     iKey = intToK
196b0 65 79 28 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20  ey(pIn3->u.i);. 
196c0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
196d0 74 72 65 65 4d 6f 76 65 74 6f 28 70 43 72 73 72  treeMoveto(pCrsr
196e0 2c 20 30 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c  , 0, 0, iKey, 0,
196f0 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6c  &res);.    pC->l
19700 61 73 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d  astRowid = pIn3-
19710 3e 75 2e 69 3b 0a 20 20 20 20 70 43 2d 3e 72 6f  >u.i;.    pC->ro
19720 77 69 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73  widIsValid = res
19730 3d 3d 30 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  ==0;.    pC->nul
19740 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 43  lRow = 0;.    pC
19750 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
19760 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20  CACHE_STALE;.   
19770 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65   /* res might be
19780 20 75 6e 69 6e 69 74 69 61 6c 69 7a 65 64 20 69   uninitialized i
19790 66 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 2e  f rc!=SQLITE_OK.
197a0 20 20 42 75 74 20 69 66 20 72 63 21 3d 53 51 4c    But if rc!=SQL
197b0 49 54 45 5f 4f 4b 0a 20 20 20 20 2a 2a 20 70 72  ITE_OK.    ** pr
197c0 6f 63 65 73 73 69 6e 67 20 69 73 20 61 62 6f 75  ocessing is abou
197d0 74 20 74 6f 20 61 62 6f 72 74 20 73 6f 20 77 65  t to abort so we
197e0 20 72 65 61 6c 6c 79 20 64 6f 20 6e 6f 74 20 63   really do not c
197f0 61 72 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  are whether or n
19800 6f 74 0a 20 20 20 20 2a 2a 20 74 68 65 20 66 6f  ot.    ** the fo
19810 6c 6c 6f 77 69 6e 67 20 6a 75 6d 70 20 69 73 20  llowing jump is 
19820 74 61 6b 65 6e 2e 20 20 28 49 6e 20 6f 74 68 65  taken.  (In othe
19830 72 20 77 6f 72 64 73 2c 20 64 6f 20 6e 6f 74 20  r words, do not 
19840 73 74 72 65 73 73 20 6f 76 65 72 0a 20 20 20 20  stress over.    
19850 2a 2a 20 74 68 65 20 65 72 72 6f 72 20 74 68 61  ** the error tha
19860 74 20 76 61 6c 67 72 69 6e 64 20 73 6f 6d 65 74  t valgrind somet
19870 69 6d 65 73 20 73 68 6f 77 73 20 6f 6e 20 74 68  imes shows on th
19880 65 20 6e 65 78 74 20 73 74 61 74 65 6d 65 6e 74  e next statement
19890 20 77 68 65 6e 0a 20 20 20 20 2a 2a 20 72 75 6e   when.    ** run
198a0 6e 69 6e 67 20 69 6f 65 72 72 2e 74 65 73 74 20  ning ioerr.test 
198b0 61 6e 64 20 73 69 6d 69 6c 61 72 20 66 61 69 6c  and similar fail
198c0 75 72 65 2d 72 65 63 6f 76 65 72 79 20 74 65 73  ure-recovery tes
198d0 74 20 73 63 72 69 70 74 73 2e 29 20 2a 2f 0a 20  t scripts.) */. 
198e0 20 20 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b     if( res!=0 ){
198f0 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
19900 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 61  >p2 - 1;.      a
19910 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64  ssert( pC->rowid
19920 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20  IsValid==0 );.  
19930 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20    }.  }else if( 
19940 21 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65  !pC->pseudoTable
19950 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20   ){.    /* This 
19960 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61 6e 20  happens when an 
19970 61 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20  attempt to open 
19980 61 20 72 65 61 64 20 63 75 72 73 6f 72 20 6f 6e  a read cursor on
19990 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 73 71 6c   the .    ** sql
199a0 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
199b0 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f   returns SQLITE_
199c0 45 4d 50 54 59 2e 0a 20 20 20 20 2a 2f 0a 20 20  EMPTY..    */.  
199d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
199e0 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 70 63 20  Table );.    pc 
199f0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
19a00 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72     assert( pC->r
19a10 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20 29  owidIsValid==0 )
19a20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
19a30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71  ../* Opcode: Seq
19a40 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20  uence P1 P2 * * 
19a50 2a 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65  *.**.** Find the
19a60 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20   next available 
19a70 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
19a80 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
19a90 2a 20 57 72 69 74 65 20 74 68 65 20 73 65 71 75  * Write the sequ
19aa0 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f  ence number into
19ab0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
19ac0 20 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75   The sequence nu
19ad0 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73  mber on the curs
19ae0 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  or is incremente
19af0 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20  d after this.** 
19b00 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a  instruction.  .*
19b10 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e  /.case OP_Sequen
19b20 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ce: {           
19b30 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
19b40 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20  se */.  int i = 
19b50 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72  pOp->p1;.  asser
19b60 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e  t( i>=0 && i<p->
19b70 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
19b80 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d  ert( p->apCsr[i]
19b90 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  !=0 );.  pOut->u
19ba0 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d  .i = p->apCsr[i]
19bb0 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20  ->seqCount++;.  
19bc0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
19bd0 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
19be0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
19bf0 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20  pcode: NewRowid 
19c00 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
19c10 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74  ** Get a new int
19c20 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  eger record numb
19c30 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64  er (a.k.a "rowid
19c40 22 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b  ") used as the k
19c50 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a  ey to a table..*
19c60 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d  * The record num
19c70 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69  ber is not previ
19c80 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20  ously used as a 
19c90 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  key in the datab
19ca0 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61  ase.** table tha
19cb0 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
19cc0 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20  ts to.  The new 
19cd0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73  record number is
19ce0 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74   written.** writ
19cf0 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20  ten to register 
19d00 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e  P2..**.** If P3>
19d10 30 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72  0 then P3 is a r
19d20 65 67 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c  egister that hol
19d30 64 73 20 74 68 65 20 6c 61 72 67 65 73 74 20 70  ds the largest p
19d40 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 67 65 6e  reviously.** gen
19d50 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
19d60 6d 62 65 72 2e 20 20 4e 6f 20 6e 65 77 20 72 65  mber.  No new re
19d70 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65  cord numbers are
19d80 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c   allowed to be l
19d90 65 73 73 0a 2a 2a 20 74 68 61 6e 20 74 68 69 73  ess.** than this
19da0 20 76 61 6c 75 65 2e 20 20 57 68 65 6e 20 74 68   value.  When th
19db0 69 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73  is value reaches
19dc0 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 61 20   its maximum, a 
19dd0 53 51 4c 49 54 45 5f 46 55 4c 4c 0a 2a 2a 20 65  SQLITE_FULL.** e
19de0 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65  rror is generate
19df0 64 2e 20 20 54 68 65 20 50 33 20 72 65 67 69 73  d.  The P3 regis
19e00 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77  ter is updated w
19e10 69 74 68 20 74 68 65 20 67 65 6e 65 72 61 74 65  ith the generate
19e20 64 0a 2a 2a 20 72 65 63 6f 72 64 20 6e 75 6d 62  d.** record numb
19e30 65 72 2e 20 20 54 68 69 73 20 50 33 20 6d 65 63  er.  This P3 mec
19e40 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74  hanism is used t
19e50 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74  o help implement
19e60 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52   the.** AUTOINCR
19e70 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a  EMENT feature..*
19e80 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77  /.case OP_NewRow
19e90 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
19ea0 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
19eb0 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20  se */.  int i = 
19ec0 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 36 34 20 76  pOp->p1;.  i64 v
19ed0 20 3d 20 30 3b 0a 20 20 43 75 72 73 6f 72 20 2a   = 0;.  Cursor *
19ee0 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e  pC;.  assert( i>
19ef0 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73  =0 && i<p->nCurs
19f00 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
19f10 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29  p->apCsr[i]!=0 )
19f20 3b 0a 20 20 69 66 28 20 28 70 43 20 3d 20 70 2d  ;.  if( (pC = p-
19f30 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72  >apCsr[i])->pCur
19f40 73 6f 72 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  sor==0 ){.    /*
19f50 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74 69 61   The zero initia
19f60 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65 20 69  lization above i
19f70 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20 6e 65  s all that is ne
19f80 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b  eded */.  }else{
19f90 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
19fa0 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64   rowid or record
19fb0 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65   number (differe
19fc0 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65  nt terms for the
19fd0 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69   same.    ** thi
19fe0 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ng) is obtained 
19ff0 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c  in a two-step al
1a000 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a  gorithm..    **.
1a010 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20      ** First we 
1a020 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20  attempt to find 
1a030 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
1a040 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61  ting rowid and a
1a050 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f  dd one.    ** to
1a060 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74   that.  But if t
1a070 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
1a080 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72  ing rowid is alr
1a090 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d  eady the maximum
1a0a0 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65  .    ** positive
1a0b0 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76   integer, we hav
1a0c0 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67  e to fall throug
1a0d0 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a  h to the second.
1a0e0 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69      ** probabili
1a0f0 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20  stic algorithm. 
1a100 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65     **.    ** The
1a110 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68   second algorith
1a120 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61  m is to select a
1a130 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d   rowid at random
1a140 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20   and see if.    
1a150 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78  ** it already ex
1a160 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ists in the tabl
1a170 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e  e.  If it does n
1a180 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76  ot exist, we hav
1a190 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64  e.    ** succeed
1a1a0 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64  ed.  If the rand
1a1b0 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78  om rowid does ex
1a1c0 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61  ist, we select a
1a1d0 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   new one.    ** 
1a1e0 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75  and try again, u
1a1f0 70 20 74 6f 20 31 30 30 30 20 74 69 6d 65 73 2e  p to 1000 times.
1a200 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46  .    **.    ** F
1a210 6f 72 20 61 20 74 61 62 6c 65 20 77 69 74 68 20  or a table with 
1a220 6c 65 73 73 20 74 68 61 6e 20 32 20 62 69 6c 6c  less than 2 bill
1a230 69 6f 6e 20 65 6e 74 72 69 65 73 2c 20 74 68 65  ion entries, the
1a240 20 70 72 6f 62 61 62 69 6c 69 74 79 0a 20 20 20   probability.   
1a250 20 2a 2a 20 6f 66 20 6e 6f 74 20 66 69 6e 64 69   ** of not findi
1a260 6e 67 20 61 20 75 6e 75 73 65 64 20 72 6f 77 69  ng a unused rowi
1a270 64 20 69 73 20 61 62 6f 75 74 20 31 2e 30 65 2d  d is about 1.0e-
1a280 33 30 30 2e 20 20 54 68 69 73 20 69 73 20 61 20  300.  This is a 
1a290 0a 20 20 20 20 2a 2a 20 6e 6f 6e 2d 7a 65 72 6f  .    ** non-zero
1a2a0 20 70 72 6f 62 61 62 69 6c 69 74 79 2c 20 62 75   probability, bu
1a2b0 74 20 69 74 20 69 73 20 73 74 69 6c 6c 20 76 61  t it is still va
1a2c0 6e 69 73 68 69 6e 67 6c 79 20 73 6d 61 6c 6c 20  nishingly small 
1a2d0 61 6e 64 20 73 68 6f 75 6c 64 0a 20 20 20 20 2a  and should.    *
1a2e0 2a 20 6e 65 76 65 72 20 63 61 75 73 65 20 61 20  * never cause a 
1a2f0 70 72 6f 62 6c 65 6d 2e 20 20 59 6f 75 20 61 72  problem.  You ar
1a300 65 20 6d 75 63 68 2c 20 6d 75 63 68 20 6d 6f 72  e much, much mor
1a310 65 20 6c 69 6b 65 6c 79 20 74 6f 20 68 61 76 65  e likely to have
1a320 20 61 0a 20 20 20 20 2a 2a 20 68 61 72 64 77 61   a.    ** hardwa
1a330 72 65 20 66 61 69 6c 75 72 65 20 74 68 61 6e 20  re failure than 
1a340 66 6f 72 20 74 68 69 73 20 61 6c 67 6f 72 69 74  for this algorit
1a350 68 6d 20 74 6f 20 66 61 69 6c 2e 0a 20 20 20 20  hm to fail..    
1a360 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 61 6e  **.    ** The an
1a370 61 6c 79 73 69 73 20 69 6e 20 74 68 65 20 70 72  alysis in the pr
1a380 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68  evious paragraph
1a390 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 79 6f   assumes that yo
1a3a0 75 20 68 61 76 65 20 61 20 67 6f 6f 64 0a 20 20  u have a good.  
1a3b0 20 20 2a 2a 20 73 6f 75 72 63 65 20 6f 66 20 72    ** source of r
1a3c0 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 73 2e 20 20  andom numbers.  
1a3d0 49 73 20 61 20 6c 69 62 72 61 72 79 20 66 75 6e  Is a library fun
1a3e0 63 74 69 6f 6e 20 6c 69 6b 65 20 6c 72 61 6e 64  ction like lrand
1a3f0 34 38 28 29 0a 20 20 20 20 2a 2a 20 67 6f 6f 64  48().    ** good
1a400 20 65 6e 6f 75 67 68 3f 20 20 4d 61 79 62 65 2e   enough?  Maybe.
1a410 20 4d 61 79 62 65 20 6e 6f 74 2e 20 49 74 27 73   Maybe not. It's
1a420 20 68 61 72 64 20 74 6f 20 6b 6e 6f 77 20 77 68   hard to know wh
1a430 65 74 68 65 72 20 74 68 65 72 65 0a 20 20 20 20  ether there.    
1a440 2a 2a 20 6d 69 67 68 74 20 62 65 20 73 75 62 74  ** might be subt
1a450 6c 65 20 62 75 67 73 20 69 73 20 73 6f 6d 65 20  le bugs is some 
1a460 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20  implementations 
1a470 6f 66 20 6c 72 61 6e 64 34 38 28 29 20 74 68 61  of lrand48() tha
1a480 74 0a 20 20 20 20 2a 2a 20 63 6f 75 6c 64 20 63  t.    ** could c
1a490 61 75 73 65 20 70 72 6f 62 6c 65 6d 73 2e 20 54  ause problems. T
1a4a0 6f 20 61 76 6f 69 64 20 75 6e 63 65 72 74 61 69  o avoid uncertai
1a4b0 6e 74 79 2c 20 53 51 4c 69 74 65 20 75 73 65 73  nty, SQLite uses
1a4c0 20 69 74 73 20 6f 77 6e 20 0a 20 20 20 20 2a 2a   its own .    **
1a4d0 20 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 20 67   random number g
1a4e0 65 6e 65 72 61 74 6f 72 20 62 61 73 65 64 20 6f  enerator based o
1a4f0 6e 20 74 68 65 20 52 43 34 20 61 6c 67 6f 72 69  n the RC4 algori
1a500 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  thm..    **.    
1a510 2a 2a 20 54 6f 20 70 72 6f 6d 6f 74 65 20 6c 6f  ** To promote lo
1a520 63 61 6c 69 74 79 20 6f 66 20 72 65 66 65 72 65  cality of refere
1a530 6e 63 65 20 66 6f 72 20 72 65 70 65 74 69 74 69  nce for repetiti
1a540 76 65 20 69 6e 73 65 72 74 73 2c 20 74 68 65 0a  ve inserts, the.
1a550 20 20 20 20 2a 2a 20 66 69 72 73 74 20 66 65 77      ** first few
1a560 20 61 74 74 65 6d 70 74 73 20 61 74 20 63 68 6f   attempts at cho
1a570 6f 73 69 6e 67 20 61 20 72 61 6e 64 6f 6d 20 72  osing a random r
1a580 6f 77 69 64 20 70 69 63 6b 20 76 61 6c 75 65 73  owid pick values
1a590 20 6a 75 73 74 20 61 20 6c 69 74 74 6c 65 0a 20   just a little. 
1a5a0 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74 68 61     ** larger tha
1a5b0 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 72  n the previous r
1a5c0 6f 77 69 64 2e 20 20 54 68 69 73 20 68 61 73 20  owid.  This has 
1a5d0 62 65 65 6e 20 73 68 6f 77 6e 20 65 78 70 65 72  been shown exper
1a5e0 69 6d 65 6e 74 61 6c 6c 79 0a 20 20 20 20 2a 2a  imentally.    **
1a5f0 20 74 6f 20 64 6f 75 62 6c 65 20 74 68 65 20 73   to double the s
1a600 70 65 65 64 20 6f 66 20 74 68 65 20 43 4f 50 59  peed of the COPY
1a610 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 20 20 20 20   operation..    
1a620 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 73 2c 20  */.    int res, 
1a630 72 78 3d 53 51 4c 49 54 45 5f 4f 4b 2c 20 63 6e  rx=SQLITE_OK, cn
1a640 74 3b 0a 20 20 20 20 69 36 34 20 78 3b 0a 20 20  t;.    i64 x;.  
1a650 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 69    cnt = 0;.    i
1a660 66 28 20 28 73 71 6c 69 74 65 33 42 74 72 65 65  f( (sqlite3Btree
1a670 46 6c 61 67 73 28 70 43 2d 3e 70 43 75 72 73 6f  Flags(pC->pCurso
1a680 72 29 26 28 42 54 52 45 45 5f 49 4e 54 4b 45 59  r)&(BTREE_INTKEY
1a690 7c 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 29  |BTREE_ZERODATA)
1a6a0 29 20 21 3d 0a 20 20 20 20 20 20 20 20 20 20 42  ) !=.          B
1a6b0 54 52 45 45 5f 49 4e 54 4b 45 59 20 29 7b 0a 20  TREE_INTKEY ){. 
1a6c0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
1a6d0 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
1a6e0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1a6f0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1a700 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
1a710 28 73 71 6c 69 74 65 33 42 74 72 65 65 46 6c 61  (sqlite3BtreeFla
1a720 67 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20  gs(pC->pCursor) 
1a730 26 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 29 21  & BTREE_INTKEY)!
1a740 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
1a750 28 20 28 73 71 6c 69 74 65 33 42 74 72 65 65 46  ( (sqlite3BtreeF
1a760 6c 61 67 73 28 70 43 2d 3e 70 43 75 72 73 6f 72  lags(pC->pCursor
1a770 29 20 26 20 42 54 52 45 45 5f 5a 45 52 4f 44 41  ) & BTREE_ZERODA
1a780 54 41 29 3d 3d 30 20 29 3b 0a 0a 23 69 66 64 65  TA)==0 );..#ifde
1a790 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52  f SQLITE_32BIT_R
1a7a0 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20  OWID.#   define 
1a7b0 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66  MAX_ROWID 0x7fff
1a7c0 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f  ffff.#else.    /
1a7d0 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73  * Some compilers
1a7e0 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20   complain about 
1a7f0 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65  constants of the
1a800 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66   form 0x7fffffff
1a810 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a  ffffffff..    **
1a820 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e   Others complain
1a830 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66 66   about 0x7ffffff
1a840 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54  ffffffffffLL.  T
1a850 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
1a860 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20  ro seems.    ** 
1a870 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 63  to provide the c
1a880 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61  onstant while ma
1a890 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  king all compile
1a8a0 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f  rs happy..    */
1a8b0 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f  .#   define MAX_
1a8c0 52 4f 57 49 44 20 20 28 20 28 28 28 75 36 34 29  ROWID  ( (((u64)
1a8d0 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0x7fffffff)<<32)
1a8e0 20 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66   | (u64)0xffffff
1a8f0 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ff ).#endif..   
1a900 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e   if( !pC->useRan
1a910 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
1a920 20 20 69 66 28 20 70 43 2d 3e 6e 65 78 74 52 6f    if( pC->nextRo
1a930 77 69 64 56 61 6c 69 64 20 29 7b 0a 20 20 20 20  widValid ){.    
1a940 20 20 20 20 76 20 3d 20 70 43 2d 3e 6e 65 78 74      v = pC->next
1a950 52 6f 77 69 64 3b 0a 20 20 20 20 20 20 7d 65 6c  Rowid;.      }el
1a960 73 65 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  se{.        rc =
1a970 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1a980 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  t(pC->pCursor, &
1a990 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
1a9a0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1a9b0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
1a9c0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1a9d0 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a  rror;.        }.
1a9e0 20 20 20 20 20 20 20 20 69 66 28 20 72 65 73 20          if( res 
1a9f0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20 3d  ){.          v =
1aa00 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
1aa10 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  e{.          sql
1aa20 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
1aa30 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76  (pC->pCursor, &v
1aa40 29 3b 0a 20 20 20 20 20 20 20 20 20 20 76 20 3d  );.          v =
1aa50 20 6b 65 79 54 6f 49 6e 74 28 76 29 3b 0a 20 20   keyToInt(v);.  
1aa60 20 20 20 20 20 20 20 20 69 66 28 20 76 3d 3d 4d          if( v==M
1aa70 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20  AX_ROWID ){.    
1aa80 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52          pC->useR
1aa90 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a  andomRowid = 1;.
1aaa0 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
1aab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 2b 2b  .            v++
1aac0 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
1aad0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
1aae0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1aaf0 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
1ab00 4e 54 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  NT.      if( pOp
1ab10 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 20 20  ->p3 ){.        
1ab20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 20 20 20  Mem *pMem;.     
1ab30 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1ab40 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
1ab50 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 20 2f 2a 20 50  =p->nMem ); /* P
1ab60 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
1ab70 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 20 20 20 20  ory cell */.    
1ab80 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 2d 3e 61      pMem = &p->a
1ab90 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 09 52  Mem[pOp->p3];..R
1aba0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
1abb0 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20  p->p3, pMem);.  
1abc0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
1abd0 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
1abe0 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 61 73  Mem);.        as
1abf0 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
1ac00 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
1ac10 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20   );  /* mem(P3) 
1ac20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
1ac30 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
1ac40 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52  pMem->u.i==MAX_R
1ac50 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52  OWID || pC->useR
1ac60 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
1ac70 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
1ac80 49 54 45 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20  ITE_FULL;.      
1ac90 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1aca0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1acb0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
1acc0 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31  f( v<pMem->u.i+1
1acd0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20   ){.          v 
1ace0 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b  = pMem->u.i + 1;
1acf0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1ad00 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76     pMem->u.i = v
1ad10 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66  ;.      }.#endif
1ad20 0a 0a 20 20 20 20 20 20 69 66 28 20 76 3c 4d 41  ..      if( v<MA
1ad30 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20  X_ROWID ){.     
1ad40 20 20 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64     pC->nextRowid
1ad50 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20 20  Valid = 1;.     
1ad60 20 20 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64     pC->nextRowid
1ad70 20 3d 20 76 2b 31 3b 0a 20 20 20 20 20 20 7d 65   = v+1;.      }e
1ad80 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  lse{.        pC-
1ad90 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c 69 64 20  >nextRowidValid 
1ada0 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
1adb0 20 7d 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75   }.    if( pC->u
1adc0 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
1add0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1ade0 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a  Op->p3==0 );  /*
1adf0 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 6d 75 73   SQLITE_FULL mus
1ae00 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20  t have occurred 
1ae10 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 2a 2f  prior to this */
1ae20 0a 20 20 20 20 20 20 76 20 3d 20 64 62 2d 3e 70  .      v = db->p
1ae30 72 69 6f 72 4e 65 77 52 6f 77 69 64 3b 0a 20 20  riorNewRowid;.  
1ae40 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20      cnt = 0;.   
1ae50 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69     do{.        i
1ae60 66 28 20 63 6e 74 3d 3d 30 20 26 26 20 28 76 26  f( cnt==0 && (v&
1ae70 30 78 66 66 66 66 66 66 29 3d 3d 76 20 29 7b 0a  0xffffff)==v ){.
1ae80 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 0a 20            v++;. 
1ae90 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1aea0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
1aeb0 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f  randomness(sizeo
1aec0 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20  f(v), &v);.     
1aed0 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29       if( cnt<5 )
1aee0 20 76 20 26 3d 20 30 78 66 66 66 66 66 66 3b 0a   v &= 0xffffff;.
1aef0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1af00 20 20 69 66 28 20 76 3d 3d 30 20 29 20 63 6f 6e    if( v==0 ) con
1af10 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 78  tinue;.        x
1af20 20 3d 20 69 6e 74 54 6f 4b 65 79 28 76 29 3b 0a   = intToKey(v);.
1af30 20 20 20 20 20 20 20 20 72 78 20 3d 20 73 71 6c          rx = sql
1af40 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 28  ite3BtreeMoveto(
1af50 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
1af60 30 2c 20 28 75 36 34 29 78 2c 20 30 2c 20 26 72  0, (u64)x, 0, &r
1af70 65 73 29 3b 0a 20 20 20 20 20 20 20 20 63 6e 74  es);.        cnt
1af80 2b 2b 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65  ++;.      }while
1af90 28 20 63 6e 74 3c 31 30 30 20 26 26 20 72 78 3d  ( cnt<100 && rx=
1afa0 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65  =SQLITE_OK && re
1afb0 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62  s==0 );.      db
1afc0 2d 3e 70 72 69 6f 72 4e 65 77 52 6f 77 69 64 20  ->priorNewRowid 
1afd0 3d 20 76 3b 0a 20 20 20 20 20 20 69 66 28 20 72  = v;.      if( r
1afe0 78 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  x==SQLITE_OK && 
1aff0 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
1b000 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55    rc = SQLITE_FU
1b010 4c 4c 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  LL;.        goto
1b020 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1b030 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
1b040 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64   }.    pC->rowid
1b050 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1b060 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1b070 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
1b080 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1b090 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
1b0a0 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
1b0b0 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
1b0c0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
1b0d0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1b0e0 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20   Opcode: Insert 
1b0f0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1b100 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e  *.** Write an en
1b110 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62  try into the tab
1b120 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e  le of cursor P1.
1b130 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73    A new entry is
1b140 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20 69  .** created if i
1b150 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64  t doesn't alread
1b160 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20 64  y exist or the d
1b170 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74  ata for an exist
1b180 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20  ing.** entry is 
1b190 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68  overwritten.  Th
1b1a0 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76 61  e data is the va
1b1b0 6c 75 65 20 73 74 6f 72 65 64 20 72 65 67 69 73  lue stored regis
1b1c0 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32  ter.** number P2
1b1d0 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f  . The key is sto
1b1e0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
1b1f0 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74  P3. The key must
1b200 0a 2a 2a 20 62 65 20 61 6e 20 69 6e 74 65 67 65  .** be an intege
1b210 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  r..**.** If the 
1b220 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
1b230 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
1b240 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63  , then the row c
1b250 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a  hange count is.*
1b260 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  * incremented (o
1b270 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20  therwise not).  
1b280 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41  If the OPFLAG_LA
1b290 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20  STROWID flag of 
1b2a0 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68  P5 is set,.** th
1b2b0 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72  en rowid is stor
1b2c0 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e  ed for subsequen
1b2d0 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a  t return by the.
1b2e0 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  ** sqlite3_last_
1b2f0 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66  insert_rowid() f
1b300 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69  unction (otherwi
1b310 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66  se it is unmodif
1b320 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61  ied)..**.** Para
1b330 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69  meter P4 may poi
1b340 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63  nt to a string c
1b350 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61  ontaining the ta
1b360 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20  ble-name, or.** 
1b370 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20  may be NULL. If 
1b380 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  it is not NULL, 
1b390 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d  then the update-
1b3a0 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65  hook .** (sqlite
1b3b0 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  3.xUpdateCallbac
1b3c0 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f  k) is invoked fo
1b3d0 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73  llowing a succes
1b3e0 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a  sful insert..**.
1b3f0 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f  ** (WARNING/TODO
1b400 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65  : If P1 is a pse
1b410 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50  udo-cursor and P
1b420 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79  2 is dynamically
1b430 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74  .** allocated, t
1b440 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66  hen ownership of
1b450 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72   P2 is transferr
1b460 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f  ed to the pseudo
1b470 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72  -cursor.** and r
1b480 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d  egister P2 becom
1b490 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49  es ephemeral.  I
1b4a0 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
1b4b0 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20  changed, the.** 
1b4c0 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
1b4d0 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63  r P2 will then c
1b4e0 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72  hange.  Make sur
1b4f0 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a  e this does not.
1b500 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f  ** cause any pro
1b510 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68  blems.).**.** Th
1b520 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
1b530 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62  nly works on tab
1b540 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  les.  The equiva
1b550 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
1b560 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20  .** for indices 
1b570 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e  is OP_IdxInsert.
1b580 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  .*/.case OP_Inse
1b590 72 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61  rt: {.  Mem *pDa
1b5a0 74 61 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  ta = &p->aMem[pO
1b5b0 70 2d 3e 70 32 5d 3b 0a 20 20 4d 65 6d 20 2a 70  p->p2];.  Mem *p
1b5c0 4b 65 79 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Key = &p->aMem[p
1b5d0 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 69 36 34 20  Op->p3];..  i64 
1b5e0 69 4b 65 79 3b 20 20 20 2f 2a 20 54 68 65 20 69  iKey;   /* The i
1b5f0 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 72 20  nteger ROWID or 
1b600 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65 63 6f  key for the reco
1b610 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  rd to be inserte
1b620 64 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70  d */.  int i = p
1b630 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f 72  Op->p1;.  Cursor
1b640 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20   *pC;.  assert( 
1b650 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
1b660 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1b670 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73  ->apCsr[i];.  as
1b680 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1b690 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
1b6a0 72 73 6f 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 70  rsor!=0 || pC->p
1b6b0 73 65 75 64 6f 54 61 62 6c 65 20 29 3b 0a 20 20  seudoTable );.  
1b6c0 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c  assert( pKey->fl
1b6d0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
1b6e0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
1b6f0 73 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47 49  sTable );.  REGI
1b700 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
1b710 70 32 2c 20 70 44 61 74 61 29 3b 0a 20 20 52 45  p2, pData);.  RE
1b720 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
1b730 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 0a 20 20  ->p3, pKey);..  
1b740 69 4b 65 79 20 3d 20 69 6e 74 54 6f 4b 65 79 28  iKey = intToKey(
1b750 70 4b 65 79 2d 3e 75 2e 69 29 3b 0a 20 20 69 66  pKey->u.i);.  if
1b760 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
1b770 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
1b780 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28  nChange++;.  if(
1b790 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
1b7a0 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62  G_LASTROWID ) db
1b7b0 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 4b  ->lastRowid = pK
1b7c0 65 79 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20 70  ey->u.i;.  if( p
1b7d0 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c 69  C->nextRowidVali
1b7e0 64 20 26 26 20 70 4b 65 79 2d 3e 75 2e 69 3e 3d  d && pKey->u.i>=
1b7f0 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 20 29 7b  pC->nextRowid ){
1b800 0a 20 20 20 20 70 43 2d 3e 6e 65 78 74 52 6f 77  .    pC->nextRow
1b810 69 64 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d  idValid = 0;.  }
1b820 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c  .  if( pData->fl
1b830 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
1b840 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d  {.    pData->z =
1b850 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e   0;.    pData->n
1b860 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
1b870 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61     assert( pData
1b880 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42  ->flags & (MEM_B
1b890 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a  lob|MEM_Str) );.
1b8a0 20 20 7d 0a 20 20 69 66 28 20 70 43 2d 3e 70 73    }.  if( pC->ps
1b8b0 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20  eudoTable ){.   
1b8c0 20 69 66 28 20 21 70 43 2d 3e 65 70 68 65 6d 50   if( !pC->ephemP
1b8d0 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20  seudoTable ){.  
1b8e0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
1b8f0 65 28 64 62 2c 20 70 43 2d 3e 70 44 61 74 61 29  e(db, pC->pData)
1b900 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  ;.    }.    pC->
1b910 69 4b 65 79 20 3d 20 69 4b 65 79 3b 0a 20 20 20  iKey = iKey;.   
1b920 20 70 43 2d 3e 6e 44 61 74 61 20 3d 20 70 44 61   pC->nData = pDa
1b930 74 61 2d 3e 6e 3b 0a 20 20 20 20 69 66 28 20 70  ta->n;.    if( p
1b940 44 61 74 61 2d 3e 7a 3d 3d 70 44 61 74 61 2d 3e  Data->z==pData->
1b950 7a 4d 61 6c 6c 6f 63 20 7c 7c 20 70 43 2d 3e 65  zMalloc || pC->e
1b960 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65 20  phemPseudoTable 
1b970 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e 70 44 61  ){.      pC->pDa
1b980 74 61 20 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a 20  ta = pData->z;. 
1b990 20 20 20 20 20 69 66 28 20 21 70 43 2d 3e 65 70       if( !pC->ep
1b9a0 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65 20 29  hemPseudoTable )
1b9b0 7b 0a 20 20 20 20 20 20 20 20 70 44 61 74 61 2d  {.        pData-
1b9c0 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 44  >flags &= ~MEM_D
1b9d0 79 6e 3b 0a 20 20 20 20 20 20 20 20 70 44 61 74  yn;.        pDat
1b9e0 61 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  a->flags |= MEM_
1b9f0 45 70 68 65 6d 3b 0a 20 20 20 20 20 20 20 20 70  Ephem;.        p
1ba00 44 61 74 61 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  Data->zMalloc = 
1ba10 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
1ba20 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 43 2d 3e  else{.      pC->
1ba30 70 44 61 74 61 20 3d 20 73 71 6c 69 74 65 33 4d  pData = sqlite3M
1ba40 61 6c 6c 6f 63 28 20 70 43 2d 3e 6e 44 61 74 61  alloc( pC->nData
1ba50 2b 32 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  +2 );.      if( 
1ba60 21 70 43 2d 3e 70 44 61 74 61 20 29 20 67 6f 74  !pC->pData ) got
1ba70 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20  o no_mem;.      
1ba80 6d 65 6d 63 70 79 28 70 43 2d 3e 70 44 61 74 61  memcpy(pC->pData
1ba90 2c 20 70 44 61 74 61 2d 3e 7a 2c 20 70 43 2d 3e  , pData->z, pC->
1baa0 6e 44 61 74 61 29 3b 0a 20 20 20 20 20 20 70 43  nData);.      pC
1bab0 2d 3e 70 44 61 74 61 5b 70 43 2d 3e 6e 44 61 74  ->pData[pC->nDat
1bac0 61 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43  a] = 0;.      pC
1bad0 2d 3e 70 44 61 74 61 5b 70 43 2d 3e 6e 44 61 74  ->pData[pC->nDat
1bae0 61 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  a+1] = 0;.    }.
1baf0 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
1bb00 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 0;.  }else{.  
1bb10 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 0a 20 20 20    int nZero;.   
1bb20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
1bb30 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
1bb40 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44        nZero = pD
1bb50 61 74 61 2d 3e 75 2e 69 3b 0a 20 20 20 20 7d 65  ata->u.i;.    }e
1bb60 6c 73 65 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f  lse{.      nZero
1bb70 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
1bb80 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1bb90 65 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72  eInsert(pC->pCur
1bba0 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20  sor, 0, iKey,.  
1bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbc0 20 20 20 20 20 20 20 20 20 20 70 44 61 74 61 2d            pData-
1bbd0 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a  >z, pData->n, nZ
1bbe0 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ero,.           
1bbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc00 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
1bc10 47 5f 41 50 50 45 4e 44 29 3b 0a 20 20 7d 0a 20  G_APPEND);.  }. 
1bc20 20 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56   .  pC->rowidIsV
1bc30 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  alid = 0;.  pC->
1bc40 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1bc50 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
1bc60 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1bc70 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ALE;..  /* Invok
1bc80 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
1bc90 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
1bca0 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  /.  if( rc==SQLI
1bcb0 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70  TE_OK && db->xUp
1bcc0 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
1bcd0 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
1bce0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
1bcf0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69   = db->aDb[pC->i
1bd00 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 63  Db].zName;.    c
1bd10 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 20  onst char *zTbl 
1bd20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20  = pOp->p4.z;.   
1bd30 20 69 6e 74 20 6f 70 20 3d 20 28 28 70 4f 70 2d   int op = ((pOp-
1bd40 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  >p5 & OPFLAG_ISU
1bd50 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f  PDATE) ? SQLITE_
1bd60 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f  UPDATE : SQLITE_
1bd70 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73  INSERT);.    ass
1bd80 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1bd90 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64   );.    db->xUpd
1bda0 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
1bdb0 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20  pUpdateArg, op, 
1bdc0 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29  zDb, zTbl, iKey)
1bdd0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
1bde0 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a  ->iDb>=0 );.  }.
1bdf0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1be00 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31  pcode: Delete P1
1be10 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
1be20 20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f   Delete the reco
1be30 72 64 20 61 74 20 77 68 69 63 68 20 74 68 65 20  rd at which the 
1be40 50 31 20 63 75 72 73 6f 72 20 69 73 20 63 75 72  P1 cursor is cur
1be50 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e  rently pointing.
1be60 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  .**.** The curso
1be70 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70  r will be left p
1be80 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65  ointing at eithe
1be90 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68  r the next or th
1bea0 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65  e previous.** re
1beb0 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c  cord in the tabl
1bec0 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74  e. If it is left
1bed0 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
1bee0 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68   next record, th
1bef0 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e  en.** the next N
1bf00 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
1bf10 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e  will be a no-op.
1bf20 20 20 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b    Hence it is OK
1bf30 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20   to delete.** a 
1bf40 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68  record from with
1bf50 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e  in an Next loop.
1bf60 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
1bf70 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
1bf80 67 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20  g of P2 is set, 
1bf90 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61  then the row cha
1bfa0 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20  nge count is.** 
1bfb0 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
1bfc0 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a  erwise not)..**.
1bfd0 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62  ** P1 must not b
1bfe0 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  e pseudo-table. 
1bff0 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20   It has to be a 
1c000 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a  real table with.
1c010 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  ** multiple rows
1c020 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
1c030 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
1c040 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  it is the name o
1c050 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
1c060 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69   P1 is.** pointi
1c070 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61  ng to.  The upda
1c080 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20  te hook will be 
1c090 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65  invoked, if it e
1c0a0 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20  xists..** If P4 
1c0b0 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e  is not NULL then
1c0c0 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
1c0d0 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f  ust have been po
1c0e0 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e  sitioned.** usin
1c0f0 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72  g OP_NotFound pr
1c100 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20  ior to invoking 
1c110 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  this opcode..*/.
1c120 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20  case OP_Delete: 
1c130 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  {.  int i = pOp-
1c140 3e 70 31 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b  >p1;.  i64 iKey;
1c150 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  .  Cursor *pC;..
1c160 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
1c170 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
1c180 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1c190 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  r[i];.  assert( 
1c1a0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1c1b0 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
1c1c0 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61  0 );  /* Only va
1c1d0 6c 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62  lid for real tab
1c1e0 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61  les, no pseudota
1c1f0 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  bles */..  /* If
1c200 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
1c210 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64   will be invoked
1c220 2c 20 73 65 74 20 69 4b 65 79 20 74 6f 20 74 68  , set iKey to th
1c230 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 0a 20  e rowid of the. 
1c240 20 2a 2a 20 72 6f 77 20 62 65 69 6e 67 20 64 65   ** row being de
1c250 6c 65 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66  leted..  */.  if
1c260 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  ( db->xUpdateCal
1c270 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34  lback && pOp->p4
1c280 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  .z ){.    assert
1c290 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1c2a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1c2b0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 3b  >rowidIsValid );
1c2c0 20 20 2f 2a 20 6c 61 73 74 52 6f 77 69 64 20 73    /* lastRowid s
1c2d0 65 74 20 62 79 20 70 72 65 76 69 6f 75 73 20 4f  et by previous O
1c2e0 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20  P_NotFound */.  
1c2f0 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73    iKey = pC->las
1c300 74 52 6f 77 69 64 3b 0a 20 20 7d 0a 0a 20 20 72  tRowid;.  }..  r
1c310 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
1c320 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
1c330 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1c340 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1c350 72 6f 72 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ror;.  rc = sqli
1c360 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70  te3BtreeDelete(p
1c370 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70  C->pCursor);.  p
1c380 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c 69  C->nextRowidVali
1c390 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  d = 0;.  pC->cac
1c3a0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1c3b0 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e  _STALE;..  /* In
1c3c0 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d  voke the update-
1c3d0 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
1c3e0 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53  . */.  if( rc==S
1c3f0 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e  QLITE_OK && db->
1c400 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
1c410 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  && pOp->p4.z ){.
1c420 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
1c430 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43  zDb = db->aDb[pC
1c440 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20  ->iDb].zName;.  
1c450 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
1c460 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  bl = pOp->p4.z;.
1c470 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
1c480 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
1c490 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44  ateArg, SQLITE_D
1c4a0 45 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62 6c  ELETE, zDb, zTbl
1c4b0 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73  , iKey);.    ass
1c4c0 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
1c4d0 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  );.  }.  if( pOp
1c4e0 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p2 & OPFLAG_NC
1c4f0 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
1c500 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ge++;.  break;.}
1c510 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
1c520 65 74 43 6f 75 6e 74 20 50 31 20 2a 20 2a 0a 2a  etCount P1 * *.*
1c530 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1c540 20 72 65 73 65 74 73 20 74 68 65 20 56 4d 73 20   resets the VMs 
1c550 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20  internal change 
1c560 63 6f 75 6e 74 65 72 20 74 6f 20 30 2e 20 49 66  counter to 0. If
1c570 20 50 31 20 69 73 20 74 72 75 65 2c 0a 2a 2a 20   P1 is true,.** 
1c580 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  then the value o
1c590 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75  f the change cou
1c5a0 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20 74  nter is copied t
1c5b0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
1c5c0 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20  andle.** change 
1c5d0 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65  counter (returne
1c5e0 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74 20  d by subsequent 
1c5f0 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33  calls to sqlite3
1c600 5f 63 68 61 6e 67 65 73 28 29 29 0a 2a 2a 20 62  _changes()).** b
1c610 65 66 6f 72 65 20 69 74 20 69 73 20 72 65 73 65  efore it is rese
1c620 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  t. This is used 
1c630 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
1c640 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ams..*/.case OP_
1c650 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20  ResetCount: {.  
1c660 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
1c670 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
1c680 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
1c690 6e 43 68 61 6e 67 65 29 3b 0a 20 20 7d 0a 20 20  nChange);.  }.  
1c6a0 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  p->nChange = 0;.
1c6b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1c6c0 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50  pcode: RowData P
1c6d0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1c6e0 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
1c6f0 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70  ster P2 the comp
1c700 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20 66 6f  lete row data fo
1c710 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
1c720 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65  There is no inte
1c730 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
1c740 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20  e data.  .** It 
1c750 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f  is just copied o
1c760 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73  nto the P2 regis
1c770 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a  ter exactly as .
1c780 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69  ** it is found i
1c790 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
1c7a0 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ile..**.** If th
1c7b0 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
1c7c0 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   be pointing to 
1c7d0 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74  a valid row (not
1c7e0 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20   a NULL row).** 
1c7f0 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  of a real table,
1c800 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
1c810 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ble..*/./* Opcod
1c820 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32 20  e: RowKey P1 P2 
1c830 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
1c840 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
1c850 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
1c860 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73  row key for curs
1c870 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20  or P1..** There 
1c880 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61  is no interpreta
1c890 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61  tion of the data
1c8a0 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69  .  .** The key i
1c8b0 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68  s copied onto th
1c8c0 65 20 50 33 20 72 65 67 69 73 74 65 72 20 65 78  e P3 register ex
1c8d0 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20  actly as .** it 
1c8e0 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  is found in the 
1c8f0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
1c900 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63  *.** If the P1 c
1c910 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f  ursor must be po
1c920 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69  inting to a vali
1c930 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c  d row (not a NUL
1c940 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72  L row).** of a r
1c950 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
1c960 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
1c970 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79  /.case OP_RowKey
1c980 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74  :.case OP_RowDat
1c990 61 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70  a: {.  int i = p
1c9a0 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f 72  Op->p1;.  Cursor
1c9b0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
1c9c0 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e   *pCrsr;.  u32 n
1c9d0 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  ;..  pOut = &p->
1c9e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 0a  aMem[pOp->p2];..
1c9f0 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52    /* Note that R
1ca00 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74  owKey and RowDat
1ca10 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61  a are really exa
1ca20 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e  ctly the same in
1ca30 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61  struction */.  a
1ca40 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
1ca50 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1ca60 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69   pC = p->apCsr[i
1ca70 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  ];.  assert( pC-
1ca80 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d  >isTable || pOp-
1ca90 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 4b  >opcode==OP_RowK
1caa0 65 79 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ey );.  assert( 
1cab0 70 43 2d 3e 69 73 49 6e 64 65 78 20 7c 7c 20 70  pC->isIndex || p
1cac0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52  Op->opcode==OP_R
1cad0 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65  owData );.  asse
1cae0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1caf0 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52  ssert( pC->nullR
1cb00 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ow==0 );.  asser
1cb10 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
1cb20 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  le==0 );.  asser
1cb30 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
1cb40 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
1cb50 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 72 63  C->pCursor;.  rc
1cb60 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
1cb70 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
1cb80 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
1cb90 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1cba0 6f 72 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  or;.  if( pC->is
1cbb0 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 69 36 34  Index ){.    i64
1cbc0 20 6e 36 34 3b 0a 20 20 20 20 61 73 73 65 72 74   n64;.    assert
1cbd0 28 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  ( !pC->isTable )
1cbe0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  ;.    sqlite3Btr
1cbf0 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c  eeKeySize(pCrsr,
1cc00 20 26 6e 36 34 29 3b 0a 20 20 20 20 69 66 28 20   &n64);.    if( 
1cc10 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  n64>db->aLimit[S
1cc20 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
1cc30 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  TH] ){.      got
1cc40 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
1cc50 0a 20 20 20 20 6e 20 3d 20 6e 36 34 3b 0a 20 20  .    n = n64;.  
1cc60 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
1cc70 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28  e3BtreeDataSize(
1cc80 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20  pCrsr, &n);.    
1cc90 69 66 28 20 6e 3e 64 62 2d 3e 61 4c 69 6d 69 74  if( n>db->aLimit
1cca0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
1ccb0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
1ccc0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
1ccd0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c   }.  }.  if( sql
1cce0 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
1ccf0 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20  pOut, n, 0) ){. 
1cd00 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
1cd10 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20    }.  pOut->n = 
1cd20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  n;.  MemSetTypeF
1cd30 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c  lag(pOut, MEM_Bl
1cd40 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69  ob);.  if( pC->i
1cd50 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63  sIndex ){.    rc
1cd60 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
1cd70 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ey(pCrsr, 0, n, 
1cd80 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73  pOut->z);.  }els
1cd90 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
1cda0 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72  te3BtreeData(pCr
1cdb0 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e  sr, 0, n, pOut->
1cdc0 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  z);.  }.  pOut->
1cdd0 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
1cde0 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
1cdf0 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
1ce00 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a  cast to text */.
1ce10 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
1ce20 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
1ce30 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1ce40 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20  de: Rowid P1 P2 
1ce50 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  * * *.**.** Stor
1ce60 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
1ce70 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
1ce80 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  h is the key of 
1ce90 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
1cea0 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75  that.** P1 is cu
1ceb0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f  rrently point to
1cec0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
1ced0 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
1cee0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
1cef0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
1cf00 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  t i = pOp->p1;. 
1cf10 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69   Cursor *pC;.  i
1cf20 36 34 20 76 3b 0a 0a 20 20 61 73 73 65 72 74 28  64 v;..  assert(
1cf30 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
1cf40 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1cf50 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61  p->apCsr[i];.  a
1cf60 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1cf70 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
1cf80 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
1cf90 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  C);.  if( rc ) g
1cfa0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1cfb0 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 43  _error;.  if( pC
1cfc0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29  ->rowidIsValid )
1cfd0 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61  {.    v = pC->la
1cfe0 73 74 52 6f 77 69 64 3b 0a 20 20 7d 65 6c 73 65  stRowid;.  }else
1cff0 20 69 66 28 20 70 43 2d 3e 70 73 65 75 64 6f 54   if( pC->pseudoT
1d000 61 62 6c 65 20 29 7b 0a 20 20 20 20 76 20 3d 20  able ){.    v = 
1d010 6b 65 79 54 6f 49 6e 74 28 70 43 2d 3e 69 4b 65  keyToInt(pC->iKe
1d020 79 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  y);.  }else if( 
1d030 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
1d040 20 20 20 2f 2a 20 4c 65 61 76 65 20 74 68 65 20     /* Leave the 
1d050 72 6f 77 69 64 20 73 65 74 20 74 6f 20 61 20 4e  rowid set to a N
1d060 55 4c 4c 20 2a 2f 0a 20 20 20 20 62 72 65 61 6b  ULL */.    break
1d070 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
1d080 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
1d090 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  or!=0 );.    sql
1d0a0 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
1d0b0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76  (pC->pCursor, &v
1d0c0 29 3b 0a 20 20 20 20 76 20 3d 20 6b 65 79 54 6f  );.    v = keyTo
1d0d0 49 6e 74 28 76 29 3b 0a 20 20 7d 0a 20 20 70 4f  Int(v);.  }.  pO
1d0e0 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 4d  ut->u.i = v;.  M
1d0f0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
1d100 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
1d110 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1d120 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20  ode: NullRow P1 
1d130 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f  * * * *.**.** Mo
1d140 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50 31  ve the cursor P1
1d150 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20   to a null row. 
1d160 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   Any OP_Column o
1d170 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61  perations.** tha
1d180 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68  t occur while th
1d190 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74  e cursor is on t
1d1a0 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c  he null row will
1d1b0 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65   always.** write
1d1c0 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65   a NULL..*/.case
1d1d0 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20   OP_NullRow: {. 
1d1e0 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31   int i = pOp->p1
1d1f0 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a  ;.  Cursor *pC;.
1d200 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
1d210 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
1d220 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1d230 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28  sr[i];.  assert(
1d240 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e   pC!=0 );.  pC->
1d250 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1d260 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1d270 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
1d280 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74  ./* Opcode: Last
1d290 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1d2a0 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20  ** The next use 
1d2b0 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20  of the Rowid or 
1d2c0 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69  Column or Next i
1d2d0 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50  nstruction for P
1d2e0 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72  1 .** will refer
1d2f0 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74   to the last ent
1d300 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ry in the databa
1d310 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
1d320 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  x..** If the tab
1d330 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65  le or index is e
1d340 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74  mpty and P2>0, t
1d350 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
1d360 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
1d370 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20  f P2 is 0 or if 
1d380 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
1d390 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c  ex is not empty,
1d3a0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
1d3b0 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
1d3c0 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  g instruction..*
1d3d0 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20  /.case OP_Last: 
1d3e0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
1d3f0 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f   */.  int i = pO
1d400 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f 72 20  p->p1;.  Cursor 
1d410 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
1d420 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
1d430 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e  s;..  assert( i>
1d440 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73  =0 && i<p->nCurs
1d450 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1d460 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65  apCsr[i];.  asse
1d470 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
1d480 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
1d490 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
1d4a0 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d  rsr!=0 );.  rc =
1d4b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1d4c0 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a  t(pCrsr, &res);.
1d4d0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1d4e0 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  res;.  pC->defer
1d4f0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
1d500 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1d510 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1d520 20 20 69 66 28 20 72 65 73 20 26 26 20 70 4f 70    if( res && pOp
1d530 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20 70 63  ->p2>0 ){.    pc
1d540 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1d550 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1d560 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
1d570 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1d580 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64  ** This opcode d
1d590 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68 65 20  oes exactly the 
1d5a0 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50  same thing as OP
1d5b0 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74 20 74  _Rewind except t
1d5c0 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d  hat.** it increm
1d5d0 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65  ents an undocume
1d5e0 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69  nted global vari
1d5f0 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  able used for te
1d600 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72  sting..**.** Sor
1d610 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69  ting is accompli
1d620 73 68 65 64 20 62 79 20 77 72 69 74 69 6e 67 20  shed by writing 
1d630 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73  records into a s
1d640 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a  orting index,.**
1d650 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20   then rewinding 
1d660 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70  that index and p
1d670 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66  laying it back f
1d680 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  rom beginning to
1d690 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65  .** end.  We use
1d6a0 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63   the OP_Sort opc
1d6b0 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f  ode instead of O
1d6c0 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74  P_Rewind to do t
1d6d0 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20  he.** rewinding 
1d6e0 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62  so that the glob
1d6f0 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c  al variable will
1d700 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   be incremented 
1d710 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f  and.** regressio
1d720 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65 74 65  n tests can dete
1d730 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72  rmine whether or
1d740 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a   not the optimiz
1d750 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74  er is.** correct
1d760 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75  ly optimizing ou
1d770 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65  t sorts..*/.case
1d780 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20   OP_Sort: {     
1d790 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69     /* jump */.#i
1d7a0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
1d7b0 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  .  sqlite3_sort_
1d7c0 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74  count++;.  sqlit
1d7d0 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d  e3_search_count-
1d7e0 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 20 46  -;.#endif.  /* F
1d7f0 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
1d800 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a   OP_Rewind */.}.
1d810 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e  /* Opcode: Rewin
1d820 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
1d830 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65  .** The next use
1d840 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72   of the Rowid or
1d850 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20   Column or Next 
1d860 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20  instruction for 
1d870 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65  P1 .** will refe
1d880 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  r to the first e
1d890 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61  ntry in the data
1d8a0 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
1d8b0 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74  dex..** If the t
1d8c0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
1d8d0 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c   empty and P2>0,
1d8e0 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
1d8f0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
1d900 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69   If P2 is 0 or i
1d910 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
1d920 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
1d930 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  y, fall through.
1d940 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
1d950 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
1d960 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69  .*/.case OP_Rewi
1d970 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
1d980 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 69 20  jump */.  int i 
1d990 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72  = pOp->p1;.  Cur
1d9a0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
1d9b0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
1d9c0 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
1d9d0 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
1d9e0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1d9f0 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20   p->apCsr[i];.  
1da00 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1da10 0a 20 20 69 66 28 20 28 70 43 72 73 72 20 3d 20  .  if( (pCrsr = 
1da20 70 43 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20  pC->pCursor)!=0 
1da30 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
1da40 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
1da50 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  rsr, &res);.    
1da60 70 43 2d 3e 61 74 46 69 72 73 74 20 3d 20 72 65  pC->atFirst = re
1da70 73 3d 3d 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65  s==0;.    pC->de
1da80 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1da90 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
1daa0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1dab0 41 4c 45 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ALE;.  }else{.  
1dac0 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d 0a 20    res = 1;.  }. 
1dad0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 72   pC->nullRow = r
1dae0 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  es;.  assert( pO
1daf0 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
1db00 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69  p2<p->nOp );.  i
1db10 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  f( res ){.    pc
1db20 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1db30 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1db40 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20  /* Opcode: Next 
1db50 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1db60 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72  * Advance cursor
1db70 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
1db80 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78  oints to the nex
1db90 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  t key/data pair 
1dba0 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
1dbb0 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
1dbc0 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20  ere are no more 
1dbd0 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
1dbe0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
1dbf0 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
1dc00 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
1dc10 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
1dc20 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61  ursor advance wa
1dc30 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
1dc40 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
1dc50 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  y to P2..**.** T
1dc60 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
1dc70 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
1dc80 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
1dc90 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  udo-table..**.**
1dca0 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a   See also: Prev.
1dcb0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  */./* Opcode: Pr
1dcc0 65 76 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ev P1 P2 * * *.*
1dcd0 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72  *.** Back up cur
1dce0 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
1dcf0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1dd00 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74  previous key/dat
1dd10 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a  a pair in its.**
1dd20 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
1dd30 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f    If there is no
1dd40 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61   previous key/va
1dd50 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
1dd60 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
1dd70 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
1dd80 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
1dd90 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
1dda0 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65  backup was succe
1ddb0 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
1ddc0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
1ddd0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
1dde0 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
1ddf0 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
1de00 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
1de10 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  le..*/.case OP_P
1de20 72 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  rev:          /*
1de30 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
1de40 5f 4e 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20  _Next: {        
1de50 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 43 75 72  /* jump */.  Cur
1de60 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
1de70 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
1de80 74 20 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f  t res;..  CHECK_
1de90 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
1dea0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1deb0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1dec0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1ded0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1dee0 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d  ->p1];.  if( pC=
1def0 3d 30 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  =0 ){.    break;
1df00 20 20 2f 2a 20 53 65 65 20 74 69 63 6b 65 74 20    /* See ticket 
1df10 23 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 70  #2273 */.  }.  p
1df20 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
1df30 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
1df40 72 73 72 20 29 3b 0a 20 20 72 65 73 20 3d 20 31  rsr );.  res = 1
1df50 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1df60 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
1df70 30 20 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d  0 );.  rc = pOp-
1df80 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78 74  >opcode==OP_Next
1df90 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e   ? sqlite3BtreeN
1dfa0 65 78 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  ext(pCrsr, &res)
1dfb0 20 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   :.             
1dfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfd0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
1dfe0 76 69 6f 75 73 28 70 43 72 73 72 2c 20 26 72 65  vious(pCrsr, &re
1dff0 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  s);.  pC->nullRo
1e000 77 20 3d 20 72 65 73 3b 0a 20 20 70 43 2d 3e 63  w = res;.  pC->c
1e010 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1e020 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
1e030 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63  res==0 ){.    pc
1e040 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1e050 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
1e060 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
1e070 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
1e080 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e  endif.  }.  pC->
1e090 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1e0a0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1e0b0 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65   Opcode: IdxInse
1e0c0 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  rt P1 P2 P3 * *.
1e0d0 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
1e0e0 32 20 68 6f 6c 64 73 20 61 20 53 51 4c 20 69 6e  2 holds a SQL in
1e0f0 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69  dex key made usi
1e100 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 49 64  ng the.** MakeId
1e110 78 52 65 63 20 69 6e 73 74 72 75 63 74 69 6f 6e  xRec instruction
1e120 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  s.  This opcode 
1e130 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a  writes that key.
1e140 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65  ** into the inde
1e150 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20  x P1.  Data for 
1e160 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c  the entry is nil
1e170 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20  ..**.** P3 is a 
1e180 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76 69 64  flag that provid
1e190 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  es a hint to the
1e1a0 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20 74 68   b-tree layer th
1e1b0 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72  at this.** inser
1e1c0 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62  t is likely to b
1e1d0 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a  e an append..**.
1e1e0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
1e1f0 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  ion only works f
1e200 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65  or indices.  The
1e210 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74   equivalent inst
1e220 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74  ruction.** for t
1e230 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65  ables is OP_Inse
1e240 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  rt..*/.case OP_I
1e250 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20  dxInsert: {     
1e260 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 69     /* in2 */.  i
1e270 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
1e280 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20    Cursor *pC;.  
1e290 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1e2a0 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
1e2b0 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
1e2c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
1e2d0 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20  apCsr[i]!=0 );. 
1e2e0 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66   assert( pIn2->f
1e2f0 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
1e300 29 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72 20  );.  if( (pCrsr 
1e310 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  = (pC = p->apCsr
1e320 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21 3d  [i])->pCursor)!=
1e330 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
1e340 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
1e350 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78 70 61  );.    rc = Expa
1e360 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20  ndBlob(pIn2);.  
1e370 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1e380 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  _OK ){.      int
1e390 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b   nKey = pIn2->n;
1e3a0 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
1e3b0 72 20 2a 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e  r *zKey = pIn2->
1e3c0 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  z;.      rc = sq
1e3d0 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
1e3e0 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b  (pCrsr, zKey, nK
1e3f0 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f  ey, "", 0, 0, pO
1e400 70 2d 3e 70 33 29 3b 0a 20 20 20 20 20 20 61 73  p->p3);.      as
1e410 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
1e420 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
1e430 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74       pC->cacheSt
1e440 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1e450 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  LE;.    }.  }.  
1e460 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1e470 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 4d 20  ode: IdxDeleteM 
1e480 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
1e490 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** The content o
1e4a0 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73  f P3 registers s
1e4b0 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73  tarting at regis
1e4c0 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61  ter P2 form.** a
1e4d0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1e4e0 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64   key. This opcod
1e4f0 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65  e removes that e
1e500 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a  ntry from the .*
1e510 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62  * index opened b
1e520 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a  y cursor P1..*/.
1e530 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74  case OP_IdxDelet
1e540 65 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70  e: {.  int i = p
1e550 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f 72  Op->p1;.  Cursor
1e560 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
1e570 20 2a 70 43 72 73 72 3b 0a 20 20 61 73 73 65 72   *pCrsr;.  asser
1e580 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
1e590 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e5a0 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70  2>0 && pOp->p2+p
1e5b0 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
1e5c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  );.  assert( i>=
1e5d0 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f  0 && i<p->nCurso
1e5e0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1e5f0 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b  ->apCsr[i]!=0 );
1e600 0a 20 20 69 66 28 20 28 70 43 72 73 72 20 3d 20  .  if( (pCrsr = 
1e610 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69  (pC = p->apCsr[i
1e620 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20  ])->pCursor)!=0 
1e630 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 3b 0a  ){.    int res;.
1e640 20 20 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f      UnpackedReco
1e650 72 64 20 72 3b 0a 20 20 20 20 72 2e 70 4b 65 79  rd r;.    r.pKey
1e660 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
1e670 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
1e680 64 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20  d = pOp->p3;.   
1e690 20 72 2e 6e 65 65 64 46 72 65 65 20 3d 20 30 3b   r.needFree = 0;
1e6a0 0a 20 20 20 20 72 2e 6e 65 65 64 44 65 73 74 72  .    r.needDestr
1e6b0 6f 79 20 3d 20 30 3b 0a 20 20 20 20 72 2e 61 4d  oy = 0;.    r.aM
1e6c0 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  em = &p->aMem[pO
1e6d0 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 72 63 20 3d  p->p2];.    rc =
1e6e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1e6f0 65 74 6f 28 70 43 72 73 72 2c 20 30 2c 20 26 72  eto(pCrsr, 0, &r
1e700 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
1e710 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
1e720 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29  E_OK && res==0 )
1e730 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
1e740 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
1e750 70 43 72 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20  pCrsr);.    }.  
1e760 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
1e770 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
1e780 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  );.    pC->cache
1e790 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1e7a0 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 62 72 65 61  TALE;.  }.  brea
1e7b0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1e7c0 20 49 64 78 52 6f 77 69 64 20 50 31 20 50 32 20   IdxRowid P1 P2 
1e7d0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
1e7e0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
1e7f0 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
1e800 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20  ich is the last 
1e810 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63  entry in the rec
1e820 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e  ord at.** the en
1e830 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
1e840 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  ey pointed to by
1e850 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69   cursor P1.  Thi
1e860 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64  s integer should
1e870 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64   be.** the rowid
1e880 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e   of the table en
1e890 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69  try to which thi
1e8a0 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f  s index entry po
1e8b0 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ints..**.** See 
1e8c0 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b  also: Rowid, Mak
1e8d0 65 49 64 78 52 65 63 2e 0a 2a 2f 0a 63 61 73 65  eIdxRec..*/.case
1e8e0 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20   OP_IdxRowid: { 
1e8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e900 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
1e910 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70  */.  int i = pOp
1e920 2d 3e 70 31 3b 0a 20 20 42 74 43 75 72 73 6f 72  ->p1;.  BtCursor
1e930 20 2a 70 43 72 73 72 3b 0a 20 20 43 75 72 73 6f   *pCrsr;.  Curso
1e940 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
1e950 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
1e960 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
1e970 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21  rt( p->apCsr[i]!
1e980 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 43 72  =0 );.  if( (pCr
1e990 73 72 20 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70  sr = (pC = p->ap
1e9a0 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72  Csr[i])->pCursor
1e9b0 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 36 34 20  )!=0 ){.    i64 
1e9c0 72 6f 77 69 64 3b 0a 0a 20 20 20 20 61 73 73 65  rowid;..    asse
1e9d0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
1e9e0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
1e9f0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1ea00 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69  able==0 );.    i
1ea10 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  f( !pC->nullRow 
1ea20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
1ea30 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69  lite3VdbeIdxRowi
1ea40 64 28 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29  d(pCrsr, &rowid)
1ea50 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
1ea60 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1ea70 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1ea80 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1ea90 20 20 20 20 7d 0a 20 20 20 20 20 20 4d 65 6d 53      }.      MemS
1eaa0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
1eab0 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 20   MEM_Int);.     
1eac0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77   pOut->u.i = row
1ead0 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  id;.    }.  }.  
1eae0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1eaf0 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32  ode: IdxGE P1 P2
1eb00 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
1eb10 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
1eb20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
1eb30 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
1eb40 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1eb50 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
1eb60 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43  ts the ROWID.  C
1eb70 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
1eb80 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
1eb90 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
1eba0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
1ebb0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
1ebc0 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44  noring the ROWID
1ebd0 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
1ebe0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
1ebf0 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
1ec00 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
1ec10 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1ec20 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20  y value.** then 
1ec30 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68  jump to P2.  Oth
1ec40 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
1ec50 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
1ec60 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
1ec70 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
1ec80 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65  zero then the ke
1ec90 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65  y value is incre
1eca0 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c  ased by an epsil
1ecb0 6f 6e 20 0a 2a 2a 20 70 72 69 6f 72 20 74 6f 20  on .** prior to 
1ecc0 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
1ecd0 20 54 68 69 73 20 6d 61 6b 65 20 74 68 65 20 6f   This make the o
1ece0 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20  pcode work like 
1ecf0 49 64 78 47 54 20 65 78 63 65 70 74 0a 2a 2a 20  IdxGT except.** 
1ed00 74 68 61 74 20 69 66 20 74 68 65 20 6b 65 79 20  that if the key 
1ed10 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33  from register P3
1ed20 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20   is a prefix of 
1ed30 74 68 65 20 6b 65 79 20 69 6e 20 74 68 65 20 63  the key in the c
1ed40 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 20 72 65  ursor,.** the re
1ed50 73 75 6c 74 20 69 73 20 66 61 6c 73 65 20 77 68  sult is false wh
1ed60 65 72 65 61 73 20 69 74 20 77 6f 75 6c 64 20 62  ereas it would b
1ed70 65 20 74 72 75 65 20 77 69 74 68 20 49 64 78 47  e true with IdxG
1ed80 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T..*/./* Opcode:
1ed90 20 49 64 78 4c 54 20 50 31 20 50 32 20 50 33 20   IdxLT P1 P2 P3 
1eda0 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  * P5.**.** The P
1edb0 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
1edc0 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
1edd0 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
1ede0 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
1edf0 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
1ee00 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  e ROWID.  Compar
1ee10 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
1ee20 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
1ee30 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
1ee40 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
1ee50 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
1ee60 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74  g the ROWID on t
1ee70 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a  he P1 index..**.
1ee80 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
1ee90 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73  ex entry is less
1eea0 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
1eeb0 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  lue then jump to
1eec0 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73   P2..** Otherwis
1eed0 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
1eee0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
1eef0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  uction..**.** If
1ef00 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20   P5 is non-zero 
1ef10 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  then the key val
1ef20 75 65 20 69 73 20 69 6e 63 72 65 61 73 65 64 20  ue is increased 
1ef30 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 70 72  by an epsilon pr
1ef40 69 6f 72 20 0a 2a 2a 20 74 6f 20 74 68 65 20 63  ior .** to the c
1ef50 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73  omparison.  This
1ef60 20 6d 61 6b 65 73 20 74 68 65 20 6f 70 63 6f 64   makes the opcod
1ef70 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 4c  e work like IdxL
1ef80 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  E..*/.case OP_Id
1ef90 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xLT:          /*
1efa0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1efb0 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 7b 20 20  se OP_IdxGE: {  
1efc0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1efd0 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 3d 20 70  n3 */.  int i= p
1efe0 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f 72  Op->p1;.  Cursor
1eff0 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
1f000 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
1f010 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1f020 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d  t( p->apCsr[i]!=
1f030 30 20 29 3b 0a 20 20 69 66 28 20 28 70 43 20 3d  0 );.  if( (pC =
1f040 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70   p->apCsr[i])->p
1f050 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20  Cursor!=0 ){.   
1f060 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 55 6e   int res;.    Un
1f070 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
1f080 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1f090 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
1f0a0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
1f0b0 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
1f0c0 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20  Op->p5==1 );.   
1f0d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1f0e0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1f0f0 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f  ;.    r.pKeyInfo
1f100 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
1f110 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
1f120 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72  pOp->p4.i;.    r
1f130 2e 6e 65 65 64 46 72 65 65 20 3d 20 30 3b 0a 20  .needFree = 0;. 
1f140 20 20 20 72 2e 6e 65 65 64 44 65 73 74 72 6f 79     r.needDestroy
1f150 20 3d 20 30 3b 0a 20 20 20 20 72 2e 61 4d 65 6d   = 0;.    r.aMem
1f160 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
1f170 3e 70 33 5d 3b 0a 20 20 20 20 2a 70 43 2d 3e 70  >p3];.    *pC->p
1f180 49 6e 63 72 4b 65 79 20 3d 20 70 4f 70 2d 3e 70  IncrKey = pOp->p
1f190 35 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  5;.    rc = sqli
1f1a0 74 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d  te3VdbeIdxKeyCom
1f1b0 70 61 72 65 28 70 43 2c 20 26 72 2c 20 30 2c 20  pare(pC, &r, 0, 
1f1c0 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 2a 70  0, &res);.    *p
1f1d0 43 2d 3e 70 49 6e 63 72 4b 65 79 20 3d 20 30 3b  C->pIncrKey = 0;
1f1e0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  .    if( pOp->op
1f1f0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29  code==OP_IdxLT )
1f200 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 2d 72  {.      res = -r
1f210 65 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  es;.    }else{. 
1f220 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1f230 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
1f240 47 45 20 29 3b 0a 20 20 20 20 20 20 72 65 73 2b  GE );.      res+
1f250 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
1f260 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 20 20   res>0 ){.      
1f270 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1f280 20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   ;.    }.  }.  b
1f290 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1f2a0 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50  de: Destroy P1 P
1f2b0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 P3 * *.**.** D
1f2c0 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20  elete an entire 
1f2d0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
1f2e0 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
1f2f0 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 64  ot page in the d
1f300 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20  atabase.** file 
1f310 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a  is given by P1..
1f320 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
1f330 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20  being destroyed 
1f340 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
1f350 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
1f360 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33  P3==0.  If.** P3
1f370 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
1f380 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
1f390 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
1f3a0 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
1f3b0 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
1f3c0 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
1f3d0 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
1f3e0 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
1f3f0 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41  ABLE..**.** If A
1f400 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61  UTOVACUUM is ena
1f410 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73 20  bled then it is 
1f420 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e  possible that an
1f430 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a  other root page.
1f440 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65  ** might be move
1f450 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79  d into the newly
1f460 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61   deleted root pa
1f470 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ge in order to k
1f480 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20  eep all.** root 
1f490 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73  pages contiguous
1f4a0 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
1f4b0 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  g of the databas
1f4c0 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a  e.  The former.*
1f4d0 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72  * value of the r
1f4e0 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f  oot page that mo
1f4f0 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20  ved - its value 
1f500 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20  before the move 
1f510 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73  occurred -.** is
1f520 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
1f530 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70  ter P2.  If no p
1f540 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74  age .** movement
1f550 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62   was required (b
1f560 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
1f570 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77   being dropped w
1f580 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74  as already .** t
1f590 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74  he last one in t
1f5a0 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65  he database) the
1f5b0 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72  n a zero is stor
1f5c0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
1f5d0 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43  2..** If AUTOVAC
1f5e0 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20  UUM is disabled 
1f5f0 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73  then a zero is s
1f600 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
1f610 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  r P2..**.** See 
1f620 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63  also: Clear.*/.c
1f630 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20  ase OP_Destroy: 
1f640 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72  {     /* out2-pr
1f650 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
1f660 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20  t iMoved;.  int 
1f670 69 43 6e 74 3b 0a 23 69 66 6e 64 65 66 20 53 51  iCnt;.#ifndef SQ
1f680 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1f690 4c 54 41 42 4c 45 0a 20 20 56 64 62 65 20 2a 70  LTABLE.  Vdbe *p
1f6a0 56 64 62 65 3b 0a 20 20 69 43 6e 74 20 3d 20 30  Vdbe;.  iCnt = 0
1f6b0 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64 62  ;.  for(pVdbe=db
1f6c0 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b 20  ->pVdbe; pVdbe; 
1f6d0 70 56 64 62 65 3d 70 56 64 62 65 2d 3e 70 4e 65  pVdbe=pVdbe->pNe
1f6e0 78 74 29 7b 0a 20 20 20 20 69 66 28 20 70 56 64  xt){.    if( pVd
1f6f0 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f  be->magic==VDBE_
1f700 4d 41 47 49 43 5f 52 55 4e 20 26 26 20 70 56 64  MAGIC_RUN && pVd
1f710 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64  be->inVtabMethod
1f720 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e  <2 && pVdbe->pc>
1f730 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 43 6e 74  =0 ){.      iCnt
1f740 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  ++;.    }.  }.#e
1f750 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d  lse.  iCnt = db-
1f760 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3b 0a  >activeVdbeCnt;.
1f770 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69 43 6e  #endif.  if( iCn
1f780 74 3e 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  t>1 ){.    rc = 
1f790 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20  SQLITE_LOCKED;. 
1f7a0 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f     p->errorActio
1f7b0 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20  n = OE_Abort;.  
1f7c0 7d 65 6c 73 65 7b 0a 20 20 20 20 69 6e 74 20 69  }else{.    int i
1f7d0 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  Db = pOp->p3;.  
1f7e0 20 20 61 73 73 65 72 74 28 20 69 43 6e 74 3d 3d    assert( iCnt==
1f7f0 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
1f800 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
1f810 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b   (1<<iDb))!=0 );
1f820 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1f830 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28  3BtreeDropTable(
1f840 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
1f850 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76  , pOp->p1, &iMov
1f860 65 64 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54  ed);.    MemSetT
1f870 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
1f880 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74  M_Int);.    pOut
1f890 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a  ->u.i = iMoved;.
1f8a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1f8b0 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20  MIT_AUTOVACUUM. 
1f8c0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
1f8d0 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d  E_OK && iMoved!=
1f8e0 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
1f8f0 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
1f900 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2c 20 69  &db->aDb[iDb], i
1f910 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b  Moved, pOp->p1);
1f920 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
1f930 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1f940 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50   Opcode: Clear P
1f950 31 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c  1 P2 *.**.** Del
1f960 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73  ete all contents
1f970 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
1f980 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1f990 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a  whose root page.
1f9a0 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ** in the databa
1f9b0 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  se file is given
1f9c0 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e   by P1.  But, un
1f9d0 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f  like Destroy, do
1f9e0 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74   not.** remove t
1f9f0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
1fa00 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  x from the datab
1fa10 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
1fa20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
1fa30 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
1fa40 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
1fa50 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66  le if P2==0.  If
1fa60 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74  .** P2==1 then t
1fa70 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
1fa80 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
1fa90 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
1faa0 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
1fab0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
1fac0 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
1fad0 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
1fae0 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
1faf0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74  * See also: Dest
1fb00 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  roy.*/.case OP_C
1fb10 6c 65 61 72 3a 20 7b 0a 20 20 61 73 73 65 72 74  lear: {.  assert
1fb20 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
1fb30 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 32 29 29 21  & (1<<pOp->p2))!
1fb40 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
1fb50 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61  ite3BtreeClearTa
1fb60 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  ble(db->aDb[pOp-
1fb70 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  >p2].pBt, pOp->p
1fb80 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  1);.  break;.}..
1fb90 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
1fba0 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a  eTable P1 P2 * *
1fbb0 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74   *.**.** Allocat
1fbc0 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  e a new table in
1fbd0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1fbe0 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30  se file if P1==0
1fbf0 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75   or in the.** au
1fc00 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
1fc10 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f   file if P1==1 o
1fc20 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64  r in an attached
1fc30 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20   database if.** 
1fc40 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65  P1>1.  Write the
1fc50 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
1fc60 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62  r of the new tab
1fc70 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  le into.** regis
1fc80 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65  ter P2.**.** The
1fc90 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
1fca0 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20  een a table and 
1fcb0 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69 73  an index is this
1fcc0 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a  :  A table must.
1fcd0 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74 65  ** have a 4-byte
1fce0 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64   integer key and
1fcf0 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74 72   can have arbitr
1fd00 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e  ary data.  An in
1fd10 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72  dex.** has an ar
1fd20 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74 20  bitrary key but 
1fd30 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53  no data..**.** S
1fd40 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49  ee also: CreateI
1fd50 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ndex.*/./* Opcod
1fd60 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20 50  e: CreateIndex P
1fd70 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1fd80 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20   Allocate a new 
1fd90 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69  index in the mai
1fda0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
1fdb0 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74  if P1==0 or in t
1fdc0 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20  he.** auxiliary 
1fdd0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
1fde0 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20   P1==1 or in an 
1fdf0 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
1fe00 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57  e if.** P1>1.  W
1fe10 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61  rite the root pa
1fe20 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
1fe30 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a   new table into.
1fe40 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  ** register P2..
1fe50 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65  **.** See docume
1fe60 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72  ntation on OP_Cr
1fe70 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64  eateTable for ad
1fe80 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
1fe90 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
1fea0 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20  _CreateIndex:   
1feb0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
1fec0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63  -prerelease */.c
1fed0 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62  ase OP_CreateTab
1fee0 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  le: {          /
1fef0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
1ff00 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b  e */.  int pgno;
1ff10 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20  .  int flags;.  
1ff20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72  Db *pDb;.  asser
1ff30 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1ff40 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
1ff50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
1ff60 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31  ->btreeMask & (1
1ff70 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29  <<pOp->p1))!=0 )
1ff80 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
1ff90 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  Db[pOp->p1];.  a
1ffa0 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21  ssert( pDb->pBt!
1ffb0 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  =0 );.  if( pOp-
1ffc0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61  >opcode==OP_Crea
1ffd0 74 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f  teTable ){.    /
1ffe0 2a 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f  * flags = BTREE_
1fff0 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66  INTKEY; */.    f
20000 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 4c 45 41  lags = BTREE_LEA
20010 46 44 41 54 41 7c 42 54 52 45 45 5f 49 4e 54 4b  FDATA|BTREE_INTK
20020 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  EY;.  }else{.   
20030 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 5a   flags = BTREE_Z
20040 45 52 4f 44 41 54 41 3b 0a 20 20 7d 0a 20 20 72  ERODATA;.  }.  r
20050 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
20060 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d  CreateTable(pDb-
20070 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61  >pBt, &pgno, fla
20080 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  gs);.  if( rc==S
20090 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
200a0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f  pOut->u.i = pgno
200b0 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
200c0 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
200d0 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  nt);.  }.  break
200e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
200f0 50 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 50  ParseSchema P1 P
20100 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  2 * P4 *.**.** R
20110 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c  ead and parse al
20120 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  l entries from t
20130 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  he SQLITE_MASTER
20140 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61   table of databa
20150 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61  se P1.** that ma
20160 74 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  tch the WHERE cl
20170 61 75 73 65 20 50 34 2e 20 20 50 32 20 69 73 20  ause P4.  P2 is 
20180 74 68 65 20 22 66 6f 72 63 65 22 20 66 6c 61 67  the "force" flag
20190 2e 20 20 20 41 6c 77 61 79 73 20 64 6f 0a 2a 2a  .   Always do.**
201a0 20 74 68 65 20 70 61 72 73 69 6e 67 20 69 66 20   the parsing if 
201b0 50 32 20 69 73 20 74 72 75 65 2e 20 20 49 66 20  P2 is true.  If 
201c0 50 32 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  P2 is false, the
201d0 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69  n this routine i
201e0 73 20 61 0a 2a 2a 20 6e 6f 2d 6f 70 20 69 66 20  s a.** no-op if 
201f0 74 68 65 20 73 63 68 65 6d 61 20 69 73 20 6e 6f  the schema is no
20200 74 20 63 75 72 72 65 6e 74 6c 79 20 6c 6f 61 64  t currently load
20210 65 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ed.  In other wo
20220 72 64 73 2c 20 69 66 20 50 32 0a 2a 2a 20 69 73  rds, if P2.** is
20230 20 66 61 6c 73 65 2c 20 74 68 65 20 53 51 4c 49   false, the SQLI
20240 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20  TE_MASTER table 
20250 69 73 20 6f 6e 6c 79 20 70 61 72 73 65 64 20 69  is only parsed i
20260 66 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68  f the rest of th
20270 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 61  e.** schema is a
20280 6c 72 65 61 64 79 20 6c 6f 61 64 65 64 20 69 6e  lready loaded in
20290 74 6f 20 74 68 65 20 73 79 6d 62 6f 6c 20 74 61  to the symbol ta
202a0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ble..**.** This 
202b0 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
202c0 68 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65  he parser to cre
202d0 61 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61  ate a new virtua
202e0 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68  l machine,.** th
202f0 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20  en runs the new 
20300 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
20310 20 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72    It is thus a r
20320 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65  e-entrant opcode
20330 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72  ..*/.case OP_Par
20340 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 63 68  seSchema: {.  ch
20350 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 69 6e 74 20  ar *zSql;.  int 
20360 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
20370 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61   const char *zMa
20380 73 74 65 72 3b 0a 20 20 49 6e 69 74 44 61 74 61  ster;.  InitData
20390 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 61 73   initData;..  as
203a0 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
203b0 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
203c0 20 69 66 28 20 21 70 4f 70 2d 3e 70 32 20 26 26   if( !pOp->p2 &&
203d0 20 21 44 62 48 61 73 50 72 6f 70 65 72 74 79 28   !DbHasProperty(
203e0 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65  db, iDb, DB_Sche
203f0 6d 61 4c 6f 61 64 65 64 29 20 29 7b 0a 20 20 20  maLoaded) ){.   
20400 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 7a 4d   break;.  }.  zM
20410 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54  aster = SCHEMA_T
20420 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 69 6e 69  ABLE(iDb);.  ini
20430 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20  tData.db = db;. 
20440 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20   initData.iDb = 
20450 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e 69 74 44  pOp->p1;.  initD
20460 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26  ata.pzErrMsg = &
20470 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 7a 53  p->zErrMsg;.  zS
20480 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  ql = sqlite3MPri
20490 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 22 53 45  ntf(db,.     "SE
204a0 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70  LECT name, rootp
204b0 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25  age, sql FROM '%
204c0 71 27 2e 25 73 20 57 48 45 52 45 20 25 73 22 2c  q'.%s WHERE %s",
204d0 0a 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44  .     db->aDb[iD
204e0 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65  b].zName, zMaste
204f0 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  r, pOp->p4.z);. 
20500 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 20 67   if( zSql==0 ) g
20510 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 28 76  oto no_mem;.  (v
20520 6f 69 64 29 73 71 6c 69 74 65 33 53 61 66 65 74  oid)sqlite3Safet
20530 79 4f 66 66 28 64 62 29 3b 0a 20 20 61 73 73 65  yOff(db);.  asse
20540 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73  rt( db->init.bus
20550 79 3d 3d 30 20 29 3b 0a 20 20 64 62 2d 3e 69 6e  y==0 );.  db->in
20560 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 61  it.busy = 1;.  a
20570 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c  ssert( !db->mall
20580 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 72 63  ocFailed );.  rc
20590 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
205a0 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65  db, zSql, sqlite
205b0 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26  3InitCallback, &
205c0 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20  initData, 0);.  
205d0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 41  if( rc==SQLITE_A
205e0 42 4f 52 54 20 29 20 72 63 20 3d 20 69 6e 69 74  BORT ) rc = init
205f0 44 61 74 61 2e 72 63 3b 0a 20 20 73 71 6c 69 74  Data.rc;.  sqlit
20600 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71  e3DbFree(db, zSq
20610 6c 29 3b 0a 20 20 64 62 2d 3e 69 6e 69 74 2e 62  l);.  db->init.b
20620 75 73 79 20 3d 20 30 3b 0a 20 20 28 76 6f 69 64  usy = 0;.  (void
20630 29 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e  )sqlite3SafetyOn
20640 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  (db);.  if( rc==
20650 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a  SQLITE_NOMEM ){.
20660 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
20670 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a  .  }.  break;  .
20680 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  }..#if !defined(
20690 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
206a0 59 5a 45 29 20 26 26 20 21 64 65 66 69 6e 65 64  YZE) && !defined
206b0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 52  (SQLITE_OMIT_PAR
206c0 53 45 52 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  SER)./* Opcode: 
206d0 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20  LoadAnalysis P1 
206e0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65  * * * *.**.** Re
206f0 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  ad the sqlite_st
20700 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61  at1 table for da
20710 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f  tabase P1 and lo
20720 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a  ad the content.*
20730 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20  * of that table 
20740 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61  into the interna
20750 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62  l index hash tab
20760 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  le.  This will c
20770 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c  ause.** the anal
20780 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20  ysis to be used 
20790 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61  when preparing a
207a0 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75  ll subsequent qu
207b0 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eries..*/.case O
207c0 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20  P_LoadAnalysis: 
207d0 7b 0a 20 20 69 6e 74 20 69 44 62 20 3d 20 70 4f  {.  int iDb = pO
207e0 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28  p->p1;.  assert(
207f0 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
20800 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d  b->nDb );.  rc =
20810 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
20820 4c 6f 61 64 28 64 62 2c 20 69 44 62 29 3b 0a 20  Load(db, iDb);. 
20830 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64   break;  .}.#end
20840 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
20850 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
20860 5a 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ZE) && !defined(
20870 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 52 53  SQLITE_OMIT_PARS
20880 45 52 29 20 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  ER)  */../* Opco
20890 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31  de: DropTable P1
208a0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
208b0 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
208c0 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
208d0 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
208e0 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
208f0 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64   the table named
20900 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
20910 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
20920 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c  led after a tabl
20930 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  e.** is dropped 
20940 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
20950 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
20960 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
20970 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
20980 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
20990 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
209a0 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61  /.case OP_DropTa
209b0 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ble: {.  sqlite3
209c0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
209d0 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31  able(db, pOp->p1
209e0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
209f0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
20a00 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50  ode: DropIndex P
20a10 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
20a20 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
20a30 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
20a40 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
20a50 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
20a60 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65  * the index name
20a70 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
20a80 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
20a90 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e  lled after an in
20aa0 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  dex.** is droppe
20ab0 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  d in order to ke
20ac0 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
20ad0 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
20ae0 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
20af0 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
20b00 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
20b10 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
20b20 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74  Index: {.  sqlit
20b30 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
20b40 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e  eIndex(db, pOp->
20b50 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
20b60 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
20b70 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67  pcode: DropTrigg
20b80 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  er P1 * * P4 *.*
20b90 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
20ba0 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
20bb0 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
20bc0 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
20bd0 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65  be.** the trigge
20be0 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  r named P4 in da
20bf0 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
20c00 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
20c10 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73   a trigger.** is
20c20 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65   dropped in orde
20c30 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
20c40 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
20c50 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
20c60 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
20c70 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
20c80 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
20c90 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20  OP_DropTrigger: 
20ca0 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
20cb0 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
20cc0 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  r(db, pOp->p1, p
20cd0 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
20ce0 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20  ak;.}...#ifndef 
20cf0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
20d00 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f  GRITY_CHECK./* O
20d10 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79  pcode: Integrity
20d20 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  Ck P1 P2 P3 * P5
20d30 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61  .**.** Do an ana
20d40 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72  lysis of the cur
20d50 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61  rently open data
20d60 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a  base.  Store in.
20d70 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74  ** register P1 t
20d80 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72  he text of an er
20d90 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63  ror message desc
20da0 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c  ribing any probl
20db0 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72  ems..** If no pr
20dc0 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64  oblems are found
20dd0 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  , store a NULL i
20de0 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
20df0 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
20e00 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  r P3 contains th
20e10 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
20e20 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f   of allowed erro
20e30 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72  rs..** At most r
20e40 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69  eg(P3) errors wi
20e50 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a  ll be reported..
20e60 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
20e70 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  s, the analysis 
20e80 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73  stops as soon as
20e90 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20   reg(P1) errors 
20ea0 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52  are .** seen.  R
20eb0 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65  eg(P1) is update
20ec0 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65  d with the numbe
20ed0 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  r of errors rema
20ee0 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ining..**.** The
20ef0 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
20f00 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73  rs of all tables
20f10 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
20f20 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20   are integer.** 
20f30 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31  stored in reg(P1
20f40 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65  ), reg(P1+1), re
20f50 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54  g(P1+2), ....  T
20f60 68 65 72 65 20 61 72 65 20 50 32 20 74 61 62 6c  here are P2 tabl
20f70 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a  es.** total..**.
20f80 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20  ** If P5 is not 
20f90 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20  zero, the check 
20fa0 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61  is done on the a
20fb0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
20fc0 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74  e.** file, not t
20fd0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
20fe0 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   file..**.** Thi
20ff0 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
21000 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
21010 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  e integrity_chec
21020 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73  k pragma..*/.cas
21030 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b  e OP_IntegrityCk
21040 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b  : {.  int nRoot;
21050 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21060 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65  of tables to che
21070 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20  ck.  (Number of 
21080 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a  root pages.) */.
21090 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20    int *aRoot;   
210a0 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f    /* Array of ro
210b0 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66  otpage numbers f
210c0 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20  or tables to be 
210d0 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74  checked */.  int
210e0 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   j;          /* 
210f0 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
21100 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
21110 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
21120 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a  rrors reported *
21130 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  /.  char *z;    
21140 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
21150 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20  he error report 
21160 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b  */.  Mem *pnErr;
21170 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
21180 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f   keeping track o
21190 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69  f errors remaini
211a0 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f 6f 74  ng */.  .  nRoot
211b0 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
211c0 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b  sert( nRoot>0 );
211d0 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74  .  aRoot = sqlit
211e0 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62  e3DbMallocRaw(db
211f0 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e  , sizeof(int)*(n
21200 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28  Root+1) );.  if(
21210 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f   aRoot==0 ) goto
21220 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72   no_mem;.  asser
21230 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
21240 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
21250 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 70   );.  pnErr = &p
21260 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
21270 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72  .  assert( (pnEr
21280 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  r->flags & MEM_I
21290 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  nt)!=0 );.  asse
212a0 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67  rt( (pnErr->flag
212b0 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
212c0 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20  _Blob))==0 );.  
212d0 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIn1 = &p->aMem[
212e0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28  pOp->p1];.  for(
212f0 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b  j=0; j<nRoot; j+
21300 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d  +){.    aRoot[j]
21310 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
21320 74 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29  tValue(&pIn1[j])
21330 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d  ;.  }.  aRoot[j]
21340 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
21350 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20  pOp->p5<db->nDb 
21360 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
21370 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
21380 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b  <pOp->p5))!=0 );
21390 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74  .  z = sqlite3Bt
213a0 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63  reeIntegrityChec
213b0 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  k(db->aDb[pOp->p
213c0 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e  5].pBt, aRoot, n
213d0 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20  Root,.          
213e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213f0 20 20 20 20 20 20 20 70 6e 45 72 72 2d 3e 75 2e         pnErr->u.
21400 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 70 6e 45  i, &nErr);.  pnE
21410 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b  rr->u.i -= nErr;
21420 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
21430 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a  mSetNull(pIn1);.
21440 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b    if( nErr==0 ){
21450 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d  .    assert( z==
21460 30 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  0 );.  }else{.  
21470 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
21480 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20  SetStr(pIn1, z, 
21490 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  -1, SQLITE_UTF8,
214a0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a   sqlite3_free);.
214b0 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58    }.  UPDATE_MAX
214c0 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
214d0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
214e0 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e  angeEncoding(pIn
214f0 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  1, encoding);.  
21500 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
21510 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 62 72 65 61  , aRoot);.  brea
21520 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
21530 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
21540 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f  RITY_CHECK */../
21550 2a 20 4f 70 63 6f 64 65 3a 20 46 69 66 6f 57 72  * Opcode: FifoWr
21560 69 74 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ite P1 * * * *.*
21570 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 69  *.** Write the i
21580 6e 74 65 67 65 72 20 66 72 6f 6d 20 72 65 67 69  nteger from regi
21590 73 74 65 72 20 50 31 20 69 6e 74 6f 20 74 68 65  ster P1 into the
215a0 20 46 69 66 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f   Fifo..*/.case O
215b0 50 5f 46 69 66 6f 57 72 69 74 65 3a 20 7b 20 20  P_FifoWrite: {  
215c0 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
215d0 20 20 70 2d 3e 73 46 69 66 6f 2e 64 62 20 3d 20    p->sFifo.db = 
215e0 64 62 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  db;.  if( sqlite
215f0 33 56 64 62 65 46 69 66 6f 50 75 73 68 28 26 70  3VdbeFifoPush(&p
21600 2d 3e 73 46 69 66 6f 2c 20 73 71 6c 69 74 65 33  ->sFifo, sqlite3
21610 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
21620 31 29 29 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45  1))==SQLITE_NOME
21630 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  M ){.    goto no
21640 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _mem;.  }.  brea
21650 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
21660 20 46 69 66 6f 52 65 61 64 20 50 31 20 50 32 20   FifoRead P1 P2 
21670 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 74 74 65  * * *.**.** Atte
21680 6d 70 74 20 74 6f 20 72 65 61 64 20 61 20 73 69  mpt to read a si
21690 6e 67 6c 65 20 69 6e 74 65 67 65 72 20 66 72 6f  ngle integer fro
216a0 6d 20 74 68 65 20 46 69 66 6f 2e 20 20 53 74 6f  m the Fifo.  Sto
216b0 72 65 20 74 68 61 74 0a 2a 2a 20 69 6e 74 65 67  re that.** integ
216c0 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
216d0 31 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 74 68 65  1..** .** If the
216e0 20 46 69 66 6f 20 69 73 20 65 6d 70 74 79 20 6a   Fifo is empty j
216f0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2f 0a 63 61  ump to P2..*/.ca
21700 73 65 20 4f 50 5f 46 69 66 6f 52 65 61 64 3a 20  se OP_FifoRead: 
21710 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  {         /* jum
21720 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46 4f 52  p */.  CHECK_FOR
21730 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 61 73  _INTERRUPT;.  as
21740 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
21750 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
21760 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  Mem );.  pOut = 
21770 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
21780 5d 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  ];.  MemSetTypeF
21790 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
217a0 74 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  t);.  if( sqlite
217b0 33 56 64 62 65 46 69 66 6f 50 6f 70 28 26 70 2d  3VdbeFifoPop(&p-
217c0 3e 73 46 69 66 6f 2c 20 26 70 4f 75 74 2d 3e 75  >sFifo, &pOut->u
217d0 2e 69 29 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45  .i)==SQLITE_DONE
217e0 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
217f0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
21800 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
21810 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
21820 49 47 47 45 52 0a 2f 2a 20 4f 70 63 6f 64 65 3a  IGGER./* Opcode:
21830 20 43 6f 6e 74 65 78 74 50 75 73 68 20 2a 20 2a   ContextPush * *
21840 20 2a 20 0a 2a 2a 0a 2a 2a 20 53 61 76 65 20 74   * .**.** Save t
21850 68 65 20 63 75 72 72 65 6e 74 20 56 64 62 65 20  he current Vdbe 
21860 63 6f 6e 74 65 78 74 20 73 75 63 68 20 74 68 61  context such tha
21870 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
21880 6f 72 65 64 20 62 79 20 61 20 43 6f 6e 74 65 78  ored by a Contex
21890 74 50 6f 70 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20  tPop.** opcode. 
218a0 54 68 65 20 63 6f 6e 74 65 78 74 20 73 74 6f 72  The context stor
218b0 65 73 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65  es the last inse
218c0 72 74 20 72 6f 77 20 69 64 2c 20 74 68 65 20 6c  rt row id, the l
218d0 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63 68  ast statement ch
218e0 61 6e 67 65 0a 2a 2a 20 63 6f 75 6e 74 2c 20 61  ange.** count, a
218f0 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  nd the current s
21900 74 61 74 65 6d 65 6e 74 20 63 68 61 6e 67 65 20  tatement change 
21910 63 6f 75 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  count..*/.case O
21920 50 5f 43 6f 6e 74 65 78 74 50 75 73 68 3a 20 7b  P_ContextPush: {
21930 0a 20 20 69 6e 74 20 69 20 3d 20 70 2d 3e 63 6f  .  int i = p->co
21940 6e 74 65 78 74 53 74 61 63 6b 54 6f 70 2b 2b 3b  ntextStackTop++;
21950 0a 20 20 43 6f 6e 74 65 78 74 20 2a 70 43 6f 6e  .  Context *pCon
21960 74 65 78 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  text;..  assert(
21970 20 69 3e 3d 30 20 29 3b 0a 20 20 2f 2a 20 46 49   i>=0 );.  /* FI
21980 58 20 4d 45 3a 20 54 68 69 73 20 73 68 6f 75 6c  X ME: This shoul
21990 64 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 20 61  d be allocated a
219a0 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 76 64  s part of the vd
219b0 62 65 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  be at compile-ti
219c0 6d 65 20 2a 2f 0a 20 20 69 66 28 20 69 3e 3d 70  me */.  if( i>=p
219d0 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 44 65  ->contextStackDe
219e0 70 74 68 20 29 7b 0a 20 20 20 20 70 2d 3e 63 6f  pth ){.    p->co
219f0 6e 74 65 78 74 53 74 61 63 6b 44 65 70 74 68 20  ntextStackDepth 
21a00 3d 20 69 2b 31 3b 0a 20 20 20 20 70 2d 3e 63 6f  = i+1;.    p->co
21a10 6e 74 65 78 74 53 74 61 63 6b 20 3d 20 73 71 6c  ntextStack = sql
21a20 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46  ite3DbReallocOrF
21a30 72 65 65 28 64 62 2c 20 70 2d 3e 63 6f 6e 74 65  ree(db, p->conte
21a40 78 74 53 74 61 63 6b 2c 0a 20 20 20 20 20 20 20  xtStack,.       
21a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a70 20 20 20 73 69 7a 65 6f 66 28 43 6f 6e 74 65 78     sizeof(Contex
21a80 74 29 2a 28 69 2b 31 29 29 3b 0a 20 20 20 20 69  t)*(i+1));.    i
21a90 66 28 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61  f( p->contextSta
21aa0 63 6b 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  ck==0 ) goto no_
21ab0 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 43 6f 6e 74  mem;.  }.  pCont
21ac0 65 78 74 20 3d 20 26 70 2d 3e 63 6f 6e 74 65 78  ext = &p->contex
21ad0 74 53 74 61 63 6b 5b 69 5d 3b 0a 20 20 70 43 6f  tStack[i];.  pCo
21ae0 6e 74 65 78 74 2d 3e 6c 61 73 74 52 6f 77 69 64  ntext->lastRowid
21af0 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   = db->lastRowid
21b00 3b 0a 20 20 70 43 6f 6e 74 65 78 74 2d 3e 6e 43  ;.  pContext->nC
21b10 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e  hange = p->nChan
21b20 67 65 3b 0a 20 20 70 43 6f 6e 74 65 78 74 2d 3e  ge;.  pContext->
21b30 73 46 69 66 6f 20 3d 20 70 2d 3e 73 46 69 66 6f  sFifo = p->sFifo
21b40 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 46  ;.  sqlite3VdbeF
21b50 69 66 6f 49 6e 69 74 28 26 70 2d 3e 73 46 69 66  ifoInit(&p->sFif
21b60 6f 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b  o, db);.  break;
21b70 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
21b80 6f 6e 74 65 78 74 50 6f 70 20 2a 20 2a 20 2a 20  ontextPop * * * 
21b90 0a 2a 2a 0a 2a 2a 20 52 65 73 74 6f 72 65 20 74  .**.** Restore t
21ba0 68 65 20 56 64 62 65 20 63 6f 6e 74 65 78 74 20  he Vdbe context 
21bb0 74 6f 20 74 68 65 20 73 74 61 74 65 20 69 74 20  to the state it 
21bc0 77 61 73 20 69 6e 20 77 68 65 6e 20 63 6f 6e 74  was in when cont
21bd0 65 78 74 50 75 73 68 20 77 61 73 20 6c 61 73 74  extPush was last
21be0 0a 2a 2a 20 65 78 65 63 75 74 65 64 2e 20 54 68  .** executed. Th
21bf0 65 20 63 6f 6e 74 65 78 74 20 73 74 6f 72 65 73  e context stores
21c00 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74   the last insert
21c10 20 72 6f 77 20 69 64 2c 20 74 68 65 20 6c 61 73   row id, the las
21c20 74 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 63  t statement.** c
21c30 68 61 6e 67 65 20 63 6f 75 6e 74 2c 20 61 6e 64  hange count, and
21c40 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61   the current sta
21c50 74 65 6d 65 6e 74 20 63 68 61 6e 67 65 20 63 6f  tement change co
21c60 75 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  unt..*/.case OP_
21c70 43 6f 6e 74 65 78 74 50 6f 70 3a 20 7b 0a 20 20  ContextPop: {.  
21c80 43 6f 6e 74 65 78 74 20 2a 70 43 6f 6e 74 65 78  Context *pContex
21c90 74 20 3d 20 26 70 2d 3e 63 6f 6e 74 65 78 74 53  t = &p->contextS
21ca0 74 61 63 6b 5b 2d 2d 70 2d 3e 63 6f 6e 74 65 78  tack[--p->contex
21cb0 74 53 74 61 63 6b 54 6f 70 5d 3b 0a 20 20 61 73  tStackTop];.  as
21cc0 73 65 72 74 28 20 70 2d 3e 63 6f 6e 74 65 78 74  sert( p->context
21cd0 53 74 61 63 6b 54 6f 70 3e 3d 30 20 29 3b 0a 20  StackTop>=0 );. 
21ce0 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
21cf0 20 70 43 6f 6e 74 65 78 74 2d 3e 6c 61 73 74 52   pContext->lastR
21d00 6f 77 69 64 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e  owid;.  p->nChan
21d10 67 65 20 3d 20 70 43 6f 6e 74 65 78 74 2d 3e 6e  ge = pContext->n
21d20 43 68 61 6e 67 65 3b 0a 20 20 73 71 6c 69 74 65  Change;.  sqlite
21d30 33 56 64 62 65 46 69 66 6f 43 6c 65 61 72 28 26  3VdbeFifoClear(&
21d40 70 2d 3e 73 46 69 66 6f 29 3b 0a 20 20 70 2d 3e  p->sFifo);.  p->
21d50 73 46 69 66 6f 20 3d 20 70 43 6f 6e 74 65 78 74  sFifo = pContext
21d60 2d 3e 73 46 69 66 6f 3b 0a 20 20 62 72 65 61 6b  ->sFifo;.  break
21d70 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69  ;.}.#endif /* #i
21d80 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21d90 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69  T_TRIGGER */..#i
21da0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21db0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
21dc0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61  /* Opcode: MemMa
21dd0 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
21de0 0a 2a 2a 20 53 65 74 20 74 68 65 20 76 61 6c 75  .** Set the valu
21df0 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
21e00 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   to the maximum 
21e10 6f 66 20 69 74 73 20 63 75 72 72 65 6e 74 20 76  of its current v
21e20 61 6c 75 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20  alue.** and the 
21e30 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
21e40 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
21e50 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72   instruction thr
21e60 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20  ows an error if 
21e70 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
21e80 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79  is not initially
21e90 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  .** an integer..
21ea0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61  */.case OP_MemMa
21eb0 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  x: {        /* i
21ec0 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 73 71 6c  n1, in2 */.  sql
21ed0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
21ee0 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 73  erify(pIn1);.  s
21ef0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
21f00 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
21f10 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70   if( pIn1->u.i<p
21f20 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70  In2->u.i){.    p
21f30 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d  In1->u.i = pIn2-
21f40 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61  >u.i;.  }.  brea
21f50 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
21f60 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
21f70 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20  NCREMENT */../* 
21f80 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31  Opcode: IfPos P1
21f90 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
21fa0 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  If the value of 
21fb0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 31  register P1 is 1
21fc0 20 6f 72 20 67 72 65 61 74 65 72 2c 20 6a 75 6d   or greater, jum
21fd0 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  p to P2..**.** I
21fe0 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20  t is illegal to 
21ff0 75 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63  use this instruc
22000 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74  tion on a regist
22010 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20  er that does.** 
22020 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  not contain an i
22030 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65  nteger.  An asse
22040 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c  rtion fault will
22050 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74   result if you t
22060 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ry..*/.case OP_I
22070 66 50 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f  fPos: {        /
22080 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
22090 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
220a0 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
220b0 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e    if( pIn1->u.i>
220c0 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70  0 ){.     pc = p
220d0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
220e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
220f0 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31 20  pcode: IfNeg P1 
22100 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49  P2 * * *.**.** I
22110 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  f the value of r
22120 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65  egister P1 is le
22130 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75  ss than zero, ju
22140 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a  mp to P2. .**.**
22150 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74   It is illegal t
22160 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72  o use this instr
22170 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69  uction on a regi
22180 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a  ster that does.*
22190 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  * not contain an
221a0 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73   integer.  An as
221b0 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69  sertion fault wi
221c0 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75  ll result if you
221d0 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   try..*/.case OP
221e0 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20  _IfNeg: {       
221f0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
22200 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
22210 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
22220 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
22230 69 3c 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d  i<0 ){.     pc =
22240 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
22250 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
22260 20 4f 70 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20   Opcode: IfZero 
22270 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
22280 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f  * If the value o
22290 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
222a0 20 65 78 61 63 74 6c 79 20 30 2c 20 6a 75 6d 70   exactly 0, jump
222b0 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49   to P2. .**.** I
222c0 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20  t is illegal to 
222d0 75 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63  use this instruc
222e0 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74  tion on a regist
222f0 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20  er that does.** 
22300 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  not contain an i
22310 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65  nteger.  An asse
22320 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c  rtion fault will
22330 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74   result if you t
22340 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ry..*/.case OP_I
22350 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20  fZero: {        
22360 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
22370 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
22380 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
22390 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
223a0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d  ==0 ){.     pc =
223b0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
223c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
223d0 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70   Opcode: AggStep
223e0 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a   * P2 P3 P4 P5.*
223f0 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
22400 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66   step function f
22410 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
22420 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f    The.** functio
22430 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e  n has P5 argumen
22440 74 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f  ts.   P4 is a po
22450 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e  inter to the Fun
22460 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72  cDef.** structur
22470 65 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73  e that specifies
22480 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20   the function.  
22490 55 73 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  Use register.** 
224a0 50 33 20 61 73 20 74 68 65 20 61 63 63 75 6d 75  P3 as the accumu
224b0 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  lator..**.** The
224c0 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72   P5 arguments ar
224d0 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  e taken from reg
224e0 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73  ister P2 and its
224f0 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a  .** successors..
22500 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74  */.case OP_AggSt
22510 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  ep: {.  int n = 
22520 70 4f 70 2d 3e 70 35 3b 0a 20 20 69 6e 74 20 69  pOp->p5;.  int i
22530 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 2c 20 2a  ;.  Mem *pMem, *
22540 70 52 65 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pRec;.  sqlite3_
22550 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73  context ctx;.  s
22560 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
22570 70 56 61 6c 3b 0a 0a 20 20 61 73 73 65 72 74 28  pVal;..  assert(
22580 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63 20   n>=0 );.  pRec 
22590 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
225a0 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70  p2];.  apVal = p
225b0 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72  ->apArg;.  asser
225c0 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30  t( apVal || n==0
225d0 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   );.  for(i=0; i
225e0 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29  <n; i++, pRec++)
225f0 7b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d  {.    apVal[i] =
22600 20 70 52 65 63 3b 0a 20 20 20 20 73 74 6f 72 65   pRec;.    store
22610 54 79 70 65 49 6e 66 6f 28 70 52 65 63 2c 20 65  TypeInfo(pRec, e
22620 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 7d 0a 20 20  ncoding);.  }.  
22630 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d  ctx.pFunc = pOp-
22640 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73  >p4.pFunc;.  ass
22650 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
22660 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
22670 65 6d 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d  em );.  ctx.pMem
22680 20 3d 20 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d   = pMem = &p->aM
22690 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70  em[pOp->p3];.  p
226a0 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e  Mem->n++;.  ctx.
226b0 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  s.flags = MEM_Nu
226c0 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a 20 3d 20  ll;.  ctx.s.z = 
226d0 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c  0;.  ctx.s.zMall
226e0 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e  oc = 0;.  ctx.s.
226f0 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e  xDel = 0;.  ctx.
22700 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78  s.db = db;.  ctx
22710 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20  .isError = 0;.  
22720 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20  ctx.pColl = 0;. 
22730 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e   if( ctx.pFunc->
22740 6e 65 65 64 43 6f 6c 6c 53 65 71 20 29 7b 0a 20  needCollSeq ){. 
22750 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 70     assert( pOp>p
22760 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73  ->aOp );.    ass
22770 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74  ert( pOp[-1].p4t
22780 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
22790 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
227a0 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
227b0 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20  P_CollSeq );.   
227c0 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70   ctx.pColl = pOp
227d0 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20  [-1].p4.pColl;. 
227e0 20 7d 0a 20 20 28 63 74 78 2e 70 46 75 6e 63 2d   }.  (ctx.pFunc-
227f0 3e 78 53 74 65 70 29 28 26 63 74 78 2c 20 6e 2c  >xStep)(&ctx, n,
22800 20 61 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 63   apVal);.  if( c
22810 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  tx.isError ){.  
22820 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
22830 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
22840 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
22850 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74  3_value_text(&ct
22860 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20  x.s));.    rc = 
22870 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d  ctx.isError;.  }
22880 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
22890 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29  mRelease(&ctx.s)
228a0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
228b0 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61   Opcode: AggFina
228c0 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  l P1 P2 * P4 *.*
228d0 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
228e0 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74   finalizer funct
228f0 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
22900 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20  gate.  P1 is.** 
22910 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
22920 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20  ion that is the 
22930 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20  accumulator for 
22940 74 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a  the aggregate..*
22950 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
22960 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
22970 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65 70  ts that the step
22980 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20   function takes 
22990 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  and.** P4 is a p
229a0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75  ointer to the Fu
229b0 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20 66  ncDef for this f
229c0 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32  unction.  The P2
229d0 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20  .** argument is 
229e0 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69 73  not used by this
229f0 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20   opcode.  It is 
22a00 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69  only there to di
22a10 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75  sambiguate.** fu
22a20 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e  nctions that can
22a30 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75   take varying nu
22a40 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e  mbers of argumen
22a50 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61  ts.  The.** P4 a
22a60 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20  rgument is only 
22a70 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20 64  needed for the d
22a80 65 67 65 6e 65 72 61 74 65 20 63 61 73 65 20 77  egenerate case w
22a90 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70  here.** the step
22aa0 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f   function was no
22ab0 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c  t previously cal
22ac0 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  led..*/.case OP_
22ad0 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65  AggFinal: {.  Me
22ae0 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72  m *pMem;.  asser
22af0 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
22b00 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p1<=p->nMem
22b10 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 70 2d   );.  pMem = &p-
22b20 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
22b30 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
22b40 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e  >flags & ~(MEM_N
22b50 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30  ull|MEM_Agg))==0
22b60 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
22b70 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a  e3VdbeMemFinaliz
22b80 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e  e(pMem, pOp->p4.
22b90 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63  pFunc);.  if( rc
22ba0 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29  ==SQLITE_ERROR )
22bb0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
22bc0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
22bd0 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
22be0 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
22bf0 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73  (pMem));.  }.  s
22c00 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
22c10 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65  Encoding(pMem, e
22c20 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41  ncoding);.  UPDA
22c30 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
22c40 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c  pMem);.  if( sql
22c50 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
22c60 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67  g(pMem) ){.    g
22c70 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
22c80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
22c90 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
22ca0 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26  E_OMIT_VACUUM) &
22cb0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
22cc0 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f  E_OMIT_ATTACH)./
22cd0 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d  * Opcode: Vacuum
22ce0 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
22cf0 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69   Vacuum the enti
22d00 72 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  re database.  Th
22d10 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63  is opcode will c
22d20 61 75 73 65 20 6f 74 68 65 72 20 76 69 72 74 75  ause other virtu
22d30 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74  al.** machines t
22d40 6f 20 62 65 20 63 72 65 61 74 65 64 20 61 6e 64  o be created and
22d50 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f   run.  It may no
22d60 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d  t be called from
22d70 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61   within.** a tra
22d80 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  nsaction..*/.cas
22d90 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20  e OP_Vacuum: {. 
22da0 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
22db0 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
22dc0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
22dd0 73 75 73 65 3b 20 0a 20 20 72 63 20 3d 20 73 71  suse; .  rc = sq
22de0 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26  lite3RunVacuum(&
22df0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b  p->zErrMsg, db);
22e00 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
22e10 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
22e20 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
22e30 69 73 75 73 65 3b 0a 20 20 62 72 65 61 6b 3b 0a  isuse;.  break;.
22e40 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64  }.#endif..#if !d
22e50 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
22e60 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f  IT_AUTOVACUUM)./
22e70 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61  * Opcode: IncrVa
22e80 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  cuum P1 P2 * * *
22e90 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61  .**.** Perform a
22ea0 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20   single step of 
22eb0 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  the incremental 
22ec0 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65  vacuum procedure
22ed0 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61   on.** the P1 da
22ee0 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 76  tabase. If the v
22ef0 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68  acuum has finish
22f00 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  ed, jump to inst
22f10 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f  ruction.** P2. O
22f20 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74  therwise, fall t
22f30 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
22f40 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
22f50 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56  */.case OP_IncrV
22f60 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20  acuum: {        
22f70 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72  /* jump */.  Btr
22f80 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65  ee *pBt;..  asse
22f90 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
22fa0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
22fb0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
22fc0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
22fd0 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  1<<pOp->p1))!=0 
22fe0 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
22ff0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
23000 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
23010 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70  treeIncrVacuum(p
23020 42 74 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  Bt);.  if( rc==S
23030 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20  QLITE_DONE ){.  
23040 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
23050 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   1;.    rc = SQL
23060 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72  ITE_OK;.  }.  br
23070 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
23080 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65  * Opcode: Expire
23090 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
230a0 2a 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69  * Cause precompi
230b0 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74  led statements t
230c0 6f 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64  o become expired
230d0 2e 20 41 6e 20 65 78 70 69 72 65 64 20 73 74 61  . An expired sta
230e0 74 65 6d 65 6e 74 0a 2a 2a 20 66 61 69 6c 73 20  tement.** fails 
230f0 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 63 6f  with an error co
23100 64 65 20 6f 66 20 53 51 4c 49 54 45 5f 53 43 48  de of SQLITE_SCH
23110 45 4d 41 20 69 66 20 69 74 20 69 73 20 65 76 65  EMA if it is eve
23120 72 20 65 78 65 63 75 74 65 64 20 0a 2a 2a 20 28  r executed .** (
23130 76 69 61 20 73 71 6c 69 74 65 33 5f 73 74 65 70  via sqlite3_step
23140 28 29 29 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50  ())..** .** If P
23150 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c  1 is 0, then all
23160 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
23170 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20  become expired. 
23180 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
23190 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20  o,.** then only 
231a0 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78  the currently ex
231b0 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e  ecuting statemen
231c0 74 20 69 73 20 61 66 66 65 63 74 65 64 2e 20 0a  t is affected. .
231d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72  */.case OP_Expir
231e0 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d  e: {.  if( !pOp-
231f0 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >p1 ){.    sqlit
23200 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
23210 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
23220 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e    }else{.    p->
23230 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d  expired = 1;.  }
23240 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
23250 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
23260 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a  _SHARED_CACHE./*
23270 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f   Opcode: TableLo
23280 63 6b 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ck P1 P2 P3 P4 *
23290 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20  .**.** Obtain a 
232a0 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63  lock on a partic
232b0 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73  ular table. This
232c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
232d0 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a  only used when.*
232e0 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63  * the shared-cac
232f0 68 65 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  he feature is en
23300 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  abled. .**.** If
23310 20 50 31 20 69 73 20 20 74 68 65 20 69 6e 64 65   P1 is  the inde
23320 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
23330 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  e in sqlite3.aDb
23340 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  [] of the databa
23350 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74  se.** on which t
23360 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69  he lock is acqui
23370 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b  red.  A readlock
23380 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20   is obtained if 
23390 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72  P3==0 or.** a wr
233a0 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d  ite lock if P3==
233b0 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74  1..**.** P2 cont
233c0 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61  ains the root-pa
233d0 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ge of the table 
233e0 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50  to lock..**.** P
233f0 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69  4 contains a poi
23400 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65  nter to the name
23410 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65   of the table be
23420 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73  ing locked. This
23430 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64   is only.** used
23440 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20   to generate an 
23450 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66  error message if
23460 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74   the lock cannot
23470 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f   be obtained..*/
23480 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f  .case OP_TableLo
23490 63 6b 3a 20 7b 0a 20 20 69 6e 74 20 70 31 20 3d  ck: {.  int p1 =
234a0 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 75 38 20   pOp->p1; .  u8 
234b0 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 70 4f  isWriteLock = pO
234c0 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
234d0 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d   p1>=0 && p1<db-
234e0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
234f0 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
23500 26 20 28 31 3c 3c 70 31 29 29 21 3d 30 20 29 3b  & (1<<p1))!=0 );
23510 0a 20 20 61 73 73 65 72 74 28 20 69 73 57 72 69  .  assert( isWri
23520 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57  teLock==0 || isW
23530 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20  riteLock==1 );. 
23540 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
23550 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e  eeLockTable(db->
23560 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70  aDb[p1].pBt, pOp
23570 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63  ->p2, isWriteLoc
23580 6b 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  k);.  if( rc==SQ
23590 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20  LITE_LOCKED ){. 
235a0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
235b0 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
235c0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
235d0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
235e0 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 74 61  db, "database ta
235f0 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25  ble is locked: %
23600 73 22 2c 20 7a 29 3b 0a 20 20 7d 0a 20 20 62 72  s", z);.  }.  br
23610 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
23620 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
23630 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69  RED_CACHE */..#i
23640 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
23650 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
23660 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e  * Opcode: VBegin
23670 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
23680 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f  * P4 may be a po
23690 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69  inter to an sqli
236a0 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
236b0 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20  re. If so, call 
236c0 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d  the .** xBegin m
236d0 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74  ethod for that t
236e0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f  able..**.** Also
236f0 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  , whether or not
23700 20 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63   P4 is set, chec
23710 6b 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e  k that this is n
23720 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20  ot being called 
23730 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61  from.** within a
23740 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76   callback to a v
23750 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79  irtual table xSy
23760 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20  nc() method. If 
23770 69 74 20 69 73 2c 20 73 65 74 20 74 68 65 0a 2a  it is, set the.*
23780 2a 20 65 72 72 6f 72 20 63 6f 64 65 20 74 6f 20  * error code to 
23790 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a  SQLITE_LOCKED..*
237a0 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e  /.case OP_VBegin
237b0 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
237c0 61 62 20 2a 70 56 74 61 62 20 3d 20 70 4f 70 2d  ab *pVtab = pOp-
237d0 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20  >p4.pVtab;.  rc 
237e0 3d 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  = sqlite3VtabBeg
237f0 69 6e 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20  in(db, pVtab);. 
23800 20 69 66 28 20 70 56 74 61 62 20 29 7b 0a 20 20   if( pVtab ){.  
23810 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
23820 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
23830 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  .    p->zErrMsg 
23840 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  = pVtab->zErrMsg
23850 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a 45 72  ;.    pVtab->zEr
23860 72 4d 73 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  rMsg = 0;.  }.  
23870 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
23880 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
23890 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
238a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
238b0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
238c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65  ./* Opcode: VCre
238d0 61 74 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ate P1 * * P4 *.
238e0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20  **.** P4 is the 
238f0 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
23900 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
23910 61 73 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65  ase P1. Call the
23920 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a   xCreate method.
23930 2a 2a 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c  ** for that tabl
23940 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  e..*/.case OP_VC
23950 72 65 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20  reate: {.  rc = 
23960 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
23970 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70  reate(db, pOp->p
23980 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70  1, pOp->p4.z, &p
23990 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72  ->zErrMsg);.  br
239a0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
239b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
239c0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
239d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
239e0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
239f0 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72  * Opcode: VDestr
23a00 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  oy P1 * * P4 *.*
23a10 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e  *.** P4 is the n
23a20 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
23a30 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
23a40 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65  se P1.  Call the
23a50 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64   xDestroy method
23a60 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
23a70 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44  e..*/.case OP_VD
23a80 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69  estroy: {.  p->i
23a90 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b  nVtabMethod = 2;
23aa0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
23ab0 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64  tabCallDestroy(d
23ac0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
23ad0 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56  >p4.z);.  p->inV
23ae0 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20  tabMethod = 0;. 
23af0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
23b00 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
23b10 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
23b20 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
23b30 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
23b40 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70  E./* Opcode: VOp
23b50 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  en P1 * * P4 *.*
23b60 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
23b70 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
23b80 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
23b90 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
23ba0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31  structure..** P1
23bb0 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d   is a cursor num
23bc0 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ber.  This opcod
23bd0 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72  e opens a cursor
23be0 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a   to the virtual.
23bf0 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f  ** table and sto
23c00 72 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20  res that cursor 
23c10 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P1..*/.case O
23c20 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 43 75 72  P_VOpen: {.  Cur
23c30 73 6f 72 20 2a 70 43 75 72 20 3d 20 30 3b 0a 20  sor *pCur = 0;. 
23c40 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
23c50 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f  rsor *pVtabCurso
23c60 72 20 3d 20 30 3b 0a 0a 20 20 73 71 6c 69 74 65  r = 0;..  sqlite
23c70 33 5f 76 74 61 62 20 2a 70 56 74 61 62 20 3d 20  3_vtab *pVtab = 
23c80 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20  pOp->p4.pVtab;. 
23c90 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
23ca0 2a 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69  *pModule = (sqli
23cb0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74  te3_module *)pVt
23cc0 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  ab->pModule;..  
23cd0 61 73 73 65 72 74 28 70 56 74 61 62 20 26 26 20  assert(pVtab && 
23ce0 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 69 66 28 20  pModule);.  if( 
23cf0 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
23d00 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
23d10 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
23d20 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
23d30 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70  >xOpen(pVtab, &p
23d40 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73  VtabCursor);.  s
23d50 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
23d60 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
23d70 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74  p->zErrMsg = pVt
23d80 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70  ab->zErrMsg;.  p
23d90 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  Vtab->zErrMsg = 
23da0 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  0;.  if( sqlite3
23db0 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67  SafetyOn(db) ) g
23dc0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
23dd0 5f 6d 69 73 75 73 65 3b 0a 20 20 69 66 28 20 53  _misuse;.  if( S
23de0 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a  QLITE_OK==rc ){.
23df0 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a      /* Initializ
23e00 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
23e10 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73  ursor base class
23e20 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72   */.    pVtabCur
23e30 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74  sor->pVtab = pVt
23e40 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74  ab;..    /* Init
23e50 69 61 6c 69 73 65 20 76 64 62 65 20 63 75 72 73  ialise vdbe curs
23e60 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20  or object */.   
23e70 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
23e80 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
23e90 31 2c 20 26 70 4f 70 5b 2d 31 5d 2c 20 2d 31 2c  1, &pOp[-1], -1,
23ea0 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70 43 75   0);.    if( pCu
23eb0 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75 72 2d  r ){.      pCur-
23ec0 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70  >pVtabCursor = p
23ed0 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 20 20  VtabCursor;.    
23ee0 20 20 70 43 75 72 2d 3e 70 4d 6f 64 75 6c 65 20    pCur->pModule 
23ef0 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  = pVtabCursor->p
23f00 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
23f10 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
23f20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
23f30 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64   = 1;.      pMod
23f40 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61  ule->xClose(pVta
23f50 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  bCursor);.    }.
23f60 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
23f70 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
23f80 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
23f90 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
23fa0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
23fb0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
23fc0 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50 32 20  : VFilter P1 P2 
23fd0 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 31  P3 P4 *.**.** P1
23fe0 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65   is a cursor ope
23ff0 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e  ned using VOpen.
24000 20 20 50 32 20 69 73 20 61 6e 20 61 64 64 72 65    P2 is an addre
24010 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66  ss to jump to if
24020 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64  .** the filtered
24030 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
24040 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  mpty..**.** P4 i
24050 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72  s either NULL or
24060 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 77   a string that w
24070 61 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  as generated by 
24080 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a  the xBestIndex.*
24090 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  * method of the 
240a0 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74  module.  The int
240b0 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
240c0 68 65 20 50 34 20 73 74 72 69 6e 67 20 69 73 20  he P4 string is 
240d0 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d  left.** to the m
240e0 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
240f0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  tion..**.** This
24100 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
24110 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
24120 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  od on the virtua
24130 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66 69 65  l table specifie
24140 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65  d.** by P1.  The
24150 20 69 6e 74 65 67 65 72 20 71 75 65 72 79 20 70   integer query p
24160 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f  lan parameter to
24170 20 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72   xFilter is stor
24180 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a  ed in register.*
24190 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72 20 50  * P3. Register P
241a0 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20 61  3+1 stores the a
241b0 72 67 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f  rgc parameter to
241c0 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 74 68   be passed to th
241d0 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74  e.** xFilter met
241e0 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20 50  hod. Registers P
241f0 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61  3+2..P3+1+argc a
24200 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61  re the argc.** a
24210 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65  dditional parame
24220 74 65 72 73 20 77 68 69 63 68 20 61 72 65 20 70  ters which are p
24230 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c  assed to.** xFil
24240 74 65 72 20 61 73 20 61 72 67 76 2e 20 52 65 67  ter as argv. Reg
24250 69 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d  ister P3+2 becom
24260 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20  es argv[0] when 
24270 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65  passed to xFilte
24280 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20  r..**.** A jump 
24290 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66  is made to P2 if
242a0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
242b0 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20  after filtering 
242c0 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a  would be empty..
242d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74  */.case OP_VFilt
242e0 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20  er: {   /* jump 
242f0 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20  */.  int nArg;. 
24300 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63   int iQuery;.  c
24310 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
24320 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
24330 4d 65 6d 20 2a 70 51 75 65 72 79 20 3d 20 26 70  Mem *pQuery = &p
24340 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
24350 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 20 3d 20  .  Mem *pArgc = 
24360 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 73 71  &pQuery[1];.  sq
24370 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
24380 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a  r *pVtabCursor;.
24390 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
243a0 70 56 74 61 62 3b 0a 0a 20 20 43 75 72 73 6f 72  pVtab;..  Cursor
243b0 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73   *pCur = p->apCs
243c0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 0a 20 20 52  r[pOp->p1];..  R
243d0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
243e0 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a  p->p3, pQuery);.
243f0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
24400 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
24410 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70   pVtabCursor = p
24420 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
24430 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74 61  ;.  pVtab = pVta
24440 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
24450 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
24460 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f  b->pModule;..  /
24470 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78  * Grab the index
24480 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63   number and argc
24490 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
244a0 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79   assert( (pQuery
244b0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29  ->flags&MEM_Int)
244c0 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c  !=0 && pArgc->fl
244d0 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
244e0 20 20 6e 41 72 67 20 3d 20 70 41 72 67 63 2d 3e    nArg = pArgc->
244f0 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20  u.i;.  iQuery = 
24500 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20  pQuery->u.i;..  
24510 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46  /* Invoke the xF
24520 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a  ilter method */.
24530 20 20 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 20    {.    int res 
24540 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  = 0;.    int i;.
24550 20 20 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 20      Mem **apArg 
24560 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20  = p->apArg;.    
24570 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72  for(i = 0; i<nAr
24580 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61  g; i++){.      a
24590 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63  pArg[i] = &pArgc
245a0 5b 69 2b 31 5d 3b 0a 20 20 20 20 20 20 73 74 6f  [i+1];.      sto
245b0 72 65 54 79 70 65 49 6e 66 6f 28 61 70 41 72 67  reTypeInfo(apArg
245c0 5b 69 5d 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 0a  [i], 0);.    }..
245d0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
245e0 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67  afetyOff(db) ) g
245f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
24600 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 70 2d 3e  _misuse;.    p->
24610 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31  inVtabMethod = 1
24620 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75  ;.    rc = pModu
24630 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 74 61  le->xFilter(pVta
24640 62 43 75 72 73 6f 72 2c 20 69 51 75 65 72 79 2c  bCursor, iQuery,
24650 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67   pOp->p4.z, nArg
24660 2c 20 61 70 41 72 67 29 3b 0a 20 20 20 20 70 2d  , apArg);.    p-
24670 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
24680 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62  0;.    sqlite3Db
24690 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72  Free(db, p->zErr
246a0 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72  Msg);.    p->zEr
246b0 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45  rMsg = pVtab->zE
246c0 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62  rrMsg;.    pVtab
246d0 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20  ->zErrMsg = 0;. 
246e0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
246f0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65  E_OK ){.      re
24700 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  s = pModule->xEo
24710 66 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  f(pVtabCursor);.
24720 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71      }.    if( sq
24730 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62  lite3SafetyOn(db
24740 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
24750 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20  ue_to_misuse;.. 
24760 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20     if( res ){.  
24770 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
24780 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   - 1;.    }.  }.
24790 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20    pCur->nullRow 
247a0 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  = 0;..  break;.}
247b0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
247c0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
247d0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
247e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
247f0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
24800 64 65 3a 20 56 52 6f 77 69 64 20 50 31 20 50 32  de: VRowid P1 P2
24810 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f   * * *.**.** Sto
24820 72 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  re into register
24830 20 50 32 20 20 74 68 65 20 72 6f 77 69 64 20 6f   P2  the rowid o
24840 66 0a 2a 2a 20 74 68 65 20 76 69 72 74 75 61 6c  f.** the virtual
24850 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20  -table that the 
24860 50 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69  P1 cursor is poi
24870 6e 74 69 6e 67 20 74 6f 2e 0a 2a 2f 0a 63 61 73  nting to..*/.cas
24880 65 20 4f 50 5f 56 52 6f 77 69 64 3a 20 7b 20 20  e OP_VRowid: {  
24890 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
248a0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
248b0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
248c0 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
248d0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
248e0 70 4d 6f 64 75 6c 65 3b 0a 20 20 73 71 6c 69 74  pModule;.  sqlit
248f0 65 5f 69 6e 74 36 34 20 69 52 6f 77 3b 0a 20 20  e_int64 iRow;.  
24900 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70  Cursor *pCur = p
24910 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
24920 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  ;..  assert( pCu
24930 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  r->pVtabCursor )
24940 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75  ;.  if( pCur->nu
24950 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65  llRow ){.    bre
24960 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20  ak;.  }.  pVtab 
24970 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
24980 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
24990 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
249a0 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
249b0 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  ( pModule->xRowi
249c0 64 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  d );.  if( sqlit
249d0 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
249e0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
249f0 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 72 63  _to_misuse;.  rc
24a00 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77   = pModule->xRow
24a10 69 64 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  id(pCur->pVtabCu
24a20 72 73 6f 72 2c 20 26 69 52 6f 77 29 3b 0a 20 20  rsor, &iRow);.  
24a30 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
24a40 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
24a50 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56   p->zErrMsg = pV
24a60 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20  tab->zErrMsg;.  
24a70 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d  pVtab->zErrMsg =
24a80 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65   0;.  if( sqlite
24a90 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20  3SafetyOn(db) ) 
24aa0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
24ab0 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 4d 65 6d 53  o_misuse;.  MemS
24ac0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
24ad0 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 70 4f 75   MEM_Int);.  pOu
24ae0 74 2d 3e 75 2e 69 20 3d 20 69 52 6f 77 3b 0a 20  t->u.i = iRow;. 
24af0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
24b00 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
24b10 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
24b20 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
24b30 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
24b40 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f  E./* Opcode: VCo
24b50 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20  lumn P1 P2 P3 * 
24b60 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  *.**.** Store th
24b70 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
24b80 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a  2-th column of.*
24b90 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65  * the row of the
24ba0 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74   virtual-table t
24bb0 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63  hat the .** P1 c
24bc0 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e  ursor is pointin
24bd0 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74  g to into regist
24be0 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
24bf0 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73  P_VColumn: {.  s
24c00 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
24c10 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
24c20 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
24c30 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73  ule;.  Mem *pDes
24c40 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  t;.  sqlite3_con
24c50 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a  text sContext;..
24c60 20 20 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d    Cursor *pCur =
24c70 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
24c80 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
24c90 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
24ca0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
24cb0 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
24cc0 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
24cd0 70 44 65 73 74 20 3d 20 26 70 2d 3e 61 4d 65 6d  pDest = &p->aMem
24ce0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
24cf0 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29   pCur->nullRow )
24d00 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
24d10 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73  eMemSetNull(pDes
24d20 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
24d30 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75   }.  pVtab = pCu
24d40 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e  r->pVtabCursor->
24d50 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
24d60 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
24d70 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f  e;.  assert( pMo
24d80 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b  dule->xColumn );
24d90 0a 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74  .  memset(&sCont
24da0 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  ext, 0, sizeof(s
24db0 43 6f 6e 74 65 78 74 29 29 3b 0a 0a 20 20 2f 2a  Context));..  /*
24dc0 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c   The output cell
24dd0 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61 76   may already hav
24de0 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63  e a buffer alloc
24df0 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20  ated. Move.  ** 
24e00 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6e 74  the current cont
24e10 65 6e 74 73 20 74 6f 20 73 43 6f 6e 74 65 78 74  ents to sContext
24e20 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74 68  .s so in case th
24e30 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20  e user-function 
24e40 0a 20 20 2a 2a 20 63 61 6e 20 75 73 65 20 74 68  .  ** can use th
24e50 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61  e already alloca
24e60 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74 65  ted buffer inste
24e70 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67  ad of allocating
24e80 20 61 20 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e 65   a .  ** new one
24e90 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
24ea0 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 43 6f  VdbeMemMove(&sCo
24eb0 6e 74 65 78 74 2e 73 2c 20 70 44 65 73 74 29 3b  ntext.s, pDest);
24ec0 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
24ed0 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 4d  g(&sContext.s, M
24ee0 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 69 66 28  EM_Null);..  if(
24ef0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
24f00 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
24f10 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
24f20 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
24f30 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e  ->xColumn(pCur->
24f40 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43  pVtabCursor, &sC
24f50 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29  ontext, pOp->p2)
24f60 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
24f70 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
24f80 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  );.  p->zErrMsg 
24f90 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  = pVtab->zErrMsg
24fa0 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  ;.  pVtab->zErrM
24fb0 73 67 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 43 6f  sg = 0;..  /* Co
24fc0 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  py the result of
24fd0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f   the function to
24fe0 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72   the P3 register
24ff0 2e 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69  . We.  ** do thi
25000 73 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  s regardless of 
25010 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
25020 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 65 64 20  n error occured 
25030 74 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a 20 20  to ensure any.  
25040 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63  ** dynamic alloc
25050 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78  ation in sContex
25060 74 2e 73 20 28 61 20 4d 65 6d 20 73 74 72 75 63  t.s (a Mem struc
25070 74 29 20 69 73 20 20 72 65 6c 65 61 73 65 64 2e  t) is  released.
25080 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  .  */.  sqlite3V
25090 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
250a0 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65  g(&sContext.s, e
250b0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49  ncoding);.  REGI
250c0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
250d0 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 73 71  p3, pDest);.  sq
250e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
250f0 28 70 44 65 73 74 2c 20 26 73 43 6f 6e 74 65 78  (pDest, &sContex
25100 74 2e 73 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  t.s);.  UPDATE_M
25110 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
25120 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  t);..  if( sqlit
25130 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
25140 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  {.    goto abort
25150 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
25160 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
25170 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
25180 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74  Dest) ){.    got
25190 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
251a0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
251b0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
251c0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
251d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
251e0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
251f0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65  E./* Opcode: VNe
25200 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  xt P1 P2 * * *.*
25210 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72  *.** Advance vir
25220 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f  tual table P1 to
25230 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e   the next row in
25240 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20   its result set 
25250 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69  and.** jump to i
25260 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20  nstruction P2.  
25270 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74 75  Or, if the virtu
25280 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65 61  al table has rea
25290 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20  ched.** the end 
252a0 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73 65  of its result se
252b0 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  t, then fall thr
252c0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
252d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
252e0 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20  .case OP_VNext: 
252f0 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
25300 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
25310 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
25320 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
25330 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73  odule;.  int res
25340 20 3d 20 30 3b 0a 0a 20 20 43 75 72 73 6f 72 20   = 0;..  Cursor 
25350 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72  *pCur = p->apCsr
25360 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
25370 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62  ert( pCur->pVtab
25380 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20  Cursor );.  if( 
25390 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  pCur->nullRow ){
253a0 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
253b0 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e    pVtab = pCur->
253c0 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
253d0 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
253e0 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
253f0 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
25400 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f  e->xNext );..  /
25410 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65  * Invoke the xNe
25420 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74  xt() method of t
25430 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65  he module. There
25440 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74   is no way for t
25450 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69  he.  ** underlyi
25460 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ng implementatio
25470 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65  n to return an e
25480 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75  rror if one occu
25490 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78  rs during.  ** x
254a0 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c  Next(). Instead,
254b0 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63   if an error occ
254c0 75 72 73 2c 20 74 72 75 65 20 69 73 20 72 65 74  urs, true is ret
254d0 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e  urned (indicatin
254e0 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74  g that .  ** dat
254f0 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20  a is available) 
25500 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f  and the error co
25510 64 65 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e  de returned when
25520 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a   xColumn or.  **
25530 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68   some other meth
25540 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b  od is next invok
25550 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76  ed on the save v
25560 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72  irtual table cur
25570 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  sor..  */.  if( 
25580 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
25590 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
255a0 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
255b0 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
255c0 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70  od = 1;.  rc = p
255d0 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43  Module->xNext(pC
255e0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29  ur->pVtabCursor)
255f0 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  ;.  p->inVtabMet
25600 68 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  hod = 0;.  sqlit
25610 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
25620 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a  zErrMsg);.  p->z
25630 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e  ErrMsg = pVtab->
25640 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62  zErrMsg;.  pVtab
25650 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20  ->zErrMsg = 0;. 
25660 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
25670 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20  OK ){.    res = 
25680 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43  pModule->xEof(pC
25690 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29  ur->pVtabCursor)
256a0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
256b0 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
256c0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
256d0 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 69  _to_misuse;..  i
256e0 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f  f( !res ){.    /
256f0 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61  * If there is da
25700 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a  ta, jump to P2 *
25710 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  /.    pc = pOp->
25720 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
25730 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
25740 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
25750 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
25760 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
25770 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
25780 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d  * Opcode: VRenam
25790 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
257a0 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
257b0 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
257c0 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
257d0 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
257e0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69  tructure..** Thi
257f0 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
25800 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
25810 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  ng xRename metho
25820 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  d. The value.** 
25830 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
25840 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
25850 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74  zName argument t
25860 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65  o the xRename me
25870 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  thod..*/.case OP
25880 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71  _VRename: {.  sq
25890 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
258a0 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
258b0 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 20  b;.  Mem *pName 
258c0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
258d0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
258e0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78  Vtab->pModule->x
258f0 52 65 6e 61 6d 65 20 29 3b 0a 20 20 52 45 47 49  Rename );.  REGI
25900 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
25910 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 0a 20 20 53  p1, pName);..  S
25920 74 72 69 6e 67 69 66 79 28 70 4e 61 6d 65 2c 20  tringify(pName, 
25930 65 6e 63 6f 64 69 6e 67 29 3b 0a 0a 20 20 69 66  encoding);..  if
25940 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
25950 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
25960 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
25970 65 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  e;.  sqlite3Vtab
25980 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 72  Lock(pVtab);.  r
25990 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  c = pVtab->pModu
259a0 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61  le->xRename(pVta
259b0 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20  b, pName->z);.  
259c0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
259d0 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
259e0 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56   p->zErrMsg = pV
259f0 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20  tab->zErrMsg;.  
25a00 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d  pVtab->zErrMsg =
25a10 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61   0;.  sqlite3Vta
25a20 62 55 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61  bUnlock(db, pVta
25a30 62 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  b);.  if( sqlite
25a40 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20  3SafetyOn(db) ) 
25a50 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
25a60 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 62 72 65  o_misuse;..  bre
25a70 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
25a80 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
25a90 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
25aa0 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74  * Opcode: VUpdat
25ab0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
25ac0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
25ad0 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
25ae0 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
25af0 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
25b00 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
25b10 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
25b20 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
25b30 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74  ding xUpdate met
25b40 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a  hod. P2 values.*
25b50 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73  * are contiguous
25b60 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74   memory cells st
25b70 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20  arting at P3 to 
25b80 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64  pass to the xUpd
25b90 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  ate .** invocati
25ba0 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e  on. The value in
25bb0 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32   register (P3+P2
25bc0 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  -1) corresponds 
25bd0 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20  to the .** p2th 
25be0 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61  element of the a
25bf0 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64  rgv array passed
25c00 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a   to xUpdate..**.
25c10 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d  ** The xUpdate m
25c20 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20  ethod will do a 
25c30 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53  DELETE or an INS
25c40 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20  ERT or both..** 
25c50 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d  The argv[0] elem
25c60 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65  ent (which corre
25c70 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79  sponds to memory
25c80 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20   cell P3).** is 
25c90 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72  the rowid of a r
25ca0 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49  ow to delete.  I
25cb0 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c  f argv[0] is NUL
25cc0 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65  L then no .** de
25cd0 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20  letion occurs.  
25ce0 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d  The argv[1] elem
25cf0 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64  ent is the rowid
25d00 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20   of the new .** 
25d10 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62  row.  This can b
25d20 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74  e NULL to have t
25d30 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
25d40 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20   select the new 
25d50 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74  .** rowid for it
25d60 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65  self.  The subse
25d70 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69  quent elements i
25d80 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20  n the array are 
25d90 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f  .** the values o
25da0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
25db0 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20   new row..**.** 
25dc0 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f  If P2==1 then no
25dd0 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f   insert is perfo
25de0 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69  rmed.  argv[0] i
25df0 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a  s the rowid of.*
25e00 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  * a row to delet
25e10 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  e..**.** P1 is a
25e20 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49   boolean flag. I
25e30 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  f it is set to t
25e40 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64  rue and the xUpd
25e50 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73  ate call.** is s
25e60 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20  uccessful, then 
25e70 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
25e80 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61  ed by sqlite3_la
25e90 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
25ea0 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20  ) .** is set to 
25eb0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
25ec0 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72   rowid for the r
25ed0 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64  ow just inserted
25ee0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70  ..*/.case OP_VUp
25ef0 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  date: {.  sqlite
25f00 33 5f 76 74 61 62 20 2a 70 56 74 61 62 20 3d 20  3_vtab *pVtab = 
25f10 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20  pOp->p4.pVtab;. 
25f20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
25f30 2a 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69  *pModule = (sqli
25f40 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74  te3_module *)pVt
25f50 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  ab->pModule;.  i
25f60 6e 74 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70  nt nArg = pOp->p
25f70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
25f80 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41  ->p4type==P4_VTA
25f90 42 20 29 3b 0a 20 20 69 66 28 20 70 4d 6f 64 75  B );.  if( pModu
25fa0 6c 65 2d 3e 78 55 70 64 61 74 65 3d 3d 30 20 29  le->xUpdate==0 )
25fb0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
25fc0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
25fd0 73 67 2c 20 64 62 2c 20 22 72 65 61 64 2d 6f 6e  sg, db, "read-on
25fe0 6c 79 20 74 61 62 6c 65 22 29 3b 0a 20 20 20 20  ly table");.    
25ff0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
26000 52 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  R;.  }else{.    
26010 69 6e 74 20 69 3b 0a 20 20 20 20 73 71 6c 69 74  int i;.    sqlit
26020 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20  e_int64 rowid;. 
26030 20 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 20 3d     Mem **apArg =
26040 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 4d   p->apArg;.    M
26050 65 6d 20 2a 70 58 20 3d 20 26 70 2d 3e 61 4d 65  em *pX = &p->aMe
26060 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
26070 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
26080 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 74 6f   i++){.      sto
26090 72 65 54 79 70 65 49 6e 66 6f 28 70 58 2c 20 30  reTypeInfo(pX, 0
260a0 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69  );.      apArg[i
260b0 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58  ] = pX;.      pX
260c0 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
260d0 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
260e0 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
260f0 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
26100 65 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  e;.    sqlite3Vt
26110 61 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20  abLock(pVtab);. 
26120 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
26130 3e 78 55 70 64 61 74 65 28 70 56 74 61 62 2c 20  >xUpdate(pVtab, 
26140 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f  nArg, apArg, &ro
26150 77 69 64 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  wid);.    sqlite
26160 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
26170 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
26180 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d  zErrMsg = pVtab-
26190 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56  >zErrMsg;.    pV
261a0 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  tab->zErrMsg = 0
261b0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61  ;.    sqlite3Vta
261c0 62 55 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61  bUnlock(db, pVta
261d0 62 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69  b);.    if( sqli
261e0 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
261f0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
26200 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20  _to_misuse;.    
26210 69 66 28 20 70 4f 70 2d 3e 70 31 20 26 26 20 72  if( pOp->p1 && r
26220 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
26230 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41        assert( nA
26240 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d  rg>1 && apArg[0]
26250 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66   && (apArg[0]->f
26260 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29  lags&MEM_Null) )
26270 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74  ;.      db->last
26280 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20  Rowid = rowid;. 
26290 20 20 20 7d 0a 20 20 20 20 70 2d 3e 6e 43 68 61     }.    p->nCha
262a0 6e 67 65 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  nge++;.  }.  bre
262b0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
262c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
262d0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
262e0 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49  ndef  SQLITE_OMI
262f0 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
26300 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63  /* Opcode: Pagec
26310 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
26320 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
26330 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20   current number 
26340 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61  of pages in data
26350 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72  base P1 to memor
26360 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61  y cell P2..*/.ca
26370 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a  se OP_Pagecount:
26380 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
26390 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
263a0 20 2a 2f 0a 20 20 69 6e 74 20 70 31 20 3d 20 70   */.  int p1 = p
263b0 4f 70 2d 3e 70 31 3b 20 0a 20 20 69 6e 74 20 6e  Op->p1; .  int n
263c0 50 61 67 65 3b 0a 20 20 50 61 67 65 72 20 2a 70  Page;.  Pager *p
263d0 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
263e0 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44  treePager(db->aD
263f0 62 5b 70 31 5d 2e 70 42 74 29 3b 0a 0a 20 20 72  b[p1].pBt);..  r
26400 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  c = sqlite3Pager
26410 50 61 67 65 63 6f 75 6e 74 28 70 50 61 67 65 72  Pagecount(pPager
26420 2c 20 26 6e 50 61 67 65 29 3b 0a 20 20 69 66 28  , &nPage);.  if(
26430 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
26440 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
26450 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
26460 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 50 61   pOut->u.i = nPa
26470 67 65 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ge;.  }.  break;
26480 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  .}.#endif..#ifnd
26490 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
264a0 52 41 43 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  RACE./* Opcode: 
264b0 54 72 61 63 65 20 2a 20 2a 20 2a 20 50 34 20 2a  Trace * * * P4 *
264c0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e  .**.** If tracin
264d0 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79  g is enabled (by
264e0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61   the sqlite3_tra
264f0 63 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c  ce()) interface,
26500 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46   then.** the UTF
26510 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  -8 string contai
26520 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69  ned in P4 is emi
26530 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63  tted on the trac
26540 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63  e callback..*/.c
26550 61 73 65 20 4f 50 5f 54 72 61 63 65 3a 20 7b 0a  ase OP_Trace: {.
26560 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20    if( pOp->p4.z 
26570 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78  ){.    if( db->x
26580 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 64  Trace ){.      d
26590 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54  b->xTrace(db->pT
265a0 72 61 63 65 41 72 67 2c 20 70 4f 70 2d 3e 70 34  raceArg, pOp->p4
265b0 2e 7a 29 3b 0a 20 20 20 20 7d 0a 23 69 66 64 65  .z);.    }.#ifde
265c0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
265d0 20 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67     if( (db->flag
265e0 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72  s & SQLITE_SqlTr
265f0 61 63 65 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ace)!=0 ){.     
26600 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
26610 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20  ntf("SQL-trace: 
26620 25 73 5c 6e 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a  %s\n", pOp->p4.z
26630 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20  );.    }.#endif 
26640 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
26650 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  */.  }.  break;.
26660 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70  }.#endif.../* Op
26670 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a  code: Noop * * *
26680 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f   * *.**.** Do no
26690 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73  thing.  This ins
266a0 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65  truction is ofte
266b0 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75  n useful as a ju
266c0 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f  mp.** destinatio
266d0 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20  n..*/./*.** The 
266e0 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70  magic Explain op
266f0 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e  code are only in
26700 73 65 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c  serted when expl
26710 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a  ain==2 (which.**
26720 20 69 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20   is to say when 
26730 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52  the EXPLAIN QUER
26740 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73  Y PLAN syntax is
26750 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20   used.).** This 
26760 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69  opcode records i
26770 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
26780 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20  the optimizer.  
26790 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65  It is the.** the
267a0 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70   same as a no-op
267b0 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e  .  This opcodesn
267c0 65 76 65 72 20 61 70 70 65 61 72 73 20 69 6e 20  ever appears in 
267d0 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61  a real VM progra
267e0 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b  m..*/.default: {
267f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69            /* Thi
26800 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e  s is really OP_N
26810 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61  oop and OP_Expla
26820 69 6e 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d  in */.  break;.}
26830 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
26840 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26870 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26880 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66  .** The cases of
26890 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74   the switch stat
268a0 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73  ement above this
268b0 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c   line should all
268c0 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20   be indented.** 
268d0 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75  by 6 spaces.  Bu
268e0 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  t the left-most 
268f0 36 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65  6 spaces have be
26900 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d  en removed to im
26910 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61  prove the.** rea
26920 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20  dability.  From 
26930 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f  this point on do
26940 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69  wn, the normal i
26950 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73  ndentation rules
26960 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64   are.** restored
26970 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**************
26980 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26990 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
269a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
269b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
269c0 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56  .    }..#ifdef V
269d0 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
269e0 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6c 61 70  {.      u64 elap
269f0 73 65 64 20 3d 20 73 71 6c 69 74 65 33 48 77 74  sed = sqlite3Hwt
26a00 69 6d 65 28 29 20 2d 20 73 74 61 72 74 3b 0a 20  ime() - start;. 
26a10 20 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73       pOp->cycles
26a20 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20 20 20   += elapsed;.   
26a30 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23     pOp->cnt++;.#
26a40 69 66 20 30 0a 20 20 20 20 20 20 20 20 66 70 72  if 0.        fpr
26a50 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 25 31  intf(stdout, "%1
26a60 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65 64 29  0llu ", elapsed)
26a70 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
26a80 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
26a90 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20 26 70 2d  out, origPc, &p-
26aa0 3e 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23  >aOp[origPc]);.#
26ab0 65 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64  endif.    }.#end
26ac0 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66  if..    /* The f
26ad0 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64  ollowing code ad
26ae0 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68  ds nothing to th
26af0 65 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f  e actual functio
26b00 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66  nality.    ** of
26b10 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49   the program.  I
26b20 74 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66  t is only here f
26b30 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64  or testing and d
26b40 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a  ebugging..    **
26b50 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61   On the other ha
26b60 6e 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e  nd, it does burn
26b70 20 43 50 55 20 63 79 63 6c 65 73 20 65 76 65 72   CPU cycles ever
26b80 79 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20  y time through. 
26b90 20 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61     ** the evalua
26ba0 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65  tor loop.  So we
26bb0 20 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75   can leave it ou
26bc0 74 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73  t when NDEBUG is
26bd0 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f   defined..    */
26be0 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
26bf0 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d      assert( pc>=
26c00 2d 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20  -1 && pc<p->nOp 
26c10 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
26c20 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
26c30 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20  p->trace ){.    
26c40 20 20 69 66 28 20 72 63 21 3d 30 20 29 20 66 70    if( rc!=0 ) fp
26c50 72 69 6e 74 66 28 70 2d 3e 74 72 61 63 65 2c 22  rintf(p->trace,"
26c60 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20  rc=%d\n",rc);.  
26c70 20 20 20 20 69 66 28 20 6f 70 50 72 6f 70 65 72      if( opProper
26c80 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f  ty & OPFLG_OUT2_
26c90 50 52 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  PRERELEASE ){.  
26ca0 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72        registerTr
26cb0 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f  ace(p->trace, pO
26cc0 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
26cd0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
26ce0 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
26cf0 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20  LG_OUT3 ){.     
26d00 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65     registerTrace
26d10 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e  (p->trace, pOp->
26d20 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p3, pOut);.     
26d30 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20   }.    }.#endif 
26d40 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
26d50 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e   */.#endif  /* N
26d60 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a  DEBUG */.  }  /*
26d70 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   The end of the 
26d80 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65  for(;;) loop the
26d90 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f   loops through o
26da0 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20  pcodes */..  /* 
26db0 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73  If we reach this
26dc0 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73   point, it means
26dd0 20 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20   that execution 
26de0 69 73 20 66 69 6e 69 73 68 65 64 20 77 69 74 68  is finished with
26df0 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f  .  ** an error o
26e00 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a  f some kind..  *
26e10 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  /.vdbe_error_hal
26e20 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63 20  t:.  assert( rc 
26e30 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b  );.  p->rc = rc;
26e40 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  .  sqlite3VdbeHa
26e50 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d  lt(p);.  if( rc=
26e60 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f  =SQLITE_IOERR_NO
26e70 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63  MEM ) db->malloc
26e80 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63  Failed = 1;.  rc
26e90 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
26ea0 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74  ..  /* This is t
26eb0 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20  he only way out 
26ec0 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72  of this procedur
26ed0 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20  e.  We have to. 
26ee0 20 2a 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20   ** release the 
26ef0 6d 75 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65  mutexes on btree
26f00 73 20 74 68 61 74 20 77 65 72 65 20 61 63 71 75  s that were acqu
26f10 69 72 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a  ired at the.  **
26f20 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65   top. */.vdbe_re
26f30 74 75 72 6e 3a 0a 20 20 73 71 6c 69 74 65 33 42  turn:.  sqlite3B
26f40 74 72 65 65 4d 75 74 65 78 41 72 72 61 79 4c 65  treeMutexArrayLe
26f50 61 76 65 28 26 70 2d 3e 61 4d 75 74 65 78 29 3b  ave(&p->aMutex);
26f60 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20  .  return rc;.. 
26f70 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
26f80 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20   if a string or 
26f90 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e  blob larger than
26fa0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
26fb0 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75  TH.  ** is encou
26fc0 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f  ntered..  */.too
26fd0 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 53  _big:.  sqlite3S
26fe0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
26ff0 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72 69 6e  rMsg, db, "strin
27000 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69  g or blob too bi
27010 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  g");.  rc = SQLI
27020 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74  TE_TOOBIG;.  got
27030 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
27040 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
27050 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f   here if a mallo
27060 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a  c() fails..  */.
27070 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61  no_mem:.  db->ma
27080 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
27090 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
270a0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
270b0 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f  db, "out of memo
270c0 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ry");.  rc = SQL
270d0 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74  ITE_NOMEM;.  got
270e0 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
270f0 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
27100 20 68 65 72 65 20 66 6f 72 20 61 6e 20 53 51 4c   here for an SQL
27110 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72  ITE_MISUSE error
27120 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
27130 5f 74 6f 5f 6d 69 73 75 73 65 3a 0a 20 20 72 63  _to_misuse:.  rc
27140 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45   = SQLITE_MISUSE
27150 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 75  ;.  /* Fall thru
27160 20 69 6e 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   into abort_due_
27170 74 6f 5f 65 72 72 6f 72 20 2a 2f 0a 0a 20 20 2f  to_error */..  /
27180 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66  * Jump to here f
27190 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e  or any other kin
271a0 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72  d of fatal error
271b0 2e 20 20 54 68 65 20 22 72 63 22 20 76 61 72 69  .  The "rc" vari
271c0 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64  able.  ** should
271d0 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20   hold the error 
271e0 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f  number..  */.abo
271f0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a  rt_due_to_error:
27200 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 45  .  assert( p->zE
27210 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66  rrMsg==0 );.  if
27220 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
27230 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45  ed ) rc = SQLITE
27240 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63  _NOMEM;.  if( rc
27250 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  !=SQLITE_IOERR_N
27260 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69  OMEM ){.    sqli
27270 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
27280 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
27290 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  s", sqlite3ErrSt
272a0 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f  r(rc));.  }.  go
272b0 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
272c0 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
272d0 6f 20 68 65 72 65 20 69 66 20 74 68 65 20 73 71  o here if the sq
272e0 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
272f0 29 20 41 50 49 20 73 65 74 73 20 74 68 65 20 69  ) API sets the i
27300 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c  nterrupt.  ** fl
27310 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64  ag..  */.abort_d
27320 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a  ue_to_interrupt:
27330 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75  .  assert( db->u
27340 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
27350 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
27360 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d  _INTERRUPT;.  p-
27370 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69  >rc = rc;.  sqli
27380 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
27390 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
273a0 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  s", sqlite3ErrSt
273b0 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76  r(rc));.  goto v
273c0 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
273d0 7d 0a                                            }.