/ Hex Artifact Content
Login

Artifact b78adf571b9abac4092c641bec148832e8f26f34:


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 38 32 20 32 30 30 38  e.c,v 1.782 2008
0850: 2f 31 30 2f 30 38 20 31 37 3a 35 38 3a 34 39 20  /10/08 17:58:49 
0860: 64 61 6e 69 65 6c 6b 31 39 37 37 20 45 78 70 20  danielk1977 Exp 
0870: 24 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  $.*/.#include "s
0880: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0890: 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23  lude <ctype.h>.#
08a0: 69 6e 63 6c 75 64 65 20 22 76 64 62 65 49 6e 74  include "vdbeInt
08b0: 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .h"../*.** The f
08c0: 6f 6c 6c 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20  ollowing global 
08d0: 76 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72  variable is incr
08e0: 65 6d 65 6e 74 65 64 20 65 76 65 72 79 20 74 69  emented every ti
08f0: 6d 65 20 61 20 63 75 72 73 6f 72 0a 2a 2a 20 6d  me a cursor.** m
0900: 6f 76 65 73 2c 20 65 69 74 68 65 72 20 62 79 20  oves, either by 
0910: 74 68 65 20 4f 50 5f 4d 6f 76 65 58 58 2c 20 4f  the OP_MoveXX, O
0920: 50 5f 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 50 72  P_Next, or OP_Pr
0930: 65 76 20 6f 70 63 6f 64 65 73 2e 20 20 54 68 65  ev opcodes.  The
0940: 20 74 65 73 74 0a 2a 2a 20 70 72 6f 63 65 64 75   test.** procedu
0950: 72 65 73 20 75 73 65 20 74 68 69 73 20 69 6e 66  res use this inf
0960: 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65  ormation to make
0970: 20 73 75 72 65 20 74 68 61 74 20 69 6e 64 69 63   sure that indic
0980: 65 73 20 61 72 65 0a 2a 2a 20 77 6f 72 6b 69 6e  es are.** workin
0990: 67 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 54 68  g correctly.  Th
09a0: 69 73 20 76 61 72 69 61 62 6c 65 20 68 61 73 20  is variable has 
09b0: 6e 6f 20 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65  no function othe
09c0: 72 20 74 68 61 6e 20 74 6f 0a 2a 2a 20 68 65 6c  r than to.** hel
09d0: 70 20 76 65 72 69 66 79 20 74 68 65 20 63 6f 72  p verify the cor
09e0: 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f  rect operation o
09f0: 66 20 74 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a  f the library..*
0a00: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0a10: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
0a20: 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 20 3d 20  _search_count = 
0a30: 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  0;.#endif../*.**
0a40: 20 57 68 65 6e 20 74 68 69 73 20 67 6c 6f 62 61   When this globa
0a50: 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 70 6f  l variable is po
0a60: 73 69 74 69 76 65 2c 20 69 74 20 67 65 74 73 20  sitive, it gets 
0a70: 64 65 63 72 65 6d 65 6e 74 65 64 20 6f 6e 63 65  decremented once
0a80: 20 62 65 66 6f 72 65 0a 2a 2a 20 65 61 63 68 20   before.** each 
0a90: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74  instruction in t
0aa0: 68 65 20 56 44 42 45 2e 20 20 57 68 65 6e 20 72  he VDBE.  When r
0ab0: 65 61 63 68 65 73 20 7a 65 72 6f 2c 20 74 68 65  eaches zero, the
0ac0: 20 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65   u1.isInterrupte
0ad0: 64 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68  d.** field of th
0ae0: 65 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74  e sqlite3 struct
0af0: 75 72 65 20 69 73 20 73 65 74 20 69 6e 20 6f 72  ure is set in or
0b00: 64 65 72 20 74 6f 20 73 69 6d 75 6c 61 74 65 20  der to simulate 
0b10: 61 6e 64 20 69 6e 74 65 72 72 75 70 74 2e 0a 2a  and interrupt..*
0b20: 2a 0a 2a 2a 20 54 68 69 73 20 66 61 63 69 6c 69  *.** This facili
0b30: 74 79 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  ty is used for t
0b40: 65 73 74 69 6e 67 20 70 75 72 70 6f 73 65 73 20  esting purposes 
0b50: 6f 6e 6c 79 2e 20 20 49 74 20 64 6f 65 73 20 6e  only.  It does n
0b60: 6f 74 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 69  ot function.** i
0b70: 6e 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 62 75  n an ordinary bu
0b80: 69 6c 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ild..*/.#ifdef S
0b90: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0ba0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
0bb0: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0bc0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0bd0: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0be0: 6c 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  le is incremente
0bf0: 64 20 65 61 63 68 20 74 79 70 65 20 74 68 65 20  d each type the 
0c00: 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 0a 2a  OP_Sort opcode.*
0c10: 2a 20 69 73 20 65 78 65 63 75 74 65 64 2e 20 20  * is executed.  
0c20: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0c30: 72 65 73 20 75 73 65 20 74 68 69 73 20 69 6e 66  res use this inf
0c40: 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65  ormation to make
0c50: 20 73 75 72 65 20 74 68 61 74 0a 2a 2a 20 73 6f   sure that.** so
0c60: 72 74 69 6e 67 20 69 73 20 6f 63 63 75 72 72 69  rting is occurri
0c70: 6e 67 20 6f 72 20 6e 6f 74 20 6f 63 63 75 72 72  ng or not occurr
0c80: 69 6e 67 20 61 74 20 61 70 70 72 6f 70 72 69 61  ing at appropria
0c90: 74 65 20 74 69 6d 65 73 2e 20 20 20 54 68 69 73  te times.   This
0ca0: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 68 61 73   variable.** has
0cb0: 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20 6f 74 68   no function oth
0cc0: 65 72 20 74 68 61 6e 20 74 6f 20 68 65 6c 70 20  er than to help 
0cd0: 76 65 72 69 66 79 20 74 68 65 20 63 6f 72 72 65  verify the corre
0ce0: 63 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20  ct operation of 
0cf0: 74 68 65 0a 2a 2a 20 6c 69 62 72 61 72 79 2e 0a  the.** library..
0d00: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
0d10: 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65  _TEST.int sqlite
0d20: 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 20 3d 20 30  3_sort_count = 0
0d30: 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
0d40: 54 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20  The next global 
0d50: 76 61 72 69 61 62 6c 65 20 72 65 63 6f 72 64 73  variable records
0d60: 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
0d70: 20 6c 61 72 67 65 73 74 20 4d 45 4d 5f 42 6c 6f   largest MEM_Blo
0d80: 62 0a 2a 2a 20 6f 72 20 4d 45 4d 5f 53 74 72 20  b.** or MEM_Str 
0d90: 74 68 61 74 20 68 61 73 20 62 65 65 6e 20 75 73  that has been us
0da0: 65 64 20 62 79 20 61 20 56 44 42 45 20 6f 70 63  ed by a VDBE opc
0db0: 6f 64 65 2e 20 20 54 68 65 20 74 65 73 74 20 70  ode.  The test p
0dc0: 72 6f 63 65 64 75 72 65 73 0a 2a 2a 20 75 73 65  rocedures.** use
0dd0: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0de0: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0df0: 68 61 74 20 74 68 65 20 7a 65 72 6f 2d 62 6c 6f  hat the zero-blo
0e00: 62 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a  b functionality.
0e10: 2a 2a 20 69 73 20 77 6f 72 6b 69 6e 67 20 63 6f  ** is working co
0e20: 72 72 65 63 74 6c 79 2e 20 20 20 54 68 69 73 20  rrectly.   This 
0e30: 76 61 72 69 61 62 6c 65 20 68 61 73 20 6e 6f 20  variable has no 
0e40: 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74  function other t
0e50: 68 61 6e 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76  han to.** help v
0e60: 65 72 69 66 79 20 74 68 65 20 63 6f 72 72 65 63  erify the correc
0e70: 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  t operation of t
0e80: 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23  he library..*/.#
0e90: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
0ea0: 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 61  T.int sqlite3_ma
0eb0: 78 5f 62 6c 6f 62 73 69 7a 65 20 3d 20 30 3b 0a  x_blobsize = 0;.
0ec0: 73 74 61 74 69 63 20 76 6f 69 64 20 75 70 64 61  static void upda
0ed0: 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 4d 65  teMaxBlobsize(Me
0ee0: 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 28 70 2d  m *p){.  if( (p-
0ef0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  >flags & (MEM_St
0f00: 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 21 3d 30 20  r|MEM_Blob))!=0 
0f10: 26 26 20 70 2d 3e 6e 3e 73 71 6c 69 74 65 33 5f  && p->n>sqlite3_
0f20: 6d 61 78 5f 62 6c 6f 62 73 69 7a 65 20 29 7b 0a  max_blobsize ){.
0f30: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f      sqlite3_max_
0f40: 62 6c 6f 62 73 69 7a 65 20 3d 20 70 2d 3e 6e 3b  blobsize = p->n;
0f50: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  .  }.}.#endif../
0f60: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0f70: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0f80: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0f90: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0fa0: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0fb0: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0fc0: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0fd0: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0fe0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0ff0: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
1000: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
1010: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
1020: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
1030: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
1040: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
1050: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
1060: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
1070: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
1080: 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68  /*.** Convert th
1090: 65 20 67 69 76 65 6e 20 72 65 67 69 73 74 65 72  e given register
10a0: 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69   into a string i
10b0: 66 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a  f it isn't one.*
10c0: 2a 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72  * already. Retur
10d0: 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20  n non-zero if a 
10e0: 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a  malloc() fails..
10f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e  */.#define Strin
1100: 67 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20  gify(P, enc) \. 
1110: 20 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73    if(((P)->flags
1120: 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c  &(MEM_Str|MEM_Bl
1130: 6f 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74  ob))==0 && sqlit
1140: 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69  e3VdbeMemStringi
1150: 66 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20  fy(P,enc)) \.   
1160: 20 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b    { goto no_mem;
1170: 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68   }../*.** An eph
1180: 65 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61  emeral string va
1190: 6c 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62  lue (signified b
11a0: 79 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20  y the MEM_Ephem 
11b0: 66 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a  flag) contains.*
11c0: 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  * a pointer to a
11d0: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
11e0: 6f 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68  ocated string wh
11f0: 65 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65  ere some other e
1200: 6e 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70  ntity.** is resp
1210: 6f 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c  onsible for deal
1220: 6c 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74  locating that st
1230: 72 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74  ring.  Because t
1240: 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64  he register.** d
1250: 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20  oes not control 
1260: 74 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d  the string, it m
1270: 69 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20  ight be deleted 
1280: 77 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69  without the regi
1290: 73 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20  ster.** knowing 
12a0: 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72  it..**.** This r
12b0: 6f 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20  outine converts 
12c0: 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72  an ephemeral str
12d0: 69 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d  ing into a dynam
12e0: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
12f0: 0a 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20  .** string that 
1300: 74 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73  the register its
1310: 65 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49  elf controls.  I
1320: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
1330: 74 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e  t.** converts an
1340: 20 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e   MEM_Ephem strin
1350: 67 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79  g into an MEM_Dy
1360: 6e 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65  n string..*/.#de
1370: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
1380: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
1390: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
13a0: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
13b0: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
13c0: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
13d0: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
13e0: 6d 65 6d 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c  mem;}../*.** Cal
13f0: 6c 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  l sqlite3VdbeMem
1400: 45 78 70 61 6e 64 42 6c 6f 62 28 29 20 6f 6e 20  ExpandBlob() on 
1410: 74 68 65 20 73 75 70 70 6c 69 65 64 20 76 61 6c  the supplied val
1420: 75 65 20 28 74 79 70 65 20 4d 65 6d 2a 29 0a 2a  ue (type Mem*).*
1430: 2a 20 50 20 69 66 20 72 65 71 75 69 72 65 64 2e  * P if required.
1440: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 61  .*/.#define Expa
1450: 6e 64 42 6c 6f 62 28 50 29 20 28 28 28 50 29 2d  ndBlob(P) (((P)-
1460: 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 29  >flags&MEM_Zero)
1470: 3f 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45  ?sqlite3VdbeMemE
1480: 78 70 61 6e 64 42 6c 6f 62 28 50 29 3a 30 29 0a  xpandBlob(P):0).
1490: 0a 2f 2a 0a 2a 2a 20 41 72 67 75 6d 65 6e 74 20  ./*.** Argument 
14a0: 70 4d 65 6d 20 70 6f 69 6e 74 73 20 61 74 20 61  pMem points at a
14b0: 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 77   register that w
14c0: 69 6c 6c 20 62 65 20 70 61 73 73 65 64 20 74 6f  ill be passed to
14d0: 20 61 0a 2a 2a 20 75 73 65 72 2d 64 65 66 69 6e   a.** user-defin
14e0: 65 64 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 72  ed function or r
14f0: 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75  eturned to the u
1500: 73 65 72 20 61 73 20 74 68 65 20 72 65 73 75 6c  ser as the resul
1510: 74 20 6f 66 20 61 20 71 75 65 72 79 2e 0a 2a 2a  t of a query..**
1520: 20 54 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75   The second argu
1530: 6d 65 6e 74 2c 20 27 64 62 5f 65 6e 63 27 20 69  ment, 'db_enc' i
1540: 73 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64  s the text encod
1550: 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 65 20  ing used by the 
1560: 76 64 62 65 20 66 6f 72 0a 2a 2a 20 72 65 67 69  vdbe for.** regi
1570: 73 74 65 72 20 76 61 72 69 61 62 6c 65 73 2e 20  ster variables. 
1580: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65   This routine se
1590: 74 73 20 74 68 65 20 70 4d 65 6d 2d 3e 65 6e 63  ts the pMem->enc
15a0: 20 61 6e 64 20 70 4d 65 6d 2d 3e 74 79 70 65 0a   and pMem->type.
15b0: 2a 2a 20 76 61 72 69 61 62 6c 65 73 20 75 73 65  ** variables use
15c0: 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33  d by the sqlite3
15d0: 5f 76 61 6c 75 65 5f 2a 28 29 20 72 6f 75 74 69  _value_*() routi
15e0: 6e 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  nes..*/.#define 
15f0: 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 41 2c  storeTypeInfo(A,
1600: 42 29 20 5f 73 74 6f 72 65 54 79 70 65 49 6e 66  B) _storeTypeInf
1610: 6f 28 41 29 0a 73 74 61 74 69 63 20 76 6f 69 64  o(A).static void
1620: 20 5f 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28   _storeTypeInfo(
1630: 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e  Mem *pMem){.  in
1640: 74 20 66 6c 61 67 73 20 3d 20 70 4d 65 6d 2d 3e  t flags = pMem->
1650: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 66 6c 61  flags;.  if( fla
1660: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
1670: 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20  .    pMem->type 
1680: 3d 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a 20  = SQLITE_NULL;. 
1690: 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c   }.  else if( fl
16a0: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b  ags & MEM_Int ){
16b0: 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20  .    pMem->type 
16c0: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52  = SQLITE_INTEGER
16d0: 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28  ;.  }.  else if(
16e0: 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61   flags & MEM_Rea
16f0: 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74  l ){.    pMem->t
1700: 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 46 4c 4f  ype = SQLITE_FLO
1710: 41 54 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69  AT;.  }.  else i
1720: 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  f( flags & MEM_S
1730: 74 72 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e  tr ){.    pMem->
1740: 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 54 45  type = SQLITE_TE
1750: 58 54 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  XT;.  }else{.   
1760: 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51   pMem->type = SQ
1770: 4c 49 54 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a 7d  LITE_BLOB;.  }.}
1780: 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 70 65 72 74 69  ../*.** Properti
1790: 65 73 20 6f 66 20 6f 70 63 6f 64 65 73 2e 20 20  es of opcodes.  
17a0: 54 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41  The OPFLG_INITIA
17b0: 4c 49 5a 45 52 20 6d 61 63 72 6f 20 69 73 0a 2a  LIZER macro is.*
17c0: 2a 20 63 72 65 61 74 65 64 20 62 79 20 6d 6b 6f  * created by mko
17d0: 70 63 6f 64 65 68 2e 61 77 6b 20 64 75 72 69 6e  pcodeh.awk durin
17e0: 67 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 2e 20 20  g compilation.  
17f0: 44 61 74 61 20 69 73 20 6f 62 74 61 69 6e 65 64  Data is obtained
1800: 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 63 6f 6d  .** from the com
1810: 6d 65 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  ments following 
1820: 74 68 65 20 22 63 61 73 65 20 4f 50 5f 78 78 78  the "case OP_xxx
1830: 78 3a 22 20 73 74 61 74 65 6d 65 6e 74 73 20 69  x:" statements i
1840: 6e 0a 2a 2a 20 74 68 69 73 20 66 69 6c 65 2e 20  n.** this file. 
1850: 20 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73   .*/.static cons
1860: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
1870: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  opcodeProperty[]
1880: 20 3d 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c   = OPFLG_INITIAL
1890: 49 5a 45 52 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  IZER;../*.** Ret
18a0: 75 72 6e 20 74 72 75 65 20 69 66 20 61 6e 20 6f  urn true if an o
18b0: 70 63 6f 64 65 20 68 61 73 20 61 6e 79 20 6f 66  pcode has any of
18c0: 20 74 68 65 20 4f 50 46 4c 47 5f 78 78 78 20 70   the OPFLG_xxx p
18d0: 72 6f 70 65 72 74 69 65 73 0a 2a 2a 20 73 70 65  roperties.** spe
18e0: 63 69 66 69 65 64 20 62 79 20 6d 61 73 6b 2e 0a  cified by mask..
18f0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  */.int sqlite3Vd
1900: 62 65 4f 70 63 6f 64 65 48 61 73 50 72 6f 70 65  beOpcodeHasPrope
1910: 72 74 79 28 69 6e 74 20 6f 70 63 6f 64 65 2c 20  rty(int opcode, 
1920: 69 6e 74 20 6d 61 73 6b 29 7b 0a 20 20 61 73 73  int mask){.  ass
1930: 65 72 74 28 20 6f 70 63 6f 64 65 3e 30 20 26 26  ert( opcode>0 &&
1940: 20 6f 70 63 6f 64 65 3c 73 69 7a 65 6f 66 28 6f   opcode<sizeof(o
1950: 70 63 6f 64 65 50 72 6f 70 65 72 74 79 29 20 29  pcodeProperty) )
1960: 3b 0a 20 20 72 65 74 75 72 6e 20 28 6f 70 63 6f  ;.  return (opco
1970: 64 65 50 72 6f 70 65 72 74 79 5b 6f 70 63 6f 64  deProperty[opcod
1980: 65 5d 26 6d 61 73 6b 29 21 3d 30 3b 0a 7d 0a 0a  e]&mask)!=0;.}..
1990: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 63  /*.** Allocate c
19a0: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
19b0: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
19c0: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
19d0: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
19e0: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
19f0: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 43  ory..*/.static C
1a00: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
1a10: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
1a20: 2c 20 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 0a  , .  int iCur, .
1a30: 20 20 4f 70 20 2a 70 4f 70 2c 0a 20 20 69 6e 74    Op *pOp,.  int
1a40: 20 69 44 62 2c 20 0a 20 20 69 6e 74 20 69 73 42   iDb, .  int isB
1a50: 74 72 65 65 43 75 72 73 6f 72 0a 29 7b 0a 20 20  treeCursor.){.  
1a60: 2f 2a 20 46 69 6e 64 20 74 68 65 20 6d 65 6d 6f  /* Find the memo
1a70: 72 79 20 63 65 6c 6c 20 74 68 61 74 20 77 69 6c  ry cell that wil
1a80: 6c 20 62 65 20 75 73 65 64 20 74 6f 20 73 74 6f  l be used to sto
1a90: 72 65 20 74 68 65 20 62 6c 6f 62 20 6f 66 20 6d  re the blob of m
1aa0: 65 6d 6f 72 79 0a 20 20 2a 2a 20 72 65 71 75 69  emory.  ** requi
1ab0: 72 65 64 20 66 6f 72 20 74 68 69 73 20 43 75 72  red for this Cur
1ac0: 73 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49  sor structure. I
1ad0: 74 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20  t is convenient 
1ae0: 74 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76  to use a .  ** v
1af0: 64 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  dbe memory cell 
1b00: 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65  to manage the me
1b10: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1b20: 72 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20  required for a. 
1b30: 20 2a 2a 20 43 75 72 73 6f 72 20 73 74 72 75 63   ** Cursor struc
1b40: 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c  ture for the fol
1b50: 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a  lowing reasons:.
1b60: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f    **.  **   * So
1b70: 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e  metimes cursor n
1b80: 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20  umbers are used 
1b90: 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20  for a couple of 
1ba0: 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20  different.  **  
1bb0: 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61     purposes in a
1bc0: 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54   vdbe program. T
1bd0: 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73 65  he different use
1be0: 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a  s might require.
1bf0: 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65    **     differe
1c00: 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74  nt sized allocat
1c10: 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c  ions. Memory cel
1c20: 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61  ls provide growa
1c30: 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c  ble.  **     all
1c40: 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  ocations..  **. 
1c50: 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69   **   * When usi
1c60: 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59  ng ENABLE_MEMORY
1c70: 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d  _MANAGEMENT, mem
1c80: 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73  ory cell buffers
1c90: 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65   can.  **     be
1ca0: 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69   freed lazily vi
1cb0: 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65  a the sqlite3_re
1cc0: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41  lease_memory() A
1cd0: 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20  PI. This.  **   
1ce0: 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20    minimizes the 
1cf0: 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63  number of malloc
1d00: 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74   calls made by t
1d10: 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a  he system..  **.
1d20: 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c    ** Memory cell
1d30: 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61 72  s for cursors ar
1d40: 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20 74  e allocated at t
1d50: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61 64  he top of the ad
1d60: 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63 65  dress.  ** space
1d70: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70  . Memory cell (p
1d80: 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f  ->nMem) correspo
1d90: 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30 2e  nds to cursor 0.
1da0: 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20   Space for.  ** 
1db0: 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e 61  cursor 1 is mana
1dc0: 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63 65  ged by memory ce
1dd0: 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20  ll (p->nMem-1), 
1de0: 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20  etc..  */.  Mem 
1df0: 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d  *pMem = &p->aMem
1e00: 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a  [p->nMem-iCur];.
1e10: 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20  .  int nByte;.  
1e20: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
1e30: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 6f 70 63  .  /* If the opc
1e40: 6f 64 65 20 6f 66 20 70 4f 70 20 69 73 20 4f 50  ode of pOp is OP
1e50: 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 2c 20  _SetNumColumns, 
1e60: 74 68 65 6e 20 70 4f 70 2d 3e 70 32 20 63 6f 6e  then pOp->p2 con
1e70: 74 61 69 6e 73 0a 20 20 2a 2a 20 74 68 65 20 6e  tains.  ** the n
1e80: 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
1e90: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 63  in the records c
1ea0: 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the 
1eb0: 74 61 62 6c 65 20 6f 72 0a 20 20 2a 2a 20 69 6e  table or.  ** in
1ec0: 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
1ed0: 2e 20 55 73 65 20 74 68 69 73 20 74 6f 20 72 65  . Use this to re
1ee0: 73 65 72 76 65 20 73 70 61 63 65 20 66 6f 72 20  serve space for 
1ef0: 74 68 65 20 0a 20 20 2a 2a 20 43 75 72 73 6f 72  the .  ** Cursor
1f00: 2e 61 54 79 70 65 5b 5d 20 61 72 72 61 79 2e 0a  .aType[] array..
1f10: 20 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c    */.  int nFiel
1f20: 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70  d = 0;.  if( pOp
1f30: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 74  ->opcode==OP_Set
1f40: 4e 75 6d 43 6f 6c 75 6d 6e 73 20 7c 7c 20 70 4f  NumColumns || pO
1f50: 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1f60: 65 6e 45 70 68 65 6d 65 72 61 6c 20 29 7b 0a 20  enEphemeral ){. 
1f70: 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d     nField = pOp-
1f80: 3e 70 32 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65  >p2;.  }.  nByte
1f90: 20 3d 20 0a 20 20 20 20 20 20 73 69 7a 65 6f 66   = .      sizeof
1fa0: 28 43 75 72 73 6f 72 29 20 2b 20 0a 20 20 20 20  (Cursor) + .    
1fb0: 20 20 28 69 73 42 74 72 65 65 43 75 72 73 6f 72    (isBtreeCursor
1fc0: 3f 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72  ?sqlite3BtreeCur
1fd0: 73 6f 72 53 69 7a 65 28 29 3a 30 29 20 2b 20 0a  sorSize():0) + .
1fe0: 20 20 20 20 20 20 32 2a 6e 46 69 65 6c 64 2a 73        2*nField*s
1ff0: 69 7a 65 6f 66 28 75 33 32 29 3b 0a 0a 20 20 61  izeof(u32);..  a
2000: 73 73 65 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e  ssert( iCur<p->n
2010: 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20  Cursor );.  if( 
2020: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 29  p->apCsr[iCur] )
2030: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2040: 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70  eFreeCursor(p, p
2050: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a  ->apCsr[iCur]);.
2060: 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75      p->apCsr[iCu
2070: 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  r] = 0;.  }.  if
2080: 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c  ( SQLITE_OK==sql
2090: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
20a0: 70 4d 65 6d 2c 20 6e 42 79 74 65 2c 20 30 29 20  pMem, nByte, 0) 
20b0: 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b  ){.    p->apCsr[
20c0: 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20 28 43  iCur] = pCx = (C
20d0: 75 72 73 6f 72 20 2a 29 70 4d 65 6d 2d 3e 7a 3b  ursor *)pMem->z;
20e0: 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 4d 65 6d  .    memset(pMem
20f0: 2d 3e 7a 2c 20 30 2c 20 6e 42 79 74 65 29 3b 0a  ->z, 0, nByte);.
2100: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
2110: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
2120: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
2130: 20 20 69 66 28 20 6e 46 69 65 6c 64 20 29 7b 0a    if( nField ){.
2140: 20 20 20 20 20 20 70 43 78 2d 3e 61 54 79 70 65        pCx->aType
2150: 20 3d 20 28 75 33 32 20 2a 29 26 70 4d 65 6d 2d   = (u32 *)&pMem-
2160: 3e 7a 5b 73 69 7a 65 6f 66 28 43 75 72 73 6f 72  >z[sizeof(Cursor
2170: 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  )];.    }.    if
2180: 28 20 69 73 42 74 72 65 65 43 75 72 73 6f 72 20  ( isBtreeCursor 
2190: 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 70 43  ){.      pCx->pC
21a0: 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72 73 6f  ursor = (BtCurso
21b0: 72 20 2a 29 26 70 4d 65 6d 2d 3e 7a 5b 73 69 7a  r *)&pMem->z[siz
21c0: 65 6f 66 28 43 75 72 73 6f 72 29 2b 32 2a 6e 46  eof(Cursor)+2*nF
21d0: 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29  ield*sizeof(u32)
21e0: 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  ];.    }.  }.  r
21f0: 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a  eturn pCx;.}../*
2200: 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65  .** Try to conve
2210: 72 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20  rt a value into 
2220: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
2230: 65 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63  entation if we c
2240: 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68  an.** do so with
2250: 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f  out loss of info
2260: 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68  rmation.  In oth
2270: 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65  er words, if the
2280: 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73   string.** looks
2290: 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20   like a number, 
22a0: 63 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20  convert it into 
22b0: 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74  a number.  If it
22c0: 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f   does not.** loo
22d0: 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c  k like a number,
22e0: 20 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e   leave it alone.
22f0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
2300: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
2310: 6e 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b  nity(Mem *pRec){
2320: 0a 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c  .  if( (pRec->fl
2330: 61 67 73 20 26 20 28 4d 45 4d 5f 52 65 61 6c 7c  ags & (MEM_Real|
2340: 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30 20 29 7b 0a  MEM_Int))==0 ){.
2350: 20 20 20 20 69 6e 74 20 72 65 61 6c 6e 75 6d 3b      int realnum;
2360: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2370: 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28  MemNulTerminate(
2380: 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28 20 28  pRec);.    if( (
2390: 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pRec->flags&MEM_
23a0: 53 74 72 29 0a 20 20 20 20 20 20 20 20 20 26 26  Str).         &&
23b0: 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 62 65 72   sqlite3IsNumber
23c0: 28 70 52 65 63 2d 3e 7a 2c 20 26 72 65 61 6c 6e  (pRec->z, &realn
23d0: 75 6d 2c 20 70 52 65 63 2d 3e 65 6e 63 29 20 29  um, pRec->enc) )
23e0: 7b 0a 20 20 20 20 20 20 69 36 34 20 76 61 6c 75  {.      i64 valu
23f0: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
2400: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
2410: 6e 67 28 70 52 65 63 2c 20 53 51 4c 49 54 45 5f  ng(pRec, SQLITE_
2420: 55 54 46 38 29 3b 0a 20 20 20 20 20 20 69 66 28  UTF8);.      if(
2430: 20 21 72 65 61 6c 6e 75 6d 20 26 26 20 73 71 6c   !realnum && sql
2440: 69 74 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d  ite3Atoi64(pRec-
2450: 3e 7a 2c 20 26 76 61 6c 75 65 29 20 29 7b 0a 20  >z, &value) ){. 
2460: 20 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e 69         pRec->u.i
2470: 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20   = value;.      
2480: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
2490: 28 70 52 65 63 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pRec, MEM_Int);
24a0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
24b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
24c0: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 52 65 63  eMemRealify(pRec
24d0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
24e0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  .  }.}../*.** Pr
24f0: 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65  ocessing is dete
2500: 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66  rmine by the aff
2510: 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a  inity parameter:
2520: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
2530: 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51  F_INTEGER:.** SQ
2540: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a  LITE_AFF_REAL:.*
2550: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  * SQLITE_AFF_NUM
2560: 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20  ERIC:.**    Try 
2570: 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20  to convert pRec 
2580: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
2590: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20  presentation or 
25a0: 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e  a .**    floatin
25b0: 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e  g-point represen
25c0: 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74  tation if an int
25d0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
25e0: 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74  ion.**    is not
25f0: 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65   possible.  Note
2600: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65   that the intege
2610: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
2620: 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73   is.**    always
2630: 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e   preferred, even
2640: 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79   if the affinity
2650: 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73   is REAL, becaus
2660: 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67  e.**    an integ
2670: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
2680: 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20  n is more space 
2690: 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73  efficient on dis
26a0: 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  k..**.** SQLITE_
26b0: 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20  AFF_TEXT:.**    
26c0: 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  Convert pRec to 
26d0: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
26e0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  ation..**.** SQL
26f0: 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a  ITE_AFF_NONE:.**
2700: 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63      No-op.  pRec
2710: 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
2720: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
2730: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 4d  plyAffinity(.  M
2740: 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20 20  em *pRec,       
2750: 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 20     /* The value 
2760: 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74  to apply affinit
2770: 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61  y to */.  char a
2780: 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a  ffinity,      /*
2790: 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
27a0: 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
27b0: 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20 20   u8 enc         
27c0: 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73       /* Use this
27d0: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   text encoding *
27e0: 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e  /.){.  if( affin
27f0: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2800: 54 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f  TEXT ){.    /* O
2810: 6e 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20  nly attempt the 
2820: 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45  conversion to TE
2830: 58 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61  XT if there is a
2840: 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61  n integer or rea
2850: 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65  l.    ** represe
2860: 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e  ntation (blob an
2870: 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65  d NULL do not ge
2880: 74 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74  t converted) but
2890: 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a   no string.    *
28a0: 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  * representation
28b0: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
28c0: 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73   0==(pRec->flags
28d0: 26 4d 45 4d 5f 53 74 72 29 20 26 26 20 28 70 52  &MEM_Str) && (pR
28e0: 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52  ec->flags&(MEM_R
28f0: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b  eal|MEM_Int)) ){
2900: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
2910: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
2920: 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20 20 20 7d  Rec, enc);.    }
2930: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
2940: 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d   &= ~(MEM_Real|M
2950: 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65  EM_Int);.  }else
2960: 20 69 66 28 20 61 66 66 69 6e 69 74 79 21 3d 53   if( affinity!=S
2970: 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29  QLITE_AFF_NONE )
2980: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 66  {.    assert( af
2990: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
29a0: 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61 66  FF_INTEGER || af
29b0: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
29c0: 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20 20  FF_REAL.        
29d0: 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74 79       || affinity
29e0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
29f0: 45 52 49 43 20 29 3b 0a 20 20 20 20 61 70 70 6c  ERIC );.    appl
2a00: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2a10: 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28 20  (pRec);.    if( 
2a20: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2a30: 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20 20  M_Real ){.      
2a40: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67  sqlite3VdbeInteg
2a50: 65 72 41 66 66 69 6e 69 74 79 28 70 52 65 63 29  erAffinity(pRec)
2a60: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f  ;.    }.  }.}../
2a70: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2a80: 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ert the type of 
2a90: 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  a function argum
2aa0: 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20  ent or a result 
2ab0: 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61  column.** into a
2ac0: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2ad0: 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69  ntation.  Use ei
2ae0: 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20  ther INTEGER or 
2af0: 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a  REAL whichever.*
2b00: 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  * is appropriate
2b10: 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74  .  But only do t
2b20: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66  he conversion if
2b30: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2b40: 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20  without.** loss 
2b50: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  of information a
2b60: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65  nd return the re
2b70: 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68  vised type of th
2b80: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a  e argument..**.*
2b90: 2a 20 54 68 69 73 20 69 73 20 61 6e 20 45 58 50  * This is an EXP
2ba0: 45 52 49 4d 45 4e 54 41 4c 20 61 70 69 20 61 6e  ERIMENTAL api an
2bb0: 64 20 69 73 20 73 75 62 6a 65 63 74 20 74 6f 20  d is subject to 
2bc0: 63 68 61 6e 67 65 20 6f 72 20 72 65 6d 6f 76 61  change or remova
2bd0: 6c 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  l..*/.int sqlite
2be0: 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f  3_value_numeric_
2bf0: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  type(sqlite3_val
2c00: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d  ue *pVal){.  Mem
2c10: 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70   *pMem = (Mem*)p
2c20: 56 61 6c 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65  Val;.  applyNume
2c30: 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65 6d  ricAffinity(pMem
2c40: 29 3b 0a 20 20 73 74 6f 72 65 54 79 70 65 49 6e  );.  storeTypeIn
2c50: 66 6f 28 70 4d 65 6d 2c 20 30 29 3b 0a 20 20 72  fo(pMem, 0);.  r
2c60: 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65  eturn pMem->type
2c70: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
2c80: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
2c90: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
2ca0: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
2cb0: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
2cc0: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
2cd0: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
2ce0: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
2cf0: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
2d00: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
2d10: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
2d20: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
2d30: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
2d40: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
2d50: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
2d60: 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  enc);.}..#ifdef 
2d70: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
2d80: 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20  ** Write a nice 
2d90: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
2da0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e  ation of the con
2db0: 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d  tents of cell pM
2dc0: 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65  em.** into buffe
2dd0: 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e  r zBuf, length n
2de0: 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  Buf..*/.void sql
2df0: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
2e00: 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d  yPrint(Mem *pMem
2e10: 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20  , char *zBuf){. 
2e20: 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42   char *zCsr = zB
2e30: 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d  uf;.  int f = pM
2e40: 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74  em->flags;..  st
2e50: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
2e60: 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b  *const encnames[
2e70: 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29  ] = {"(X)", "(8)
2e80: 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31  ", "(16LE)", "(1
2e90: 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66  6BE)"};..  if( f
2ea0: 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20  &MEM_Blob ){.   
2eb0: 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72   int i;.    char
2ec0: 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20   c;.    if( f & 
2ed0: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20  MEM_Dyn ){.     
2ee0: 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20   c = 'z';.      
2ef0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2f00: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
2f10: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
2f20: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
2f30: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
2f40: 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20   c = 't';.      
2f50: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2f60: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
2f70: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
2f80: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
2f90: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  hem ){.      c =
2fa0: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
2fb0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
2fc0: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
2fd0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
2fe0: 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20        c = 's';. 
2ff0: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
3000: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3010: 7a 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a  zCsr, "%c", c);.
3020: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 74 72 6c      zCsr += strl
3030: 65 6e 28 7a 43 73 72 29 3b 0a 20 20 20 20 73 71  en(zCsr);.    sq
3040: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3050: 30 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c  00, zCsr, "%d[",
3060: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a   pMem->n);.    z
3070: 43 73 72 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 43  Csr += strlen(zC
3080: 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  sr);.    for(i=0
3090: 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d  ; i<16 && i<pMem
30a0: 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ->n; i++){.     
30b0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
30c0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30  f(100, zCsr, "%0
30d0: 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d  2X", ((int)pMem-
30e0: 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a  >z[i] & 0xFF));.
30f0: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 74        zCsr += st
3100: 72 6c 65 6e 28 7a 43 73 72 29 3b 0a 20 20 20 20  rlen(zCsr);.    
3110: 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  }.    for(i=0; i
3120: 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e  <16 && i<pMem->n
3130: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68  ; i++){.      ch
3140: 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69  ar z = pMem->z[i
3150: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33  ];.      if( z<3
3160: 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43  2 || z>126 ) *zC
3170: 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20  sr++ = '.';.    
3180: 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d    else *zCsr++ =
3190: 20 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73   z;.    }..    s
31a0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
31b0: 31 30 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22  100, zCsr, "]%s"
31c0: 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d  , encnames[pMem-
31d0: 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72  >enc]);.    zCsr
31e0: 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 43 73 72 29   += strlen(zCsr)
31f0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
3200: 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
3210: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
3220: 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 6c 6c  (100, zCsr,"+%ll
3230: 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 69 29 3b 0a  dz",pMem->u.i);.
3240: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 74        zCsr += st
3250: 72 6c 65 6e 28 7a 43 73 72 29 3b 0a 20 20 20 20  rlen(zCsr);.    
3260: 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c  }.    *zCsr = '\
3270: 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  0';.  }else if( 
3280: 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  f & MEM_Str ){. 
3290: 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20     int j, k;.   
32a0: 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a   zBuf[0] = ' ';.
32b0: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
32c0: 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75  Dyn ){.      zBu
32d0: 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20  f[1] = 'z';.    
32e0: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
32f0: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45  MEM_Static|MEM_E
3300: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
3310: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
3320: 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20  EM_Static ){.   
3330: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27     zBuf[1] = 't'
3340: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3350: 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45  (f & (MEM_Dyn|ME
3360: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
3370: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
3380: 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20  & MEM_Ephem ){. 
3390: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
33a0: 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e';.      assert
33b0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
33c0: 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20  ic|MEM_Dyn))==0 
33d0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
33e0: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73      zBuf[1] = 's
33f0: 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d  ';.    }.    k =
3400: 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   2;.    sqlite3_
3410: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a  snprintf(100, &z
3420: 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d  Buf[k], "%d", pM
3430: 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d  em->n);.    k +=
3440: 20 73 74 72 6c 65 6e 28 26 7a 42 75 66 5b 6b 5d   strlen(&zBuf[k]
3450: 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d  );.    zBuf[k++]
3460: 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28   = '[';.    for(
3470: 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70  j=0; j<15 && j<p
3480: 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20  Mem->n; j++){.  
3490: 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d      u8 c = pMem-
34a0: 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28  >z[j];.      if(
34b0: 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30 78   c>=0x20 && c<0x
34c0: 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 42  7f ){.        zB
34d0: 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20  uf[k++] = c;.   
34e0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
34f0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e    zBuf[k++] = '.
3500: 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ';.      }.    }
3510: 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d  .    zBuf[k++] =
3520: 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74 65   ']';.    sqlite
3530: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 26  3_snprintf(100,&
3540: 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65  zBuf[k], encname
3550: 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20  s[pMem->enc]);. 
3560: 20 20 20 6b 20 2b 3d 20 73 74 72 6c 65 6e 28 26     k += strlen(&
3570: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3580: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
3590: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
35a0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
35b0: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
35c0: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
35d0: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
35e0: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
35f0: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
3600: 50 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75 74 2c  Print(FILE *out,
3610: 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20   Mem *p){.  if( 
3620: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  p->flags & MEM_N
3630: 75 6c 6c 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  ull ){.    fprin
3640: 74 66 28 6f 75 74 2c 20 22 20 4e 55 4c 4c 22 29  tf(out, " NULL")
3650: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70  ;.  }else if( (p
3660: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
3670: 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d  nt|MEM_Str))==(M
3680: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20  EM_Int|MEM_Str) 
3690: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
36a0: 75 74 2c 20 22 20 73 69 3a 25 6c 6c 64 22 2c 20  ut, " si:%lld", 
36b0: 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65  p->u.i);.  }else
36c0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
36d0: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 66  MEM_Int ){.    f
36e0: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 69 3a  printf(out, " i:
36f0: 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a  %lld", p->u.i);.
3700: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3710: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
3720: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
3730: 75 74 2c 20 22 20 72 3a 25 67 22 2c 20 70 2d 3e  ut, " r:%g", p->
3740: 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  r);.  }else{.   
3750: 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b   char zBuf[200];
3760: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
3770: 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70  MemPrettyPrint(p
3780: 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 66 70 72  , zBuf);.    fpr
3790: 69 6e 74 66 28 6f 75 74 2c 20 22 20 22 29 3b 0a  intf(out, " ");.
37a0: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
37b0: 20 22 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20   "%s", zBuf);.  
37c0: 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  }.}.static void 
37d0: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 46 49  registerTrace(FI
37e0: 4c 45 20 2a 6f 75 74 2c 20 69 6e 74 20 69 52 65  LE *out, int iRe
37f0: 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 66 70  g, Mem *p){.  fp
3800: 72 69 6e 74 66 28 6f 75 74 2c 20 22 52 45 47 5b  rintf(out, "REG[
3810: 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a  %d] = ", iReg);.
3820: 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28    memTracePrint(
3830: 6f 75 74 2c 20 70 29 3b 0a 20 20 66 70 72 69 6e  out, p);.  fprin
3840: 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 7d  tf(out, "\n");.}
3850: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
3860: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20  SQLITE_DEBUG.#  
3870: 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f  define REGISTER_
3880: 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 70 2d  TRACE(R,M) if(p-
3890: 3e 74 72 61 63 65 29 72 65 67 69 73 74 65 72 54  >trace)registerT
38a0: 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 52 2c  race(p->trace,R,
38b0: 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  M).#else.#  defi
38c0: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
38d0: 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a  E(R,M).#endif...
38e0: 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
38f0: 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69  ILE../* .** hwti
3900: 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e  me.h contains in
3910: 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63  line assembler c
3920: 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e  ode for implemen
3930: 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65  ting .** high-pe
3940: 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67  rformance timing
3950: 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69   routines..*/.#i
3960: 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68  nclude "hwtime.h
3970: 22 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  "..#endif../*.**
3980: 20 54 68 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49   The CHECK_FOR_I
3990: 4e 54 45 52 52 55 50 54 20 6d 61 63 72 6f 20 64  NTERRUPT macro d
39a0: 65 66 69 6e 65 64 20 68 65 72 65 20 6c 6f 6f 6b  efined here look
39b0: 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 0a  s to see if the.
39c0: 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  ** sqlite3_inter
39d0: 72 75 70 74 28 29 20 72 6f 75 74 69 6e 65 20 68  rupt() routine h
39e0: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 2e 20  as been called. 
39f0: 20 49 66 20 69 74 20 68 61 73 20 62 65 65 6e 2c   If it has been,
3a00: 20 74 68 65 6e 0a 2a 2a 20 70 72 6f 63 65 73 73   then.** process
3a10: 69 6e 67 20 6f 66 20 74 68 65 20 56 44 42 45 20  ing of the VDBE 
3a20: 70 72 6f 67 72 61 6d 20 69 73 20 69 6e 74 65 72  program is inter
3a30: 72 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  rupted..**.** Th
3a40: 69 73 20 6d 61 63 72 6f 20 61 64 64 65 64 20 74  is macro added t
3a50: 6f 20 65 76 65 72 79 20 69 6e 73 74 72 75 63 74  o every instruct
3a60: 69 6f 6e 20 74 68 61 74 20 64 6f 65 73 20 61 20  ion that does a 
3a70: 6a 75 6d 70 20 69 6e 20 6f 72 64 65 72 20 74 6f  jump in order to
3a80: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20  .** implement a 
3a90: 6c 6f 6f 70 2e 20 20 54 68 69 73 20 74 65 73 74  loop.  This test
3aa0: 20 75 73 65 64 20 74 6f 20 62 65 20 6f 6e 20 65   used to be on e
3ab0: 76 65 72 79 20 73 69 6e 67 6c 65 20 69 6e 73 74  very single inst
3ac0: 72 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62 75 74 20  ruction,.** but 
3ad0: 74 68 61 74 20 6d 65 61 6e 74 20 77 65 20 6d 6f  that meant we mo
3ae0: 72 65 20 74 65 73 74 69 6e 67 20 74 68 61 74 20  re testing that 
3af0: 77 65 20 6e 65 65 64 65 64 2e 20 20 42 79 20 6f  we needed.  By o
3b00: 6e 6c 79 20 74 65 73 74 69 6e 67 20 74 68 65 0a  nly testing the.
3b10: 2a 2a 20 66 6c 61 67 20 6f 6e 20 6a 75 6d 70 20  ** flag on jump 
3b20: 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c 20 77 65  instructions, we
3b30: 20 67 65 74 20 61 20 28 73 6d 61 6c 6c 29 20 73   get a (small) s
3b40: 70 65 65 64 20 69 6d 70 72 6f 76 65 6d 65 6e 74  peed improvement
3b50: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 48 45  ..*/.#define CHE
3b60: 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54  CK_FOR_INTERRUPT
3b70: 20 5c 0a 20 20 20 69 66 28 20 64 62 2d 3e 75 31   \.   if( db->u1
3b80: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
3b90: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
3ba0: 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 0a 23  to_interrupt;..#
3bb0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3bc0: 55 47 0a 73 74 61 74 69 63 20 69 6e 74 20 66 69  UG.static int fi
3bd0: 6c 65 45 78 69 73 74 73 28 73 71 6c 69 74 65 33  leExists(sqlite3
3be0: 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72   *db, const char
3bf0: 20 2a 7a 46 69 6c 65 29 7b 0a 20 20 69 6e 74 20   *zFile){.  int 
3c00: 72 65 73 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72  res = 0;.  int r
3c10: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23  c = SQLITE_OK;.#
3c20: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
3c30: 54 0a 20 20 2f 2a 20 49 66 20 77 65 20 61 72 65  T.  /* If we are
3c40: 20 63 75 72 72 65 6e 74 6c 79 20 74 65 73 74 69   currently testi
3c50: 6e 67 20 49 4f 20 65 72 72 6f 72 73 2c 20 74 68  ng IO errors, th
3c60: 65 6e 20 64 6f 20 6e 6f 74 20 63 61 6c 6c 20 4f  en do not call O
3c70: 73 41 63 63 65 73 73 28 29 20 74 6f 0a 20 20 2a  sAccess() to.  *
3c80: 2a 20 74 65 73 74 20 66 6f 72 20 74 68 65 20 70  * test for the p
3c90: 72 65 73 65 6e 63 65 20 6f 66 20 7a 46 69 6c 65  resence of zFile
3ca0: 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73  . This is becaus
3cb0: 65 20 61 6e 79 20 49 4f 20 65 72 72 6f 72 20 74  e any IO error t
3cc0: 68 61 74 0a 20 20 2a 2a 20 6f 63 63 75 72 73 20  hat.  ** occurs 
3cd0: 68 65 72 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  here will not be
3ce0: 20 72 65 70 6f 72 74 65 64 2c 20 63 61 75 73 69   reported, causi
3cf0: 6e 67 20 74 68 65 20 74 65 73 74 20 74 6f 20 66  ng the test to f
3d00: 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 65 78 74 65  ail..  */.  exte
3d10: 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 69  rn int sqlite3_i
3d20: 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69 6e 67 3b  o_error_pending;
3d30: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69  .  if( sqlite3_i
3d40: 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69 6e 67 3c  o_error_pending<
3d50: 3d 30 20 29 0a 23 65 6e 64 69 66 0a 20 20 20 20  =0 ).#endif.    
3d60: 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63  rc = sqlite3OsAc
3d70: 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a  cess(db->pVfs, z
3d80: 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 41 43 43  File, SQLITE_ACC
3d90: 45 53 53 5f 45 58 49 53 54 53 2c 20 26 72 65 73  ESS_EXISTS, &res
3da0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 72 65 73  );.  return (res
3db0: 20 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   && rc==SQLITE_O
3dc0: 4b 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  K);.}.#endif../*
3dd0: 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d  .** Execute as m
3de0: 75 63 68 20 6f 66 20 61 20 56 44 42 45 20 70 72  uch of a VDBE pr
3df0: 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61 6e 20  ogram as we can 
3e00: 74 68 65 6e 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a  then return..**.
3e10: 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61  ** sqlite3VdbeMa
3e20: 6b 65 52 65 61 64 79 28 29 20 6d 75 73 74 20 62  keReady() must b
3e30: 65 20 63 61 6c 6c 65 64 20 62 65 66 6f 72 65 20  e called before 
3e40: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 20  this routine in 
3e50: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73  order to.** clos
3e60: 65 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69  e the program wi
3e70: 74 68 20 61 20 66 69 6e 61 6c 20 4f 50 5f 48 61  th a final OP_Ha
3e80: 6c 74 20 61 6e 64 20 74 6f 20 73 65 74 20 75 70  lt and to set up
3e90: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 73 0a 2a   the callbacks.*
3ea0: 2a 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20  * and the error 
3eb0: 6d 65 73 73 61 67 65 20 70 6f 69 6e 74 65 72 2e  message pointer.
3ec0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20  .**.** Whenever 
3ed0: 61 20 72 6f 77 20 6f 72 20 72 65 73 75 6c 74 20  a row or result 
3ee0: 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c  data is availabl
3ef0: 65 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  e, this routine 
3f00: 77 69 6c 6c 20 65 69 74 68 65 72 0a 2a 2a 20 69  will either.** i
3f10: 6e 76 6f 6b 65 20 74 68 65 20 72 65 73 75 6c 74  nvoke the result
3f20: 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68   callback (if th
3f30: 65 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 72  ere is one) or r
3f40: 65 74 75 72 6e 20 77 69 74 68 0a 2a 2a 20 53 51  eturn with.** SQ
3f50: 4c 49 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20  LITE_ROW..**.** 
3f60: 49 66 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73  If an attempt is
3f70: 20 6d 61 64 65 20 74 6f 20 6f 70 65 6e 20 61 20   made to open a 
3f80: 6c 6f 63 6b 65 64 20 64 61 74 61 62 61 73 65 2c  locked database,
3f90: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
3fa0: 6e 65 0a 2a 2a 20 77 69 6c 6c 20 65 69 74 68 65  ne.** will eithe
3fb0: 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 62 75 73  r invoke the bus
3fc0: 79 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74  y callback (if t
3fd0: 68 65 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20  here is one) or 
3fe0: 69 74 20 77 69 6c 6c 0a 2a 2a 20 72 65 74 75 72  it will.** retur
3ff0: 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 2e 0a 2a  n SQLITE_BUSY..*
4000: 2a 0a 2a 2a 20 49 66 20 61 6e 20 65 72 72 6f 72  *.** If an error
4010: 20 6f 63 63 75 72 73 2c 20 61 6e 20 65 72 72 6f   occurs, an erro
4020: 72 20 6d 65 73 73 61 67 65 20 69 73 20 77 72 69  r message is wri
4030: 74 74 65 6e 20 74 6f 20 6d 65 6d 6f 72 79 20 6f  tten to memory o
4040: 62 74 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20  btained.** from 
4050: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29  sqlite3_malloc()
4060: 20 61 6e 64 20 70 2d 3e 7a 45 72 72 4d 73 67 20   and p->zErrMsg 
4070: 69 73 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74  is made to point
4080: 20 74 6f 20 74 68 61 74 20 6d 65 6d 6f 72 79 2e   to that memory.
4090: 0a 2a 2a 20 54 68 65 20 65 72 72 6f 72 20 63 6f  .** The error co
40a0: 64 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  de is stored in 
40b0: 70 2d 3e 72 63 20 61 6e 64 20 74 68 69 73 20 72  p->rc and this r
40c0: 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 53  outine returns S
40d0: 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a  QLITE_ERROR..**.
40e0: 2a 2a 20 49 66 20 74 68 65 20 63 61 6c 6c 62 61  ** If the callba
40f0: 63 6b 20 65 76 65 72 20 72 65 74 75 72 6e 73 20  ck ever returns 
4100: 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
4110: 68 65 20 70 72 6f 67 72 61 6d 20 65 78 69 74 73  he program exits
4120: 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  .** immediately.
4130: 20 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20    There will be 
4140: 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  no error message
4150: 20 62 75 74 20 74 68 65 20 70 2d 3e 72 63 20 66   but the p->rc f
4160: 69 65 6c 64 20 69 73 0a 2a 2a 20 73 65 74 20 74  ield is.** set t
4170: 6f 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 20 61  o SQLITE_ABORT a
4180: 6e 64 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  nd this routine 
4190: 77 69 6c 6c 20 72 65 74 75 72 6e 20 53 51 4c 49  will return SQLI
41a0: 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20  TE_ERROR..**.** 
41b0: 41 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  A memory allocat
41c0: 69 6f 6e 20 65 72 72 6f 72 20 63 61 75 73 65 73  ion error causes
41d0: 20 70 2d 3e 72 63 20 74 6f 20 62 65 20 73 65 74   p->rc to be set
41e0: 20 74 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d   to SQLITE_NOMEM
41f0: 20 61 6e 64 20 74 68 69 73 0a 2a 2a 20 72 6f 75   and this.** rou
4200: 74 69 6e 65 20 74 6f 20 72 65 74 75 72 6e 20 53  tine to return S
4210: 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a  QLITE_ERROR..**.
4220: 2a 2a 20 4f 74 68 65 72 20 66 61 74 61 6c 20 65  ** Other fatal e
4230: 72 72 6f 72 73 20 72 65 74 75 72 6e 20 53 51 4c  rrors return SQL
4240: 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a  ITE_ERROR..**.**
4250: 20 41 66 74 65 72 20 74 68 69 73 20 72 6f 75 74   After this rout
4260: 69 6e 65 20 68 61 73 20 66 69 6e 69 73 68 65 64  ine has finished
4270: 2c 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e  , sqlite3VdbeFin
4280: 61 6c 69 7a 65 28 29 20 73 68 6f 75 6c 64 20 62  alize() should b
4290: 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6c 65  e.** used to cle
42a0: 61 6e 20 75 70 20 74 68 65 20 6d 65 73 73 20 74  an up the mess t
42b0: 68 61 74 20 77 61 73 20 6c 65 66 74 20 62 65 68  hat was left beh
42c0: 69 6e 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ind..*/.int sqli
42d0: 74 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56  te3VdbeExec(.  V
42e0: 64 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20  dbe *p          
42f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
4300: 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e   VDBE */.){.  in
4310: 74 20 70 63 3b 20 20 20 20 20 20 20 20 20 20 20  t pc;           
4320: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
4330: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
4340: 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20  */.  Op *pOp;   
4350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4360: 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61  /* Current opera
4370: 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63  tion */.  int rc
4380: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20   = SQLITE_OK;   
4390: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
43a0: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c   return */.  sql
43b0: 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62  ite3 *db = p->db
43c0: 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64  ;       /* The d
43d0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20  atabase */.  u8 
43e0: 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64  encoding = ENC(d
43f0: 62 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64  b);     /* The d
4400: 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67  atabase encoding
4410: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 2c   */.  Mem *pIn1,
4420: 20 2a 70 49 6e 32 2c 20 2a 70 49 6e 33 3b 20 20   *pIn2, *pIn3;  
4430: 20 2f 2a 20 49 6e 70 75 74 20 6f 70 65 72 61 6e   /* Input operan
4440: 64 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75  ds */.  Mem *pOu
4450: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
4460: 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65     /* Output ope
4470: 72 61 6e 64 20 2a 2f 0a 20 20 75 38 20 6f 70 50  rand */.  u8 opP
4480: 72 6f 70 65 72 74 79 3b 0a 20 20 69 6e 74 20 69  roperty;.  int i
4490: 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20  Compare = 0;    
44a0: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
44b0: 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61  of last OP_Compa
44c0: 72 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  re operation */.
44d0: 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20    int *aPermute 
44e0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
44f0: 50 65 72 6d 75 61 74 69 6f 6e 20 6f 66 20 63 6f  Permuation of co
4500: 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d  lumns for OP_Com
4510: 70 61 72 65 20 2a 2f 0a 23 69 66 64 65 66 20 56  pare */.#ifdef V
4520: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36  DBE_PROFILE.  u6
4530: 34 20 73 74 61 72 74 3b 20 20 20 20 20 20 20 20  4 start;        
4540: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55 20           /* CPU 
4550: 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20 73  clock count at s
4560: 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a  tart of opcode *
4570: 2f 0a 20 20 69 6e 74 20 6f 72 69 67 50 63 3b 20  /.  int origPc; 
4580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4590: 2a 20 50 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  * Program counte
45a0: 72 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70  r at start of op
45b0: 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  code */.#endif.#
45c0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
45d0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
45e0: 42 41 43 4b 0a 20 20 69 6e 74 20 6e 50 72 6f 67  BACK.  int nProg
45f0: 72 65 73 73 4f 70 73 20 3d 20 30 3b 20 20 20 20  ressOps = 0;    
4600: 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 65 78 65    /* Opcodes exe
4610: 63 75 74 65 64 20 73 69 6e 63 65 20 70 72 6f 67  cuted since prog
4620: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ress callback. *
4630: 2f 0a 23 65 6e 64 69 66 0a 20 20 55 6e 70 61 63  /.#endif.  Unpac
4640: 6b 65 64 52 65 63 6f 72 64 20 61 54 65 6d 70 52  kedRecord aTempR
4650: 65 63 5b 31 36 5d 3b 20 2f 2a 20 53 70 61 63 65  ec[16]; /* Space
4660: 20 74 6f 20 68 6f 6c 64 20 61 20 74 72 61 6e 73   to hold a trans
4670: 69 65 6e 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ient UnpackedRec
4680: 6f 72 64 20 2a 2f 0a 0a 0a 20 20 61 73 73 65 72  ord */...  asser
4690: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
46a0: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
46b0: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
46c0: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
46d0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  */.  assert( db-
46e0: 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d  >magic==SQLITE_M
46f0: 41 47 49 43 5f 42 55 53 59 20 29 3b 0a 20 20 73  AGIC_BUSY );.  s
4700: 71 6c 69 74 65 33 42 74 72 65 65 4d 75 74 65 78  qlite3BtreeMutex
4710: 41 72 72 61 79 45 6e 74 65 72 28 26 70 2d 3e 61  ArrayEnter(&p->a
4720: 4d 75 74 65 78 29 3b 0a 20 20 69 66 28 20 70 2d  Mutex);.  if( p-
4730: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45  >rc==SQLITE_NOME
4740: 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  M ){.    /* This
4750: 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61   happens if a ma
4760: 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20  lloc() inside a 
4770: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f  call to sqlite3_
4780: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72  column_text() or
4790: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  .    ** sqlite3_
47a0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20  column_text16() 
47b0: 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20  failed.  */.    
47c0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
47d0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63  .  assert( p->rc
47e0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70  ==SQLITE_OK || p
47f0: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ->rc==SQLITE_BUS
4800: 59 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53  Y );.  p->rc = S
4810: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65  QLITE_OK;.  asse
4820: 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d  rt( p->explain==
4830: 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c  0 );.  p->pResul
4840: 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e  tSet = 0;.  db->
4850: 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73  busyHandler.nBus
4860: 79 20 3d 20 30 3b 0a 20 20 43 48 45 43 4b 5f 46  y = 0;.  CHECK_F
4870: 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
4880: 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
4890: 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 64 65 66  ceSql(p);.#ifdef
48a0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
48b0: 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
48c0: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66  gnMalloc();.  if
48d0: 28 20 70 2d 3e 70 63 3d 3d 30 20 0a 20 20 20 26  ( p->pc==0 .   &
48e0: 26 20 28 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73  & ((p->db->flags
48f0: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69   & SQLITE_VdbeLi
4900: 73 74 69 6e 67 29 20 7c 7c 20 66 69 6c 65 45 78  sting) || fileEx
4910: 69 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f 65  ists(db, "vdbe_e
4920: 78 70 6c 61 69 6e 22 29 29 0a 20 20 29 7b 0a 20  xplain")).  ){. 
4930: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 72     int i;.    pr
4940: 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67 72  intf("VDBE Progr
4950: 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b  am Listing:\n");
4960: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4970: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4980: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e   for(i=0; i<p->n
4990: 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Op; i++){.      
49a0: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
49b0: 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 70  Op(stdout, i, &p
49c0: 2d 3e 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 7d  ->aOp[i]);.    }
49d0: 0a 20 20 7d 0a 20 20 69 66 28 20 66 69 6c 65 45  .  }.  if( fileE
49e0: 78 69 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f  xists(db, "vdbe_
49f0: 74 72 61 63 65 22 29 20 29 7b 0a 20 20 20 20 70  trace") ){.    p
4a00: 2d 3e 74 72 61 63 65 20 3d 20 73 74 64 6f 75 74  ->trace = stdout
4a10: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45  ;.  }.  sqlite3E
4a20: 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  ndBenignMalloc()
4a30: 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70  ;.#endif.  for(p
4a40: 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c  c=p->pc; rc==SQL
4a50: 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20  ITE_OK; pc++){. 
4a60: 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 30     assert( pc>=0
4a70: 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b   && pc<p->nOp );
4a80: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  .    if( db->mal
4a90: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
4aa0: 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20   no_mem;.#ifdef 
4ab0: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
4ac0: 20 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a 20 20   origPc = pc;.  
4ad0: 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65    start = sqlite
4ae0: 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69  3Hwtime();.#endi
4af0: 66 0a 20 20 20 20 70 4f 70 20 3d 20 26 70 2d 3e  f.    pOp = &p->
4b00: 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a  aOp[pc];..    /*
4b10: 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63   Only allow trac
4b20: 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45  ing if SQLITE_DE
4b30: 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
4b40: 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51      */.#ifdef SQ
4b50: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
4b60: 66 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20  f( p->trace ){. 
4b70: 20 20 20 20 20 69 66 28 20 70 63 3d 3d 30 20 29       if( pc==0 )
4b80: 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66  {.        printf
4b90: 28 22 56 44 42 45 20 45 78 65 63 75 74 69 6f 6e  ("VDBE Execution
4ba0: 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20   Trace:\n");.   
4bb0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4bc0: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4bd0: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
4be0: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 70 2d  e3VdbePrintOp(p-
4bf0: 3e 74 72 61 63 65 2c 20 70 63 2c 20 70 4f 70 29  >trace, pc, pOp)
4c00: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
4c10: 70 2d 3e 74 72 61 63 65 3d 3d 30 20 26 26 20 70  p->trace==0 && p
4c20: 63 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  c==0 ){.      sq
4c30: 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
4c40: 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 20 20 20 20  Malloc();.      
4c50: 69 66 28 20 66 69 6c 65 45 78 69 73 74 73 28 64  if( fileExists(d
4c60: 62 2c 20 22 76 64 62 65 5f 73 71 6c 74 72 61 63  b, "vdbe_sqltrac
4c70: 65 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73  e") ){.        s
4c80: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53  qlite3VdbePrintS
4c90: 71 6c 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ql(p);.      }. 
4ca0: 20 20 20 20 20 73 71 6c 69 74 65 33 45 6e 64 42       sqlite3EndB
4cb0: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20  enignMalloc();. 
4cc0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
4cd0: 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b    ..    /* Check
4ce0: 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65   to see if we ne
4cf0: 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61  ed to simulate a
4d00: 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68  n interrupt.  Th
4d10: 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a  is only happens.
4d20: 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76      ** if we hav
4d30: 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74  e a special test
4d40: 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23   build..    */.#
4d50: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
4d60: 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  T.    if( sqlite
4d70: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
4d80: 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  t>0 ){.      sql
4d90: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
4da0: 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66  ount--;.      if
4db0: 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ( sqlite3_interr
4dc0: 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a  upt_count==0 ){.
4dd0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
4de0: 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20  interrupt(db);. 
4df0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
4e00: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
4e10: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
4e20: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 20 20 2f  S_CALLBACK.    /
4e30: 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72  * Call the progr
4e40: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20  ess callback if 
4e50: 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  it is configured
4e60: 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65   and the require
4e70: 64 20 6e 75 6d 62 65 72 0a 20 20 20 20 2a 2a 20  d number.    ** 
4e80: 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65  of VDBE ops have
4e90: 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28   been executed (
4ea0: 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69  either since thi
4eb0: 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a  s invocation of.
4ec0: 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64      ** sqlite3Vd
4ed0: 62 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63  beExec() or sinc
4ee0: 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20  e last time the 
4ef0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
4f00: 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20  k was called).. 
4f10: 20 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f     ** If the pro
4f20: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72  gress callback r
4f30: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  eturns non-zero,
4f40: 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61   exit the virtua
4f50: 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20  l machine with. 
4f60: 20 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63     ** a return c
4f70: 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  ode SQLITE_ABORT
4f80: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
4f90: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29   db->xProgress )
4fa0: 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  {.      if( db->
4fb0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3d 3d 6e 50  nProgressOps==nP
4fc0: 72 6f 67 72 65 73 73 4f 70 73 20 29 7b 0a 20 20  rogressOps ){.  
4fd0: 20 20 20 20 20 20 69 6e 74 20 70 72 63 3b 0a 20        int prc;. 
4fe0: 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
4ff0: 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
5000: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
5010: 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20  _to_misuse;.    
5020: 20 20 20 20 70 72 63 20 3d 64 62 2d 3e 78 50 72      prc =db->xPr
5030: 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67  ogress(db->pProg
5040: 72 65 73 73 41 72 67 29 3b 0a 20 20 20 20 20 20  ressArg);.      
5050: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
5060: 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f  etyOn(db) ) goto
5070: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
5080: 73 75 73 65 3b 0a 20 20 20 20 20 20 20 20 69 66  suse;.        if
5090: 28 20 70 72 63 21 3d 30 20 29 7b 0a 20 20 20 20  ( prc!=0 ){.    
50a0: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
50b0: 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20  E_INTERRUPT;.   
50c0: 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
50d0: 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20  _error_halt;.   
50e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e       }.        n
50f0: 50 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b  ProgressOps = 0;
5100: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e  .      }.      n
5110: 50 72 6f 67 72 65 73 73 4f 70 73 2b 2b 3b 0a 20  ProgressOps++;. 
5120: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
5130: 20 2f 2a 20 44 6f 20 63 6f 6d 6d 6f 6e 20 73 65   /* Do common se
5140: 74 75 70 20 70 72 6f 63 65 73 73 69 6e 67 20 66  tup processing f
5150: 6f 72 20 61 6e 79 20 6f 70 63 6f 64 65 20 74 68  or any opcode th
5160: 61 74 20 69 73 20 6d 61 72 6b 65 64 0a 20 20 20  at is marked.   
5170: 20 2a 2a 20 77 69 74 68 20 74 68 65 20 22 6f 75   ** with the "ou
5180: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 22 20 74  t2-prerelease" t
5190: 61 67 2e 20 20 53 75 63 68 20 6f 70 63 6f 64 65  ag.  Such opcode
51a0: 73 20 68 61 76 65 20 61 20 73 69 6e 67 6c 65 0a  s have a single.
51b0: 20 20 20 20 2a 2a 20 6f 75 74 70 75 74 20 77 68      ** output wh
51c0: 69 63 68 20 69 73 20 73 70 65 63 69 66 69 65 64  ich is specified
51d0: 20 62 79 20 74 68 65 20 50 32 20 70 61 72 61 6d   by the P2 param
51e0: 65 74 65 72 2e 20 20 54 68 65 20 50 32 20 72 65  eter.  The P2 re
51f0: 67 69 73 74 65 72 0a 20 20 20 20 2a 2a 20 69 73  gister.    ** is
5200: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
5210: 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20  a NULL..    */. 
5220: 20 20 20 6f 70 50 72 6f 70 65 72 74 79 20 3d 20     opProperty = 
5230: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70  opcodeProperty[p
5240: 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20 20  Op->opcode];.   
5250: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
5260: 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52   & OPFLG_OUT2_PR
5270: 45 52 45 4c 45 41 53 45 29 21 3d 30 20 29 7b 0a  ERELEASE)!=0 ){.
5280: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5290: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
52a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
52b0: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
52c0: 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d     pOut = &p->aM
52d0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
52e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
52f0: 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61 6c  mReleaseExternal
5300: 28 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 70 4f  (pOut);.      pO
5310: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
5320: 4e 75 6c 6c 3b 0a 20 20 20 20 7d 65 6c 73 65 0a  Null;.    }else.
5330: 20 0a 20 20 20 20 2f 2a 20 44 6f 20 63 6f 6d 6d   .    /* Do comm
5340: 6f 6e 20 73 65 74 75 70 20 66 6f 72 20 6f 70 63  on setup for opc
5350: 6f 64 65 73 20 6d 61 72 6b 65 64 20 77 69 74 68  odes marked with
5360: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
5370: 6f 77 69 6e 67 0a 20 20 20 20 2a 2a 20 63 6f 6d  owing.    ** com
5380: 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20 70 72 6f  binations of pro
5390: 70 65 72 74 69 65 73 2e 0a 20 20 20 20 2a 2a 0a  perties..    **.
53a0: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
53b0: 20 69 6e 31 0a 20 20 20 20 2a 2a 20 20 20 20 20   in1.    **     
53c0: 20 20 20 20 20 20 69 6e 31 20 69 6e 32 0a 20 20        in1 in2.  
53d0: 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 69    **           i
53e0: 6e 31 20 69 6e 32 20 6f 75 74 33 0a 20 20 20 20  n1 in2 out3.    
53f0: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 69 6e 31  **           in1
5400: 20 69 6e 33 0a 20 20 20 20 2a 2a 0a 20 20 20 20   in3.    **.    
5410: 2a 2a 20 56 61 72 69 61 62 6c 65 73 20 70 49 6e  ** Variables pIn
5420: 31 2c 20 70 49 6e 32 2c 20 61 6e 64 20 70 49 6e  1, pIn2, and pIn
5430: 33 20 61 72 65 20 6d 61 64 65 20 74 6f 20 70 6f  3 are made to po
5440: 69 6e 74 20 74 6f 20 61 70 70 72 6f 70 72 69 61  int to appropria
5450: 74 65 0a 20 20 20 20 2a 2a 20 72 65 67 69 73 74  te.    ** regist
5460: 65 72 73 20 66 6f 72 20 69 6e 70 75 74 73 2e 20  ers for inputs. 
5470: 20 56 61 72 69 61 62 6c 65 20 70 4f 75 74 20 70   Variable pOut p
5480: 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6f 75 74  oints to the out
5490: 70 75 74 20 72 65 67 69 73 74 65 72 2e 0a 20 20  put register..  
54a0: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 6f 70    */.    if( (op
54b0: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
54c0: 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN1)!=0 ){.    
54d0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
54e0: 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  1>0 );.      ass
54f0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  ert( pOp->p1<=p-
5500: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 70  >nMem );.      p
5510: 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  In1 = &p->aMem[p
5520: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 20 20 20 20 52  Op->p1];.      R
5530: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5540: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
5550: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
5560: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29  rty & OPFLG_IN2)
5570: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5580: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
5590: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
55a0: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e  rt( pOp->p2<=p->
55b0: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20  nMem );.        
55c0: 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIn2 = &p->aMem[
55d0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20  pOp->p2];.      
55e0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
55f0: 28 70 4f 70 2d 3e 70 32 2c 20 70 49 6e 32 29 3b  (pOp->p2, pIn2);
5600: 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 70  .        if( (op
5610: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
5620: 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT3)!=0 ){.   
5630: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5640: 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
5650: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5660: 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
5670: 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4f 75 74  ;.          pOut
5680: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
5690: 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  >p3];.        }.
56a0: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
56b0: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
56c0: 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20  FLG_IN3)!=0 ){. 
56d0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
56e0: 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
56f0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5700: 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
5710: 20 20 20 20 20 20 20 20 70 49 6e 33 20 3d 20 26          pIn3 = &
5720: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
5730: 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ;.        REGIST
5740: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
5750: 2c 20 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 7d  , pIn3);.      }
5760: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28  .    }else if( (
5770: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5780: 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20  LG_IN2)!=0 ){.  
5790: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
57a0: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
57b0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
57c0: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
57d0: 20 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIn2 = &p->aMem
57e0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20  [pOp->p2];.     
57f0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5800: 70 4f 70 2d 3e 70 32 2c 20 70 49 6e 32 29 3b 0a  pOp->p2, pIn2);.
5810: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 6f      }else if( (o
5820: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
5830: 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN3)!=0 ){.   
5840: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5850: 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p3>0 );.      as
5860: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
5870: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
5880: 70 49 6e 33 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIn3 = &p->aMem[
5890: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
58a0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
58b0: 4f 70 2d 3e 70 33 2c 20 70 49 6e 33 29 3b 0a 20  Op->p3, pIn3);. 
58c0: 20 20 20 7d 0a 0a 20 20 20 20 73 77 69 74 63 68     }..    switch
58d0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
58e0: 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
58f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5900: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5910: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5920: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5930: 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73  .** What follows
5940: 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77   is a massive sw
5950: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
5960: 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69  here each case i
5970: 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73  mplements a.** s
5980: 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74  eparate instruct
5990: 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75  ion in the virtu
59a0: 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20  al machine.  If 
59b0: 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73  we follow the us
59c0: 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69  ual.** indentati
59d0: 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20  on conventions, 
59e0: 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64  each case should
59f0: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20   be indented by 
5a00: 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a  6 spaces.  But.*
5a10: 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20  * that is a lot 
5a20: 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20  of wasted space 
5a30: 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67  on the left marg
5a40: 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65  in.  So the code
5a50: 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73   within.** the s
5a60: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5a70: 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20  will break with 
5a80: 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62  convention and b
5a90: 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e  e flush-left. An
5aa0: 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d  other.** big com
5ab0: 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f  ment (similar to
5ac0: 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20   this one) will 
5ad0: 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69  mark the point i
5ae0: 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65  n the code where
5af0: 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f  .** we transitio
5b00: 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c  n back to normal
5b10: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a   indentation..**
5b20: 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69  .** The formatti
5b30: 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20  ng of each case 
5b40: 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54  is important.  T
5b50: 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20  he makefile for 
5b60: 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61  SQLite.** genera
5b70: 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20  tes two C files 
5b80: 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20  "opcodes.h" and 
5b90: 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73  "opcodes.c" by s
5ba0: 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20  canning this.** 
5bb0: 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  file looking for
5bc0: 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69   lines that begi
5bd0: 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f  n with "case OP_
5be0: 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e  ".  The opcodes.
5bf0: 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20  h files.** will 
5c00: 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23  be filled with #
5c10: 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76  defines that giv
5c20: 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  e unique integer
5c30: 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a   values to each.
5c40: 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68  ** opcode and th
5c50: 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65  e opcodes.c file
5c60: 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20   is filled with 
5c70: 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  an array of stri
5c80: 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63  ngs where.** eac
5c90: 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20  h string is the 
5ca0: 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f  symbolic name fo
5cb0: 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  r the correspond
5cc0: 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20  ing opcode.  If 
5cd0: 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74  the.** case stat
5ce0: 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65  ement is followe
5cf0: 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f  d by a comment o
5d00: 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73  f the form "/# s
5d10: 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a  ame as ... #/".*
5d20: 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69  * that comment i
5d30: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
5d40: 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c  ine the particul
5d50: 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ar value of the 
5d60: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74  opcode..**.** Ot
5d70: 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  her keywords in 
5d80: 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74  the comment that
5d90: 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61   follows each ca
5da0: 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  se are used to.*
5db0: 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  * construct the 
5dc0: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
5dd0: 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69  R value that ini
5de0: 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50  tializes opcodeP
5df0: 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65  roperty[]..** Ke
5e00: 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20  ywords include: 
5e10: 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f  in1, in2, in3, o
5e20: 75 74 32 5f 70 72 65 72 65 6c 65 61 73 65 2c 20  ut2_prerelease, 
5e30: 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65  out2, out3.  See
5e40: 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65  .** the mkopcode
5e50: 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72  h.awk script for
5e60: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
5e70: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44  rmation..**.** D
5e80: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f  ocumentation abo
5e90: 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20  ut VDBE opcodes 
5ea0: 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  is generated by 
5eb0: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69  scanning this fi
5ec0: 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20  le.** for lines 
5ed0: 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20  of that contain 
5ee0: 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74  "Opcode:".  That
5ef0: 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75   line and all su
5f00: 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d  bsequent.** comm
5f10: 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73  ent lines are us
5f20: 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
5f30: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f  tion of the opco
5f40: 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74  de.html document
5f50: 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  ation.** file..*
5f60: 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a  *.** SUMMARY:.**
5f70: 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69  .**     Formatti
5f80: 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  ng is important 
5f90: 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20  to scripts that 
5fa0: 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a  scan this file..
5fb0: 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65  **     Do not de
5fc0: 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66  viate from the f
5fd0: 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20  ormatting style 
5fe0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
5ff0: 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**.***********
6000: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6040: 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  **/../* Opcode: 
6050: 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a   Goto * P2 * * *
6060: 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64  .**.** An uncond
6070: 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20  itional jump to 
6080: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54  address P2..** T
6090: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
60a0: 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c  ion executed wil
60b0: 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65  l be .** the one
60c0: 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f   at index P2 fro
60d0: 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
60e0: 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61  of.** the progra
60f0: 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  m..*/.case OP_Go
6100: 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  to: {           
6110: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 43    /* jump */.  C
6120: 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
6130: 50 54 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e  PT;.  pc = pOp->
6140: 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b  p2 - 1;.  break;
6150: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6160: 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20  Gosub P1 P2 * * 
6170: 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
6180: 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73  e current addres
6190: 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20  s onto register 
61a0: 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a  P1.** and then j
61b0: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
61c0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  2..*/.case OP_Go
61d0: 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  sub: {          
61e0: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
61f0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
6200: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
6210: 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p1<=p->nMem )
6220: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61  ;.  pIn1 = &p->a
6230: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6240: 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66  assert( (pIn1->f
6250: 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d  lags & MEM_Dyn)=
6260: 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  =0 );.  pIn1->fl
6270: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6280: 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b   pIn1->u.i = pc;
6290: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
62a0: 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29  E(pOp->p1, pIn1)
62b0: 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  ;.  pc = pOp->p2
62c0: 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   - 1;.  break;.}
62d0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65  ../* Opcode:  Re
62e0: 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  turn P1 * * * *.
62f0: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  **.** Jump to th
6300: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
6310: 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64 64  on after the add
6320: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
6330: 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
6340: 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20  Return: {       
6350: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
6360: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6370: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
6380: 0a 20 20 70 63 20 3d 20 70 49 6e 31 2d 3e 75 2e  .  pc = pIn1->u.
6390: 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  i;.  break;.}../
63a0: 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64  * Opcode:  Yield
63b0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
63c0: 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f 67 72  * Swap the progr
63d0: 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20  am counter with 
63e0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
63f0: 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ister P1..*/.cas
6400: 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 0a 20 20  e OP_Yield: {.  
6410: 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 61 73  int pcDest;.  as
6420: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
6430: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
6440: 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p1<=p->nMem );
6450: 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d  .  pIn1 = &p->aM
6460: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
6470: 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c  ssert( (pIn1->fl
6480: 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d  ags & MEM_Dyn)==
6490: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
64a0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
64b0: 70 63 44 65 73 74 20 3d 20 70 49 6e 31 2d 3e 75  pcDest = pIn1->u
64c0: 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  .i;.  pIn1->u.i 
64d0: 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52  = pc;.  REGISTER
64e0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
64f0: 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 63  pIn1);.  pc = pc
6500: 44 65 73 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Dest;.  break;.}
6510: 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48  .../* Opcode:  H
6520: 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 2a  alt P1 P2 * P4 *
6530: 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65  .**.** Exit imme
6540: 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70  diately.  All op
6550: 65 6e 20 63 75 72 73 6f 72 73 2c 20 46 69 66 6f  en cursors, Fifo
6560: 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65  s, etc are close
6570: 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c  d.** automatical
6580: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ly..**.** P1 is 
6590: 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20  the result code 
65a0: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
65b0: 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69  te3_exec(), sqli
65c0: 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20  te3_reset(),.** 
65d0: 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  or sqlite3_final
65e0: 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f  ize().  For a no
65f0: 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20  rmal halt, this 
6600: 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45  should be SQLITE
6610: 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20  _OK (0)..** For 
6620: 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62  errors, it can b
6630: 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c  e some other val
6640: 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68  ue.  If P1!=0 th
6650: 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72  en P2 will deter
6660: 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20  mine.** whether 
6670: 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61  or not to rollba
6680: 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ck the current t
6690: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20  ransaction.  Do 
66a0: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20  not rollback.** 
66b0: 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20  if P2==OE_Fail. 
66c0: 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20  Do the rollback 
66d0: 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61  if P2==OE_Rollba
66e0: 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41  ck.  If P2==OE_A
66f0: 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61  bort,.** then ba
6700: 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67  ck out all chang
6710: 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63  es that have occ
6720: 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68 69  urred during thi
6730: 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74  s execution of t
6740: 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20  he.** VDBE, but 
6750: 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  do not rollback 
6760: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  the transaction.
6770: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73   .**.** If P4 is
6780: 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69   not null then i
6790: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65  t is an error me
67a0: 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a  ssage string..**
67b0: 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20  .** There is an 
67c0: 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20  implied "Halt 0 
67d0: 30 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e  0 0" instruction
67e0: 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65   inserted at the
67f0: 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20   very end of.** 
6800: 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20  every program.  
6810: 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74  So a jump past t
6820: 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74  he last instruct
6830: 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72  ion of the progr
6840: 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d  am.** is the sam
6850: 65 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48  e as executing H
6860: 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
6870: 48 61 6c 74 3a 20 7b 0a 20 20 70 2d 3e 72 63 20  Halt: {.  p->rc 
6880: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e  = pOp->p1;.  p->
6890: 70 63 20 3d 20 70 63 3b 0a 20 20 70 2d 3e 65 72  pc = pc;.  p->er
68a0: 72 6f 72 41 63 74 69 6f 6e 20 3d 20 70 4f 70 2d  rorAction = pOp-
68b0: 3e 70 32 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  >p2;.  if( pOp->
68c0: 70 34 2e 7a 20 29 7b 0a 20 20 20 20 73 71 6c 69  p4.z ){.    sqli
68d0: 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
68e0: 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
68f0: 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  s", pOp->p4.z);.
6900: 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
6910: 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20  e3VdbeHalt(p);. 
6920: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
6930: 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d  ITE_BUSY || rc==
6940: 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 69  SQLITE_OK );.  i
6950: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
6960: 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20  SY ){.    p->rc 
6970: 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
6980: 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  SY;.  }else{.   
6990: 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51   rc = p->rc ? SQ
69a0: 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c  LITE_ERROR : SQL
69b0: 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20  ITE_DONE;.  }.  
69c0: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
69d0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
69e0: 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20  Integer P1 P2 * 
69f0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32  * *.**.** The 32
6a00: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
6a10: 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65 6e  ue P1 is written
6a20: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
6a30: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  2..*/.case OP_In
6a40: 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20  teger: {        
6a50: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
6a60: 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66  ase */.  pOut->f
6a70: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
6a80: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f    pOut->u.i = pO
6a90: 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  p->p1;.  break;.
6aa0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
6ab0: 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  t64 * P2 * P4 *.
6ac0: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
6ad0: 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69  inter to a 64-bi
6ae0: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
6af0: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
6b00: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
6b10: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
6b20: 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20  P_Int64: {      
6b30: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
6b40: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
6b50: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36  ert( pOp->p4.pI6
6b60: 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  4!=0 );.  pOut->
6b70: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
6b80: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a  .  pOut->u.i = *
6b90: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20  pOp->p4.pI64;.  
6ba0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6bb0: 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a  ode: Real * P2 *
6bc0: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
6bd0: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
6be0: 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67   64-bit floating
6bf0: 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a   point value..**
6c00: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
6c10: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
6c20: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
6c30: 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  eal: {          
6c40: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
6c50: 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72  FLOAT, out2-prer
6c60: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74  elease */.  pOut
6c70: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65  ->flags = MEM_Re
6c80: 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73  al;.  assert( !s
6c90: 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70  qlite3IsNaN(*pOp
6ca0: 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20  ->p4.pReal) );. 
6cb0: 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d   pOut->r = *pOp-
6cc0: 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65  >p4.pReal;.  bre
6cd0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6ce0: 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a  : String8 * P2 *
6cf0: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 70   P4 *.**.** P4 p
6d00: 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74  oints to a nul t
6d10: 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
6d20: 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63  string. This opc
6d30: 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d  ode is transform
6d40: 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f  ed .** into an O
6d50: 50 5f 53 74 72 69 6e 67 20 62 65 66 6f 72 65 20  P_String before 
6d60: 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20 66  it is executed f
6d70: 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69 6d  or the first tim
6d80: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  e..*/.case OP_St
6d90: 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20  ring8: {        
6da0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
6db0: 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72  TRING, out2-prer
6dc0: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
6dd0: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30  rt( pOp->p4.z!=0
6de0: 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64   );.  pOp->opcod
6df0: 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20  e = OP_String;. 
6e00: 20 70 4f 70 2d 3e 70 31 20 3d 20 73 74 72 6c 65   pOp->p1 = strle
6e10: 6e 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23  n(pOp->p4.z);..#
6e20: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
6e30: 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65  IT_UTF16.  if( e
6e40: 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f  ncoding!=SQLITE_
6e50: 55 54 46 38 20 29 7b 0a 20 20 20 20 73 71 6c 69  UTF8 ){.    sqli
6e60: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
6e70: 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a  (pOut, pOp->p4.z
6e80: 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  , -1, SQLITE_UTF
6e90: 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  8, SQLITE_STATIC
6ea0: 29 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54  );.    if( SQLIT
6eb0: 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62  E_OK!=sqlite3Vdb
6ec0: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
6ed0: 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20  pOut, encoding) 
6ee0: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
6ef0: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b     if( SQLITE_OK
6f00: 21 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  !=sqlite3VdbeMem
6f10: 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70 4f  MakeWriteable(pO
6f20: 75 74 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ut) ) goto no_me
6f30: 6d 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61  m;.    pOut->zMa
6f40: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f  lloc = 0;.    pO
6f50: 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
6f60: 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 70 4f 75  _Static;.    pOu
6f70: 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  t->flags &= ~MEM
6f80: 5f 44 79 6e 3b 0a 20 20 20 20 69 66 28 20 70 4f  _Dyn;.    if( pO
6f90: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59  p->p4type==P4_DY
6fa0: 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73  NAMIC ){.      s
6fb0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
6fc0: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
6fd0: 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79   }.    pOp->p4ty
6fe0: 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b  pe = P4_DYNAMIC;
6ff0: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d  .    pOp->p4.z =
7000: 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f   pOut->z;.    pO
7010: 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b  p->p1 = pOut->n;
7020: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  .    if( pOp->p1
7030: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
7040: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
7050: 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74   ){.      goto t
7060: 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20  oo_big;.    }.  
7070: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
7080: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 20  BSIZE(pOut);.   
7090: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
70a0: 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  if.  if( pOp->p1
70b0: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
70c0: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
70d0: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
70e0: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46  _big;.  }.  /* F
70f0: 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
7100: 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50  he next case, OP
7110: 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a  _String */.}.  .
7120: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
7130: 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  g P1 P2 * P4 *.*
7140: 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20  *.** The string 
7150: 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67  value P4 of leng
7160: 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69 73  th P1 (bytes) is
7170: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
7180: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
7190: 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20  OP_String: {    
71a0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
71b0: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
71c0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21  sert( pOp->p4.z!
71d0: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  =0 );.  pOut->fl
71e0: 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
71f0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
7200: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70  m;.  pOut->z = p
7210: 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74  Op->p4.z;.  pOut
7220: 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  ->n = pOp->p1;. 
7230: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
7240: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
7250: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
7260: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
7270: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20  /* Opcode: Null 
7280: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
7290: 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e   Write a NULL in
72a0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
72b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a  */.case OP_Null:
72c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
72d0: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
72e0: 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  */.  break;.}...
72f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
7300: 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c  MIT_BLOB_LITERAL
7310: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62  ./* Opcode: Blob
7320: 20 50 31 20 50 32 20 2a 20 50 34 0a 2a 2a 0a 2a   P1 P2 * P4.**.*
7330: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
7340: 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31   blob of data P1
7350: 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74   bytes long.  St
7360: 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62  ore this.** blob
7370: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
7380: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
7390: 6e 20 69 73 20 6e 6f 74 20 63 6f 64 65 64 20 64  n is not coded d
73a0: 69 72 65 63 74 6c 79 0a 2a 2a 20 62 79 20 74 68  irectly.** by th
73b0: 65 20 63 6f 6d 70 69 6c 65 72 2e 20 49 6e 73 74  e compiler. Inst
73c0: 65 61 64 2c 20 74 68 65 20 63 6f 6d 70 69 6c 65  ead, the compile
73d0: 72 20 6c 61 79 65 72 20 73 70 65 63 69 66 69 65  r layer specifie
73e0: 73 0a 2a 2a 20 61 6e 20 4f 50 5f 48 65 78 42 6c  s.** an OP_HexBl
73f0: 6f 62 20 6f 70 63 6f 64 65 2c 20 77 69 74 68 20  ob opcode, with 
7400: 74 68 65 20 68 65 78 20 73 74 72 69 6e 67 20 72  the hex string r
7410: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
7420: 0a 2a 2a 20 74 68 65 20 62 6c 6f 62 20 61 73 20  .** the blob as 
7430: 50 34 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  P4. This opcode 
7440: 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 74  is transformed t
7450: 6f 20 61 6e 20 4f 50 5f 42 6c 6f 62 0a 2a 2a 20  o an OP_Blob.** 
7460: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 20 69  the first time i
7470: 74 20 69 73 20 65 78 65 63 75 74 65 64 2e 0a 2a  t is executed..*
7480: 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20  /.case OP_Blob: 
7490: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
74a0: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
74b0: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
74c0: 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49   pOp->p1 <= SQLI
74d0: 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b  TE_MAX_LENGTH );
74e0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
74f0: 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f  mSetStr(pOut, pO
7500: 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31  p->p4.z, pOp->p1
7510: 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d  , 0, 0);.  pOut-
7520: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
7530: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
7540: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
7550: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
7560: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  /* SQLITE_OMIT_B
7570: 4c 4f 42 5f 4c 49 54 45 52 41 4c 20 2a 2f 0a 0a  LOB_LITERAL */..
7580: 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61  /* Opcode: Varia
7590: 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ble P1 P2 * * *.
75a0: 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
75b0: 6f 66 20 76 61 72 69 61 62 6c 65 20 50 31 20 69  of variable P1 i
75c0: 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 72  s written into r
75d0: 65 67 69 73 74 65 72 20 50 32 2e 20 41 20 76 61  egister P2. A va
75e0: 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 61 6e 20  riable is.** an 
75f0: 75 6e 6b 6e 6f 77 6e 20 69 6e 20 74 68 65 20 6f  unknown in the o
7600: 72 69 67 69 6e 61 6c 20 53 51 4c 20 73 74 72 69  riginal SQL stri
7610: 6e 67 20 61 73 20 68 61 6e 64 65 64 20 74 6f 20  ng as handed to 
7620: 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 28  sqlite3_compile(
7630: 29 2e 0a 2a 2a 20 41 6e 79 20 6f 63 63 75 72 72  )..** Any occurr
7640: 65 6e 63 65 20 6f 66 20 74 68 65 20 27 3f 27 20  ence of the '?' 
7650: 63 68 61 72 61 63 74 65 72 20 69 6e 20 74 68 65  character in the
7660: 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 20 69 73   original SQL is
7670: 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20 61   considered.** a
7680: 20 76 61 72 69 61 62 6c 65 2e 20 20 56 61 72 69   variable.  Vari
7690: 61 62 6c 65 73 20 69 6e 20 74 68 65 20 53 51 4c  ables in the SQL
76a0: 20 73 74 72 69 6e 67 20 61 72 65 20 6e 75 6d 62   string are numb
76b0: 65 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 0a  er from left to.
76c0: 2a 2a 20 72 69 67 68 74 20 62 65 67 69 6e 6e 69  ** right beginni
76d0: 6e 67 20 77 69 74 68 20 31 2e 20 20 54 68 65 20  ng with 1.  The 
76e0: 76 61 6c 75 65 73 20 6f 66 20 76 61 72 69 61 62  values of variab
76f0: 6c 65 73 20 61 72 65 20 73 65 74 20 75 73 69 6e  les are set usin
7700: 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  g the.** sqlite3
7710: 5f 62 69 6e 64 28 29 20 41 50 49 2e 0a 2a 2f 0a  _bind() API..*/.
7720: 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65  case OP_Variable
7730: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
7740: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7750: 20 2a 2f 0a 20 20 69 6e 74 20 6a 20 3d 20 70 4f   */.  int j = pO
7760: 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 4d 65 6d  p->p1 - 1;.  Mem
7770: 20 2a 70 56 61 72 3b 0a 20 20 61 73 73 65 72 74   *pVar;.  assert
7780: 28 20 6a 3e 3d 30 20 26 26 20 6a 3c 70 2d 3e 6e  ( j>=0 && j<p->n
7790: 56 61 72 20 29 3b 0a 0a 20 20 70 56 61 72 20 3d  Var );..  pVar =
77a0: 20 26 70 2d 3e 61 56 61 72 5b 6a 5d 3b 0a 20 20   &p->aVar[j];.  
77b0: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
77c0: 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29  emTooBig(pVar) )
77d0: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
77e0: 69 67 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ig;.  }.  sqlite
77f0: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
7800: 6f 70 79 28 70 4f 75 74 2c 20 26 70 2d 3e 61 56  opy(pOut, &p->aV
7810: 61 72 5b 6a 5d 2c 20 4d 45 4d 5f 53 74 61 74 69  ar[j], MEM_Stati
7820: 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  c);.  UPDATE_MAX
7830: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
7840: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7850: 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20  Opcode: Move P1 
7860: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
7870: 4d 6f 76 65 20 74 68 65 20 76 61 6c 75 65 73 20  Move the values 
7880: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e  in register P1..
7890: 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74  P1+P3-1 over int
78a0: 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50  o.** registers P
78b0: 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67  2..P2+P3-1.  Reg
78c0: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 31  isters P1..P1+P1
78d0: 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68  -1 are.** left h
78e0: 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20  olding a NULL.  
78f0: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
7900: 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67  or register rang
7910: 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d  es.** P1..P1+P3-
7920: 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d  1 and P2..P2+P3-
7930: 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f  1 to overlap..*/
7940: 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b  .case OP_Move: {
7950: 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63  .  char *zMalloc
7960: 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d  ;.  int n = pOp-
7970: 3e 70 33 3b 0a 20 20 69 6e 74 20 70 31 20 3d 20  >p3;.  int p1 = 
7980: 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e 74 20 70  pOp->p1;.  int p
7990: 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  2 = pOp->p2;.  a
79a0: 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20  ssert( n>0 );.  
79b0: 61 73 73 65 72 74 28 20 70 31 3e 30 20 29 3b 0a  assert( p1>0 );.
79c0: 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 70    assert( p1+n<p
79d0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e 31  ->nMem );.  pIn1
79e0: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 31 5d 3b   = &p->aMem[p1];
79f0: 0a 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20  .  assert( p2>0 
7a00: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 2b  );.  assert( p2+
7a10: 6e 3c 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  n<p->nMem );.  p
7a20: 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
7a30: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31  2];.  assert( p1
7a40: 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d  +n<=p2 || p2+n<=
7a50: 70 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 6e  p1 );.  while( n
7a60: 2d 2d 20 29 7b 0a 20 20 20 20 7a 4d 61 6c 6c 6f  -- ){.    zMallo
7a70: 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f  c = pOut->zMallo
7a80: 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61  c;.    pOut->zMa
7a90: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 73 71  lloc = 0;.    sq
7aa0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
7ab0: 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 20 20  (pOut, pIn1);.  
7ac0: 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20    pIn1->zMalloc 
7ad0: 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 52  = zMalloc;.    R
7ae0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32  EGISTER_TRACE(p2
7af0: 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70  ++, pOut);.    p
7b00: 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b  In1++;.    pOut+
7b10: 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  +;.  }.  break;.
7b20: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
7b30: 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  py P1 P2 * * *.*
7b40: 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79  *.** Make a copy
7b50: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
7b60: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
7b70: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
7b80: 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61  truction makes a
7b90: 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68   deep copy of th
7ba0: 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c  e value.  A dupl
7bb0: 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65  icate.** is made
7bc0: 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f   of any string o
7bd0: 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e  r blob constant.
7be0: 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43    See also OP_SC
7bf0: 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  opy..*/.case OP_
7c00: 43 6f 70 79 3a 20 7b 0a 20 20 61 73 73 65 72 74  Copy: {.  assert
7c10: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
7c20: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
7c30: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
7c40: 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  In1 = &p->aMem[p
7c50: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
7c60: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
7c70: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7c80: 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
7c90: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
7ca0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
7cb0: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
7cc0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
7cd0: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
7ce0: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
7cf0: 68 65 6d 29 3b 0a 20 20 44 65 65 70 68 65 6d 65  hem);.  Deepheme
7d00: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20  ralize(pOut);.  
7d10: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
7d20: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
7d30: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7d40: 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50  code: SCopy P1 P
7d50: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61  2 * * *.**.** Ma
7d60: 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  ke a shallow cop
7d70: 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  y of register P1
7d80: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7d90: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
7da0: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
7db0: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
7dc0: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66  f the value.  If
7dd0: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   the value.** is
7de0: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
7df0: 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79  b, then the copy
7e00: 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74   is only a point
7e10: 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69  er to the.** ori
7e20: 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20  ginal and hence 
7e30: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
7e40: 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20  changes so will 
7e50: 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72  the copy..** Wor
7e60: 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69  se, if the origi
7e70: 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74  nal is deallocat
7e80: 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63  ed, the copy bec
7e90: 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a  omes invalid..**
7ea0: 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61   Thus the progra
7eb0: 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65  m must guarantee
7ec0: 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e   that the origin
7ed0: 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e  al will not chan
7ee0: 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65  ge.** during the
7ef0: 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65   lifetime of the
7f00: 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43   copy.  Use OP_C
7f10: 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f  opy to make a co
7f20: 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a  mplete.** copy..
7f30: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79  */.case OP_SCopy
7f40: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
7f50: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73  p->p1>0 );.  ass
7f60: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  ert( pOp->p1<=p-
7f70: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e 31 20  >nMem );.  pIn1 
7f80: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
7f90: 70 31 5d 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  p1];.  REGISTER_
7fa0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
7fb0: 49 6e 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20  In1);.  assert( 
7fc0: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61  pOp->p2>0 );.  a
7fd0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
7fe0: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75  p->nMem );.  pOu
7ff0: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
8000: 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
8010: 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20   pOut!=pIn1 );. 
8020: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
8030: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
8040: 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d   pIn1, MEM_Ephem
8050: 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
8060: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
8070: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
8080: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c  /* Opcode: Resul
8090: 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a  tRow P1 P2 * * *
80a0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
80b0: 74 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20  ters P1 through 
80c0: 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20  P1+P2-1 contain 
80d0: 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a  a single row of.
80e0: 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73  ** results. This
80f0: 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74   opcode causes t
8100: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  he sqlite3_step(
8110: 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e  ) call to termin
8120: 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53  ate.** with an S
8130: 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e  QLITE_ROW return
8140: 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74   code and it set
8150: 73 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33  s up the sqlite3
8160: 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75  _stmt.** structu
8170: 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63  re to provide ac
8180: 63 65 73 73 20 74 6f 20 74 68 65 20 74 6f 70 20  cess to the top 
8190: 50 31 20 76 61 6c 75 65 73 20 61 73 20 74 68 65  P1 values as the
81a0: 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a   result.** row..
81b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c  */.case OP_Resul
81c0: 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tRow: {.  Mem *p
81d0: 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Mem;.  int i;.  
81e0: 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43  assert( p->nResC
81f0: 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29  olumn==pOp->p2 )
8200: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
8210: 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p1>0 );.  asser
8220: 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  t( pOp->p1+pOp->
8230: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 0a  p2<=p->nMem );..
8240: 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
8250: 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75  all ephemeral cu
8260: 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20  rsor row caches 
8270: 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72  */.  p->cacheCtr
8280: 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20   = (p->cacheCtr 
8290: 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61  + 2)|1;..  /* Ma
82a0: 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73 75  ke sure the resu
82b0: 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  lts of the curre
82c0: 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20  nt row are \000 
82d0: 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20  terminated.  ** 
82e0: 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73 69  and have an assi
82f0: 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65 20  gned type.  The 
8300: 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65  results are de-e
8310: 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a  phemeralized as.
8320: 20 20 2a 2a 20 61 73 20 73 69 64 65 20 65 66 66    ** as side eff
8330: 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d  ect..  */.  pMem
8340: 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74   = p->pResultSet
8350: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
8360: 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  >p1];.  for(i=0;
8370: 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29   i<pOp->p2; i++)
8380: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
8390: 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65  eMemNulTerminate
83a0: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
83b0: 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 26 70  storeTypeInfo(&p
83c0: 4d 65 6d 5b 69 5d 2c 20 65 6e 63 6f 64 69 6e 67  Mem[i], encoding
83d0: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
83e0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c  TRACE(pOp->p1+i,
83f0: 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a   &pMem[i]);.  }.
8400: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
8410: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
8420: 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75  _mem;..  /* Retu
8430: 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20  rn SQLITE_ROW.  
8440: 2a 2f 0a 20 20 70 2d 3e 6e 43 61 6c 6c 62 61 63  */.  p->nCallbac
8450: 6b 2b 2b 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70  k++;.  p->pc = p
8460: 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51  c + 1;.  rc = SQ
8470: 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f  LITE_ROW;.  goto
8480: 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a   vdbe_return;.}.
8490: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63  ./* Opcode: Conc
84a0: 61 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  at P1 P2 P3 * *.
84b0: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65  **.** Add the te
84c0: 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  xt in register P
84d0: 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f  1 onto the end o
84e0: 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a  f the text in.**
84f0: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
8500: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
8510: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
8520: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74  ..** If either t
8530: 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78 74  he P1 or P2 text
8540: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73   are NULL then s
8550: 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e  tore NULL in P3.
8560: 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32  .**.**   P3 = P2
8570: 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20   || P1.**.** It 
8580: 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50  is illegal for P
8590: 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74  1 and P3 to be t
85a0: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
85b0: 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20  . Sometimes,.** 
85c0: 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61 6d  if P3 is the sam
85d0: 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50 32  e register as P2
85e0: 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
85f0: 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20  tion is able.** 
8600: 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70  to avoid a memcp
8610: 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  y()..*/.case OP_
8620: 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20  Concat: {       
8630: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
8640: 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69  K_CONCAT, in1, i
8650: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n2, out3 */.  i6
8660: 34 20 6e 42 79 74 65 3b 0a 0a 20 20 61 73 73 65  4 nByte;..  asse
8670: 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29  rt( pIn1!=pOut )
8680: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
8690: 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61  lags | pIn2->fla
86a0: 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  gs) & MEM_Null )
86b0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
86c0: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
86d0: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
86e0: 7d 0a 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  }.  ExpandBlob(p
86f0: 49 6e 31 29 3b 0a 20 20 53 74 72 69 6e 67 69 66  In1);.  Stringif
8700: 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn1, encoding
8710: 29 3b 0a 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  );.  ExpandBlob(
8720: 70 49 6e 32 29 3b 0a 20 20 53 74 72 69 6e 67 69  pIn2);.  Stringi
8730: 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e  fy(pIn2, encodin
8740: 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49  g);.  nByte = pI
8750: 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b  n1->n + pIn2->n;
8760: 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d  .  if( nByte>db-
8770: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
8780: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
8790: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
87a0: 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79  ;.  }.  MemSetTy
87b0: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
87c0: 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 73 71 6c  _Str);.  if( sql
87d0: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
87e0: 70 4f 75 74 2c 20 6e 42 79 74 65 2b 32 2c 20 70  pOut, nByte+2, p
87f0: 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20  Out==pIn2) ){.  
8800: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
8810: 20 7d 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70   }.  if( pOut!=p
8820: 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70  In2 ){.    memcp
8830: 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d  y(pOut->z, pIn2-
8840: 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20  >z, pIn2->n);.  
8850: 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74  }.  memcpy(&pOut
8860: 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49  ->z[pIn2->n], pI
8870: 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b  n1->z, pIn1->n);
8880: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
8890: 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a  ] = 0;.  pOut->z
88a0: 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20  [nByte+1] = 0;. 
88b0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
88c0: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
88d0: 2d 3e 6e 20 3d 20 6e 42 79 74 65 3b 0a 20 20 70  ->n = nByte;.  p
88e0: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
88f0: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
8900: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
8910: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
8920: 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20   Opcode: Add P1 
8930: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
8940: 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  Add the value in
8950: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
8960: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
8970: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
8980: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
8990: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
89a0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
89b0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
89c0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
89d0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .*/./* Opcode: M
89e0: 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33  ultiply P1 P2 P3
89f0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75   * *.**.**.** Mu
8a00: 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65  ltiply the value
8a10: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
8a20: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
8a30: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
8a40: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
8a50: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
8a60: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
8a70: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
8a80: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
8a90: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
8aa0: 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32  : Subtract P1 P2
8ab0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 75   P3 * *.**.** Su
8ac0: 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65  btract the value
8ad0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
8ae0: 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69  from the value i
8af0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
8b00: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
8b10: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
8b20: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
8b30: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
8b40: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
8b50: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
8b60: 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32  de: Divide P1 P2
8b70: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 69   P3 * *.**.** Di
8b80: 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69  vide the value i
8b90: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
8ba0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
8bb0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
8bc0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
8bd0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
8be0: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  .  If the value 
8bf0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
8c00: 2a 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  * is zero, then 
8c10: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
8c20: 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  LL..** If either
8c30: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
8c40: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
8c50: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
8c60: 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50  : Remainder P1 P
8c70: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
8c80: 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69  ompute the remai
8c90: 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67  nder after integ
8ca0: 65 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74  er division of t
8cb0: 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72  he value in.** r
8cc0: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
8cd0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
8ce0: 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65  ter P2 and store
8cf0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50   the result in P
8d00: 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  3. .** If the va
8d10: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
8d20: 50 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72  P2 is zero the r
8d30: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
8d40: 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72  * If either oper
8d50: 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  and is NULL, the
8d60: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
8d70: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a  .*/.case OP_Add:
8d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d90: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
8da0: 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  _PLUS, in1, in2,
8db0: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
8dc0: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20  _Subtract:      
8dd0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
8de0: 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31  as TK_MINUS, in1
8df0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
8e00: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
8e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8e20: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52   same as TK_STAR
8e30: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
8e40: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69   */.case OP_Divi
8e50: 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  de:             
8e60: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
8e70: 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32  _SLASH, in1, in2
8e80: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
8e90: 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20  P_Remainder: {  
8ea0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
8eb0: 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c   as TK_REM, in1,
8ec0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
8ed0: 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 61 70 70  int flags;.  app
8ee0: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
8ef0: 79 28 70 49 6e 31 29 3b 0a 20 20 61 70 70 6c 79  y(pIn1);.  apply
8f00: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
8f10: 70 49 6e 32 29 3b 0a 20 20 66 6c 61 67 73 20 3d  pIn2);.  flags =
8f20: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70   pIn1->flags | p
8f30: 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66  In2->flags;.  if
8f40: 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  ( (flags & MEM_N
8f50: 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61  ull)!=0 ) goto a
8f60: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
8f70: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20  _is_null;.  if( 
8f80: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70  (pIn1->flags & p
8f90: 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
8fa0: 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29  _Int)==MEM_Int )
8fb0: 7b 0a 20 20 20 20 69 36 34 20 61 2c 20 62 3b 0a  {.    i64 a, b;.
8fc0: 20 20 20 20 61 20 3d 20 70 49 6e 31 2d 3e 75 2e      a = pIn1->u.
8fd0: 69 3b 0a 20 20 20 20 62 20 3d 20 70 49 6e 32 2d  i;.    b = pIn2-
8fe0: 3e 75 2e 69 3b 0a 20 20 20 20 73 77 69 74 63 68  >u.i;.    switch
8ff0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
9000: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
9010: 64 64 3a 20 20 20 20 20 20 20 20 20 62 20 2b 3d  dd:         b +=
9020: 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b   a;       break;
9030: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53  .      case OP_S
9040: 75 62 74 72 61 63 74 3a 20 20 20 20 62 20 2d 3d  ubtract:    b -=
9050: 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b   a;       break;
9060: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d  .      case OP_M
9070: 75 6c 74 69 70 6c 79 3a 20 20 20 20 62 20 2a 3d  ultiply:    b *=
9080: 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b   a;       break;
9090: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
90a0: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
90b0: 20 69 66 28 20 61 3d 3d 30 20 29 20 67 6f 74 6f   if( a==0 ) goto
90c0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
90d0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
90e0: 20 20 20 20 2f 2a 20 44 69 76 69 64 69 6e 67 20      /* Dividing 
90f0: 74 68 65 20 6c 61 72 67 65 73 74 20 70 6f 73 73  the largest poss
9100: 69 62 6c 65 20 6e 65 67 61 74 69 76 65 20 36 34  ible negative 64
9110: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 28 31 3c  -bit integer (1<
9120: 3c 36 33 29 20 62 79 20 0a 20 20 20 20 20 20 20  <63) by .       
9130: 20 2a 2a 20 2d 31 20 72 65 74 75 72 6e 73 20 61   ** -1 returns a
9140: 6e 20 69 6e 74 65 67 65 72 20 74 6f 6f 20 6c 61  n integer too la
9150: 72 67 65 20 74 6f 20 73 74 6f 72 65 20 69 6e 20  rge to store in 
9160: 61 20 36 34 2d 62 69 74 20 64 61 74 61 2d 74 79  a 64-bit data-ty
9170: 70 65 2e 20 4f 6e 0a 20 20 20 20 20 20 20 20 2a  pe. On.        *
9180: 2a 20 73 6f 6d 65 20 61 72 63 68 69 74 65 63 74  * some architect
9190: 75 72 65 73 2c 20 74 68 65 20 76 61 6c 75 65 20  ures, the value 
91a0: 6f 76 65 72 66 6c 6f 77 73 20 74 6f 20 28 31 3c  overflows to (1<
91b0: 3c 36 33 29 2e 20 4f 6e 20 6f 74 68 65 72 73 2c  <63). On others,
91c0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 20 53 49  .        ** a SI
91d0: 47 46 50 45 20 69 73 20 69 73 73 75 65 64 2e 20  GFPE is issued. 
91e0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  The following st
91f0: 61 74 65 6d 65 6e 74 20 6e 6f 72 6d 61 6c 69 7a  atement normaliz
9200: 65 73 20 74 68 69 73 0a 20 20 20 20 20 20 20 20  es this.        
9210: 2a 2a 20 62 65 68 61 76 69 6f 72 20 73 6f 20 74  ** behavior so t
9220: 68 61 74 20 61 6c 6c 20 61 72 63 68 69 74 65 63  hat all architec
9230: 74 75 72 65 73 20 62 65 68 61 76 65 20 61 73 20  tures behave as 
9240: 69 66 20 69 6e 74 65 67 65 72 20 0a 20 20 20 20  if integer .    
9250: 20 20 20 20 2a 2a 20 6f 76 65 72 66 6c 6f 77 20      ** overflow 
9260: 6f 63 63 75 72 72 65 64 2e 0a 20 20 20 20 20 20  occurred..      
9270: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28    */.        if(
9280: 20 61 3d 3d 2d 31 20 26 26 20 62 3d 3d 53 4d 41   a==-1 && b==SMA
9290: 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 61 20  LLEST_INT64 ) a 
92a0: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 20 2f  = 1;.        b /
92b0: 3d 20 61 3b 0a 20 20 20 20 20 20 20 20 62 72 65  = a;.        bre
92c0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
92d0: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
92e0: 20 20 20 20 20 69 66 28 20 61 3d 3d 30 20 29 20       if( a==0 ) 
92f0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
9300: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
9310: 20 20 20 20 20 20 20 20 69 66 28 20 61 3d 3d 2d          if( a==-
9320: 31 20 29 20 61 20 3d 20 31 3b 0a 20 20 20 20 20  1 ) a = 1;.     
9330: 20 20 20 62 20 25 3d 20 61 3b 0a 20 20 20 20 20     b %= a;.     
9340: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
9350: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  }.    }.    pOut
9360: 2d 3e 75 2e 69 20 3d 20 62 3b 0a 20 20 20 20 4d  ->u.i = b;.    M
9370: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
9380: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
9390: 7d 65 6c 73 65 7b 0a 20 20 20 20 64 6f 75 62 6c  }else{.    doubl
93a0: 65 20 61 2c 20 62 3b 0a 20 20 20 20 61 20 3d 20  e a, b;.    a = 
93b0: 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
93c0: 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20  alue(pIn1);.    
93d0: 62 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  b = sqlite3VdbeR
93e0: 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  ealValue(pIn2);.
93f0: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
9400: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
9410: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
9420: 20 20 20 20 20 20 62 20 2b 3d 20 61 3b 20 20 20        b += a;   
9430: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9440: 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63   case OP_Subtrac
9450: 74 3a 20 20 20 20 62 20 2d 3d 20 61 3b 20 20 20  t:    b -= a;   
9460: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9470: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
9480: 79 3a 20 20 20 20 62 20 2a 3d 20 61 3b 20 20 20  y:    b *= a;   
9490: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
94a0: 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a   case OP_Divide:
94b0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61   {.        if( a
94c0: 3d 3d 30 2e 30 20 29 20 67 6f 74 6f 20 61 72 69  ==0.0 ) goto ari
94d0: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
94e0: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
94f0: 62 20 2f 3d 20 61 3b 0a 20 20 20 20 20 20 20 20  b /= a;.        
9500: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
9510: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
9520: 20 20 20 20 20 20 20 20 69 36 34 20 69 61 20 3d          i64 ia =
9530: 20 28 69 36 34 29 61 3b 0a 20 20 20 20 20 20 20   (i64)a;.       
9540: 20 69 36 34 20 69 62 20 3d 20 28 69 36 34 29 62   i64 ib = (i64)b
9550: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 61  ;.        if( ia
9560: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
9570: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
9580: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
9590: 28 20 69 61 3d 3d 2d 31 20 29 20 69 61 20 3d 20  ( ia==-1 ) ia = 
95a0: 31 3b 0a 20 20 20 20 20 20 20 20 62 20 3d 20 69  1;.        b = i
95b0: 62 20 25 20 69 61 3b 0a 20 20 20 20 20 20 20 20  b % ia;.        
95c0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
95d0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c     }.    if( sql
95e0: 69 74 65 33 49 73 4e 61 4e 28 62 29 20 29 7b 0a  ite3IsNaN(b) ){.
95f0: 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68        goto arith
9600: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
9610: 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20  null;.    }.    
9620: 70 4f 75 74 2d 3e 72 20 3d 20 62 3b 0a 20 20 20  pOut->r = b;.   
9630: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
9640: 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b  pOut, MEM_Real);
9650: 0a 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 20  .    if( (flags 
9660: 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29  & MEM_Real)==0 )
9670: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
9680: 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69  dbeIntegerAffini
9690: 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a  ty(pOut);.    }.
96a0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72    }.  break;..ar
96b0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
96c0: 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74  is_null:.  sqlit
96d0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
96e0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
96f0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
9700: 6f 6c 6c 53 65 71 20 2a 20 2a 20 50 34 0a 2a 2a  ollSeq * * P4.**
9710: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
9720: 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71  ter to a CollSeq
9730: 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65 20   struct. If the 
9740: 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75  next call to a u
9750: 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20  ser function.** 
9760: 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c  or aggregate cal
9770: 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  ls sqlite3GetFun
9780: 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73  cCollSeq(), this
9790: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
97a0: 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72  nce will.** be r
97b0: 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73  eturned. This is
97c0: 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69   used by the bui
97d0: 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78  lt-in min(), max
97e0: 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a  () and nullif().
97f0: 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  ** functions..**
9800: 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
9810: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69 6d  e used by the im
9820: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
9830: 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e  the aforemention
9840: 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20  ed functions.** 
9850: 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20  to retrieve the 
9860: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
9870: 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20 6f  ce set by this o
9880: 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61  pcode is not ava
9890: 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63  ilable.** public
98a0: 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65 72  ly, only to user
98b0: 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e   functions defin
98c0: 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f  ed in func.c..*/
98d0: 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71  .case OP_CollSeq
98e0: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
98f0: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
9900: 4c 4c 53 45 51 20 29 3b 0a 20 20 62 72 65 61 6b  LLSEQ );.  break
9910: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9920: 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20 50  Function P1 P2 P
9930: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e  3 P4 P5.**.** In
9940: 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63  voke a user func
9950: 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f  tion (P4 is a po
9960: 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63 74  inter to a Funct
9970: 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20 74 68  ion structure th
9980: 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74 68  at.** defines th
9990: 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74 68  e function) with
99a0: 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61   P5 arguments ta
99b0: 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
99c0: 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63  r P2 and.** succ
99d0: 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73  essors.  The res
99e0: 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
99f0: 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ion is stored in
9a00: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
9a10: 20 52 65 67 69 73 74 65 72 20 50 33 20 6d 75 73   Register P3 mus
9a20: 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20  t not be one of 
9a30: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70  the function inp
9a40: 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  uts..**.** P1 is
9a50: 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73   a 32-bit bitmas
9a60: 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65  k indicating whe
9a70: 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68  ther or not each
9a80: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
9a90: 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61   .** function wa
9aa0: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20  s determined to 
9ab0: 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63  be constant at c
9ac0: 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20  ompile time. If 
9ad0: 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67  the first.** arg
9ae0: 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61  ument was consta
9af0: 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66  nt then bit 0 of
9b00: 20 50 31 20 69 73 20 73 65 74 2e 20 54 68 69 73   P1 is set. This
9b10: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
9b20: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
9b30: 20 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f 63   meta data assoc
9b40: 69 61 74 65 64 20 77 69 74 68 20 61 20 75 73 65  iated with a use
9b50: 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  r function argum
9b60: 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ent using the.**
9b70: 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78   sqlite3_set_aux
9b80: 64 61 74 61 28 29 20 41 50 49 20 6d 61 79 20 62  data() API may b
9b90: 65 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65  e safely retaine
9ba0: 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74  d until the next
9bb0: 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  .** invocation o
9bc0: 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  f this opcode..*
9bd0: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 41  *.** See also: A
9be0: 67 67 53 74 65 70 20 61 6e 64 20 41 67 67 46 69  ggStep and AggFi
9bf0: 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  nal.*/.case OP_F
9c00: 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74  unction: {.  int
9c10: 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 3b   i;.  Mem *pArg;
9c20: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
9c30: 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65  xt ctx;.  sqlite
9c40: 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b  3_value **apVal;
9c50: 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e  .  int n = pOp->
9c60: 70 35 3b 0a 0a 20 20 61 70 56 61 6c 20 3d 20 70  p5;..  apVal = p
9c70: 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72  ->apArg;.  asser
9c80: 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30  t( apVal || n==0
9c90: 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e   );..  assert( n
9ca0: 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e  ==0 || (pOp->p2>
9cb0: 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d  0 && pOp->p2+n<=
9cc0: 70 2d 3e 6e 4d 65 6d 29 20 29 3b 0a 20 20 61 73  p->nMem) );.  as
9cd0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
9ce0: 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p2 || pOp->p3
9cf0: 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20  >=pOp->p2+n );. 
9d00: 20 70 41 72 67 20 3d 20 26 70 2d 3e 61 4d 65 6d   pArg = &p->aMem
9d10: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72  [pOp->p2];.  for
9d20: 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20  (i=0; i<n; i++, 
9d30: 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61 70 56  pArg++){.    apV
9d40: 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20 20  al[i] = pArg;.  
9d50: 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28    storeTypeInfo(
9d60: 70 41 72 67 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pArg, encoding);
9d70: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
9d80: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 41 72  ACE(pOp->p2, pAr
9d90: 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  g);.  }..  asser
9da0: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
9db0: 50 34 5f 46 55 4e 43 44 45 46 20 7c 7c 20 70 4f  P4_FUNCDEF || pO
9dc0: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 44  p->p4type==P4_VD
9dd0: 42 45 46 55 4e 43 20 29 3b 0a 20 20 69 66 28 20  BEFUNC );.  if( 
9de0: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
9df0: 46 55 4e 43 44 45 46 20 29 7b 0a 20 20 20 20 63  FUNCDEF ){.    c
9e00: 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e  tx.pFunc = pOp->
9e10: 70 34 2e 70 46 75 6e 63 3b 0a 20 20 20 20 63 74  p4.pFunc;.    ct
9e20: 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 30 3b  x.pVdbeFunc = 0;
9e30: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 74  .  }else{.    ct
9e40: 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 28 56  x.pVdbeFunc = (V
9e50: 64 62 65 46 75 6e 63 2a 29 70 4f 70 2d 3e 70 34  dbeFunc*)pOp->p4
9e60: 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20 20 20  .pVdbeFunc;.    
9e70: 63 74 78 2e 70 46 75 6e 63 20 3d 20 63 74 78 2e  ctx.pFunc = ctx.
9e80: 70 56 64 62 65 46 75 6e 63 2d 3e 70 46 75 6e 63  pVdbeFunc->pFunc
9e90: 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28  ;.  }..  assert(
9ea0: 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
9eb0: 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
9ec0: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61  ;.  pOut = &p->a
9ed0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
9ee0: 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45  ctx.s.flags = ME
9ef0: 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e  M_Null;.  ctx.s.
9f00: 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 73  db = db;.  ctx.s
9f10: 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78  .xDel = 0;.  ctx
9f20: 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  .s.zMalloc = 0;.
9f30: 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74  .  /* The output
9f40: 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64   cell may alread
9f50: 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20  y have a buffer 
9f60: 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a  allocated. Move.
9f70: 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65 72    ** the pointer
9f80: 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e 20   to ctx.s so in 
9f90: 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75  case the user-fu
9fa0: 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a 20  nction can use. 
9fb0: 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79 20   ** the already 
9fc0: 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72  allocated buffer
9fd0: 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f   instead of allo
9fe0: 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e 65  cating a new one
9ff0: 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
a000: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74 78  VdbeMemMove(&ctx
a010: 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65 6d  .s, pOut);.  Mem
a020: 53 65 74 54 79 70 65 46 6c 61 67 28 26 63 74 78  SetTypeFlag(&ctx
a030: 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a  .s, MEM_Null);..
a040: 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20    ctx.isError = 
a050: 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75  0;.  if( ctx.pFu
a060: 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  nc->flags & SQLI
a070: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
a080: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
a090: 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20  pOp>p->aOp );.  
a0a0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
a0b0: 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ].p4type==P4_COL
a0c0: 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65  LSEQ );.    asse
a0d0: 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
a0e0: 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29  de==OP_CollSeq )
a0f0: 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20  ;.    ctx.pColl 
a100: 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f  = pOp[-1].p4.pCo
a110: 6c 6c 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  ll;.  }.  if( sq
a120: 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
a130: 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
a140: 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
a150: 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46   (*ctx.pFunc->xF
a160: 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20 61 70  unc)(&ctx, n, ap
a170: 56 61 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  Val);.  if( sqli
a180: 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
a190: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
a1a0: 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74  beMemRelease(&ct
a1b0: 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61  x.s);.    goto a
a1c0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
a1d0: 73 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62  se;.  }.  if( db
a1e0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
a1f0: 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20 74 68  {.    /* Even th
a200: 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29 20  ough a malloc() 
a210: 68 61 73 20 66 61 69 6c 65 64 2c 20 74 68 65 20  has failed, the 
a220: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
a230: 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 75 73 65  f the.    ** use
a240: 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68  r function may h
a250: 61 76 65 20 63 61 6c 6c 65 64 20 61 6e 20 73 71  ave called an sq
a260: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 58 58 58  lite3_result_XXX
a270: 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20  () function.    
a280: 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20 61 20 76  ** to return a v
a290: 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f 77  alue. The follow
a2a0: 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61 73 65  ing call release
a2b0: 73 20 61 6e 79 20 72 65 73 6f 75 72 63 65 73 0a  s any resources.
a2c0: 20 20 20 20 2a 2a 20 61 73 73 6f 63 69 61 74 65      ** associate
a2d0: 64 20 77 69 74 68 20 73 75 63 68 20 61 20 76 61  d with such a va
a2e0: 6c 75 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  lue..    **.    
a2f0: 2a 2a 20 4e 6f 74 65 3a 20 4d 61 79 62 65 20 4d  ** Note: Maybe M
a300: 65 6d 52 65 6c 65 61 73 65 28 29 20 73 68 6f 75  emRelease() shou
a310: 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 69 66 20  ld be called if 
a320: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
a330: 29 0a 20 20 20 20 2a 2a 20 66 61 69 6c 73 20 61  ).    ** fails a
a340: 6c 73 6f 20 28 74 68 65 20 69 66 28 2e 2e 2e 29  lso (the if(...)
a350: 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65   statement above
a360: 29 2e 20 42 75 74 20 69 66 20 70 65 6f 70 6c 65  ). But if people
a370: 20 61 72 65 0a 20 20 20 20 2a 2a 20 6d 69 73 75   are.    ** misu
a380: 73 69 6e 67 20 73 71 6c 69 74 65 2c 20 74 68 65  sing sqlite, the
a390: 79 20 68 61 76 65 20 62 69 67 67 65 72 20 70 72  y have bigger pr
a3a0: 6f 62 6c 65 6d 73 20 74 68 61 6e 20 61 20 6c 65  oblems than a le
a3b0: 61 6b 65 64 20 76 61 6c 75 65 2e 0a 20 20 20 20  aked value..    
a3c0: 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
a3d0: 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74  beMemRelease(&ct
a3e0: 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e  x.s);.    goto n
a3f0: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  o_mem;.  }..  /*
a400: 20 49 66 20 61 6e 79 20 61 75 78 69 6c 69 61 72   If any auxiliar
a410: 79 20 64 61 74 61 20 66 75 6e 63 74 69 6f 6e 73  y data functions
a420: 20 68 61 76 65 20 62 65 65 6e 20 63 61 6c 6c 65   have been calle
a430: 64 20 62 79 20 74 68 69 73 20 75 73 65 72 20 66  d by this user f
a440: 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20 69 6d  unction,.  ** im
a450: 6d 65 64 69 61 74 65 6c 79 20 63 61 6c 6c 20 74  mediately call t
a460: 68 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 6f  he destructor fo
a470: 72 20 61 6e 79 20 6e 6f 6e 2d 73 74 61 74 69 63  r any non-static
a480: 20 76 61 6c 75 65 73 2e 0a 20 20 2a 2f 0a 20 20   values..  */.  
a490: 69 66 28 20 63 74 78 2e 70 56 64 62 65 46 75 6e  if( ctx.pVdbeFun
a4a0: 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  c ){.    sqlite3
a4b0: 56 64 62 65 44 65 6c 65 74 65 41 75 78 44 61 74  VdbeDeleteAuxDat
a4c0: 61 28 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2c  a(ctx.pVdbeFunc,
a4d0: 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 70   pOp->p1);.    p
a4e0: 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63  Op->p4.pVdbeFunc
a4f0: 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63   = ctx.pVdbeFunc
a500: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70  ;.    pOp->p4typ
a510: 65 20 3d 20 50 34 5f 56 44 42 45 46 55 4e 43 3b  e = P4_VDBEFUNC;
a520: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68  .  }..  /* If th
a530: 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  e function retur
a540: 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68  ned an error, th
a550: 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  row an exception
a560: 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73   */.  if( ctx.is
a570: 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  Error ){.    sql
a580: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
a590: 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
a5a0: 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
a5b0: 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29  ue_text(&ctx.s))
a5c0: 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69  ;.    rc = ctx.i
a5d0: 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  sError;.  }..  /
a5e0: 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
a5f0: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
a600: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
a610: 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  P3 */.  sqlite3V
a620: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
a630: 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69  g(&ctx.s, encodi
a640: 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ng);.  sqlite3Vd
a650: 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20  beMemMove(pOut, 
a660: 26 63 74 78 2e 73 29 3b 0a 20 20 69 66 28 20 73  &ctx.s);.  if( s
a670: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
a680: 42 69 67 28 70 4f 75 74 29 20 29 7b 0a 20 20 20  Big(pOut) ){.   
a690: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
a6a0: 20 7d 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52   }.  REGISTER_TR
a6b0: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ACE(pOp->p3, pOu
a6c0: 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
a6d0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
a6e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a6f0: 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50  Opcode: BitAnd P
a700: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
a710: 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77  * Take the bit-w
a720: 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76  ise AND of the v
a730: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
a740: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
a750: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
a760: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
a770: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
a780: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
a790: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
a7a0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
a7b0: 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33  : BitOr P1 P2 P3
a7c0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20   * *.**.** Take 
a7d0: 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20  the bit-wise OR 
a7e0: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
a7f0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
a800: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
a810: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
a820: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
a830: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
a840: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
a850: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
a860: 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c  * Opcode: ShiftL
a870: 65 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  eft P1 P2 P3 * *
a880: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
a890: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
a8a0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
a8b0: 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65   the left by the
a8c0: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
a8d0: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
a8e0: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
a8f0: 65 67 69 73 65 72 20 50 31 2e 0a 2a 2a 20 53 74  egiser P1..** St
a900: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
a910: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
a920: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
a930: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
a940: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
a950: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
a960: 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33  ftRight P1 P2 P3
a970: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74   * *.**.** Shift
a980: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
a990: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
a9a0: 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62  2 to the right b
a9b0: 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  y the.** number 
a9c0: 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65  of bits specifie
a9d0: 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72  d by the integer
a9e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
a9f0: 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65  .** Store the re
aa00: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
aa10: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
aa20: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
aa30: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
aa40: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
aa50: 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20  BitAnd:         
aa60: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
aa70: 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e  as TK_BITAND, in
aa80: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
aa90: 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20  case OP_BitOr:  
aaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aab0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
aac0: 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TOR, in1, in2, o
aad0: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
aae0: 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20  hiftLeft:       
aaf0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ab00: 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31  s TK_LSHIFT, in1
ab10: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
ab20: 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68  ase OP_ShiftRigh
ab30: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
ab40: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48  * same as TK_RSH
ab50: 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  IFT, in1, in2, o
ab60: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 61 2c 20  ut3 */.  i64 a, 
ab70: 62 3b 0a 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  b;..  if( (pIn1-
ab80: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
ab90: 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c  lags) & MEM_Null
aba0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
abb0: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
abc0: 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ut);.    break;.
abd0: 20 20 7d 0a 20 20 61 20 3d 20 73 71 6c 69 74 65    }.  a = sqlite
abe0: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
abf0: 6e 32 29 3b 0a 20 20 62 20 3d 20 73 71 6c 69 74  n2);.  b = sqlit
ac00: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
ac10: 49 6e 31 29 3b 0a 20 20 73 77 69 74 63 68 28 20  In1);.  switch( 
ac20: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
ac30: 20 20 20 63 61 73 65 20 4f 50 5f 42 69 74 41 6e     case OP_BitAn
ac40: 64 3a 20 20 20 20 20 20 61 20 26 3d 20 62 3b 20  d:      a &= b; 
ac50: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
ac60: 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20  ase OP_BitOr:   
ac70: 20 20 20 20 61 20 7c 3d 20 62 3b 20 20 20 20 20      a |= b;     
ac80: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
ac90: 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20  OP_ShiftLeft:   
aca0: 61 20 3c 3c 3d 20 62 3b 20 20 20 20 62 72 65 61  a <<= b;    brea
acb0: 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20  k;.    default: 
acc0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
acd0: 63 6f 64 65 3d 3d 4f 50 5f 53 68 69 66 74 52 69  code==OP_ShiftRi
ace0: 67 68 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20  ght );.         
acf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad00: 61 20 3e 3e 3d 20 62 3b 20 20 20 20 62 72 65 61  a >>= b;    brea
ad10: 6b 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  k;.  }.  pOut->u
ad20: 2e 69 20 3d 20 61 3b 0a 20 20 4d 65 6d 53 65 74  .i = a;.  MemSet
ad30: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
ad40: 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b  EM_Int);.  break
ad50: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
ad60: 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20  AddImm  P1 P2 * 
ad70: 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74  * *.** .** Add t
ad80: 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20 74  he constant P2 t
ad90: 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  o the value in r
ada0: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54  egister P1..** T
adb0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77  he result is alw
adc0: 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ays an integer..
add0: 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61  **.** To force a
ade0: 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f 20 62  ny register to b
adf0: 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75  e an integer, ju
ae00: 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73  st add 0..*/.cas
ae10: 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20  e OP_AddImm: {  
ae20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
ae30: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
ae40: 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
ae50: 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  In1);.  pIn1->u.
ae60: 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  i += pOp->p2;.  
ae70: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
ae80: 6f 64 65 3a 20 46 6f 72 63 65 49 6e 74 20 50 31  ode: ForceInt P1
ae90: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
aea0: 20 43 6f 6e 76 65 72 74 20 76 61 6c 75 65 20 69   Convert value i
aeb0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e  n register P1 in
aec0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  to an integer.  
aed0: 49 66 20 74 68 65 20 76 61 6c 75 65 20 0a 2a 2a  If the value .**
aee0: 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 6e 75   in P1 is not nu
aef0: 6d 65 72 69 63 20 28 6d 65 61 6e 69 6e 67 20 74  meric (meaning t
af00: 68 61 74 20 69 73 20 69 73 20 61 20 4e 55 4c 4c  hat is is a NULL
af10: 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61   or a string tha
af20: 74 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 6c 6f  t.** does not lo
af30: 6f 6b 20 6c 69 6b 65 20 61 6e 20 69 6e 74 65 67  ok like an integ
af40: 65 72 20 6f 72 20 66 6c 6f 61 74 69 6e 67 20 70  er or floating p
af50: 6f 69 6e 74 20 6e 75 6d 62 65 72 29 20 74 68 65  oint number) the
af60: 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e  n.** jump to P2.
af70: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69    If the value i
af80: 6e 20 50 31 20 69 73 20 6e 75 6d 65 72 69 63 20  n P1 is numeric 
af90: 74 68 65 6e 0a 2a 2a 20 63 6f 6e 76 65 72 74 20  then.** convert 
afa0: 69 74 20 69 6e 74 6f 20 74 68 65 20 6c 65 61 73  it into the leas
afb0: 74 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 69  t integer that i
afc0: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
afd0: 72 20 65 71 75 61 6c 20 74 6f 20 69 74 73 0a 2a  r equal to its.*
afe0: 2a 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  * current value 
aff0: 69 66 20 50 33 3d 3d 30 2c 20 6f 72 20 74 6f 20  if P3==0, or to 
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 73 74 72 69 63 74  r that is strict
b020: 6c 79 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68  ly.** greater th
b030: 61 6e 20 69 74 73 20 63 75 72 72 65 6e 74 20 76  an its current v
b040: 61 6c 75 65 20 69 66 20 50 33 3d 3d 31 2e 0a 2a  alue if P3==1..*
b050: 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 72 63 65 49  /.case OP_ForceI
b060: 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
b070: 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
b080: 0a 20 20 69 36 34 20 76 3b 0a 20 20 61 70 70 6c  .  i64 v;.  appl
b090: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
b0a0: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
b0b0: 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
b0c0: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
b0d0: 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  s & (MEM_Int|MEM
b0e0: 5f 52 65 61 6c 29 29 3d 3d 30 20 29 7b 0a 20 20  _Real))==0 ){.  
b0f0: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
b100: 20 31 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   1;.    break;. 
b110: 20 7d 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66   }.  if( pIn1->f
b120: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
b130: 7b 0a 20 20 20 20 76 20 3d 20 70 49 6e 31 2d 3e  {.    v = pIn1->
b140: 75 2e 69 20 2b 20 28 70 4f 70 2d 3e 70 33 21 3d  u.i + (pOp->p3!=
b150: 30 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  0);.  }else{.   
b160: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
b170: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
b180: 29 3b 0a 20 20 20 20 76 20 3d 20 28 73 71 6c 69  );.    v = (sqli
b190: 74 65 33 5f 69 6e 74 36 34 29 70 49 6e 31 2d 3e  te3_int64)pIn1->
b1a0: 72 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 31 2d  r;.    if( pIn1-
b1b0: 3e 72 3e 28 64 6f 75 62 6c 65 29 76 20 29 20 76  >r>(double)v ) v
b1c0: 2b 2b 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ++;.    if( pOp-
b1d0: 3e 70 33 20 26 26 20 70 49 6e 31 2d 3e 72 3d 3d  >p3 && pIn1->r==
b1e0: 28 64 6f 75 62 6c 65 29 76 20 29 20 76 2b 2b 3b  (double)v ) v++;
b1f0: 0a 20 20 7d 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  .  }.  pIn1->u.i
b200: 20 3d 20 76 3b 0a 20 20 4d 65 6d 53 65 74 54 79   = v;.  MemSetTy
b210: 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d  peFlag(pIn1, MEM
b220: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
b230: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  }../* Opcode: Mu
b240: 73 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20  stBeInt P1 P2 * 
b250: 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65  * *.** .** Force
b260: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b270: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
b280: 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20  an integer.  If 
b290: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
b2a0: 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74  P1 is not an int
b2b0: 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20  eger and cannot 
b2c0: 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
b2d0: 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  o an integer.** 
b2e0: 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73  without data los
b2f0: 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  s, then jump imm
b300: 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20  ediately to P2, 
b310: 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72  or if P2==0.** r
b320: 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d  aise an SQLITE_M
b330: 49 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f  ISMATCH exceptio
b340: 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75  n..*/.case OP_Mu
b350: 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20  stBeInt: {      
b360: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
b370: 6e 31 20 2a 2f 0a 20 20 61 70 70 6c 79 41 66 66  n1 */.  applyAff
b380: 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49  inity(pIn1, SQLI
b390: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20  TE_AFF_NUMERIC, 
b3a0: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28  encoding);.  if(
b3b0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
b3c0: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
b3d0: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
b3e0: 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
b3f0: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b  SQLITE_MISMATCH;
b400: 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
b410: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
b420: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
b430: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
b440: 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
b450: 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  {.    MemSetType
b460: 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49  Flag(pIn1, MEM_I
b470: 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  nt);.  }.  break
b480: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
b490: 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20  RealAffinity P1 
b4a0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  * * * *.**.** If
b4b0: 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c   register P1 hol
b4c0: 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f  ds an integer co
b4d0: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72 65  nvert it to a re
b4e0: 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20  al value..**.** 
b4f0: 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
b500: 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63 74  sed when extract
b510: 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
b520: 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68  from a column th
b530: 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61  at.** has REAL a
b540: 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63  ffinity.  Such c
b550: 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79  olumn values may
b560: 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64   still be stored
b570: 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c   as.** integers,
b580: 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69 63   for space effic
b590: 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72  iency, but after
b5a0: 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77   extraction we w
b5b0: 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68  ant them.** to h
b5c0: 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20  ave only a real 
b5d0: 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  value..*/.case O
b5e0: 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20  P_RealAffinity: 
b5f0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
b600: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69     /* in1 */.  i
b610: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
b620: 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20   MEM_Int ){.    
b630: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
b640: 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  alify(pIn1);.  }
b650: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
b660: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
b670: 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  _CAST./* Opcode:
b680: 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20 2a   ToText P1 * * *
b690: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
b6a0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b6b0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 65  ster P1 to be te
b6c0: 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  xt..** If the va
b6d0: 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20  lue is numeric, 
b6e0: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
b6f0: 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68 65  string using the
b700: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
b710: 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f  f printf().  Blo
b720: 62 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e 63  b values are unc
b730: 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72  hanged and.** ar
b740: 65 20 61 66 74 65 72 77 61 72 64 73 20 73 69 6d  e afterwards sim
b750: 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64 20  ply interpreted 
b760: 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41  as text..**.** A
b770: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
b780: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
b790: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
b7a0: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
b7b0: 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a  .case OP_ToText:
b7c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
b7d0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b7e0: 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20 2a  K_TO_TEXT, in1 *
b7f0: 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  /.  if( pIn1->fl
b800: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
b810: 20 62 72 65 61 6b 3b 0a 20 20 61 73 73 65 72 74   break;.  assert
b820: 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f  ( MEM_Str==(MEM_
b830: 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20 70 49  Blob>>3) );.  pI
b840: 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 28 70 49  n1->flags |= (pI
b850: 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42 6c  n1->flags&MEM_Bl
b860: 6f 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c 79 41  ob)>>3;.  applyA
b870: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51  ffinity(pIn1, SQ
b880: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65  LITE_AFF_TEXT, e
b890: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 72 63 20 3d  ncoding);.  rc =
b8a0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
b8b0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  );.  assert( pIn
b8c0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  1->flags & MEM_S
b8d0: 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63  tr || db->malloc
b8e0: 46 61 69 6c 65 64 20 29 3b 0a 20 20 70 49 6e 31  Failed );.  pIn1
b8f0: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
b900: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
b910: 4d 5f 42 6c 6f 62 29 3b 0a 20 20 55 50 44 41 54  M_Blob);.  UPDAT
b920: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
b930: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
b940: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 42  ../* Opcode: ToB
b950: 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  lob P1 * * * *.*
b960: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
b970: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b980: 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c 4f 42   P1 to be a BLOB
b990: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
b9a0: 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f  e is numeric, co
b9b0: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74  nvert it to a st
b9c0: 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20 53  ring first..** S
b9d0: 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d 70 6c  trings are simpl
b9e0: 79 20 72 65 69 6e 74 65 72 70 72 65 74 65 64 20  y reinterpreted 
b9f0: 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20 6e 6f  as blobs with no
ba00: 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74 68   change.** to th
ba10: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74  e underlying dat
ba20: 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  a..**.** A NULL 
ba30: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
ba40: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
ba50: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
ba60: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
ba70: 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20 20  OP_ToBlob: {    
ba80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ba90: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 42   same as TK_TO_B
baa0: 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66  LOB, in1 */.  if
bab0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
bac0: 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b  MEM_Null ) break
bad0: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
bae0: 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29  lags & MEM_Blob)
baf0: 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79  ==0 ){.    apply
bb00: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53  Affinity(pIn1, S
bb10: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
bb20: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 61  encoding);.    a
bb30: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
bb40: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20  gs & MEM_Str || 
bb50: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
bb60: 20 29 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74   );.  }.  MemSet
bb70: 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d  TypeFlag(pIn1, M
bb80: 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 55 50 44 41  EM_Blob);.  UPDA
bb90: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
bba0: 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pIn1);.  break;.
bbb0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  }../* Opcode: To
bbc0: 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a 20 2a  Numeric P1 * * *
bbd0: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
bbe0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
bbf0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 6e 75  ster P1 to be nu
bc00: 6d 65 72 69 63 20 28 65 69 74 68 65 72 20 61 6e  meric (either an
bc10: 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72 20 61  .** integer or a
bc20: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20   floating-point 
bc30: 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66 20 74  number.).** If t
bc40: 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74  he value is text
bc50: 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f   or blob, try to
bc60: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
bc70: 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65  n using the.** e
bc80: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f  quivalent of ato
bc90: 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20 61 6e  i() or atof() an
bca0: 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20  d store 0 if no 
bcb0: 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20  such conversion 
bcc0: 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  .** is possible.
bcd0: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
bce0: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
bcf0: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
bd00: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
bd10: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
bd20: 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20 20 20  _ToNumeric: {   
bd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bd40: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
bd50: 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a 2f 0a  NUMERIC, in1 */.
bd60: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
bd70: 67 73 20 26 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  gs & (MEM_Null|M
bd80: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
bd90: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
bda0: 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69  te3VdbeMemNumeri
bdb0: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
bdc0: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
bdd0: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
bde0: 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  AST */../* Opcod
bdf0: 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20  e: ToInt P1 * * 
be00: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
be10: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
be20: 69 73 74 65 72 20 50 31 20 62 65 20 61 6e 20 69  ister P1 be an i
be30: 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54  nteger.  If.** T
be40: 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72 72  he value is curr
be50: 65 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d  ently a real num
be60: 62 65 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72  ber, drop its fr
be70: 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a  actional part..*
be80: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
be90: 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20  s text or blob, 
bea0: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
beb0: 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
bec0: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
bed0: 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28  ivalent of atoi(
bee0: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66  ) and store 0 if
bef0: 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73   no such convers
bf00: 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  ion is possible.
bf10: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
bf20: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
bf30: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
bf40: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
bf50: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
bf60: 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  _ToInt: {       
bf70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
bf80: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c  me as TK_TO_INT,
bf90: 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70   in1 */.  if( (p
bfa0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
bfb0: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
bfc0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
bfd0: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
bfe0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
bff0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
c000: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
c010: 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50 31 20 2a  ode: ToReal P1 *
c020: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
c030: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
c040: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
c050: 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  e a floating poi
c060: 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 49 66  nt number..** If
c070: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75   The value is cu
c080: 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74 65 67  rrently an integ
c090: 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 2e 0a  er, convert it..
c0a0: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
c0b0: 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c  is text or blob,
c0c0: 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   try to convert 
c0d0: 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  it to an integer
c0e0: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71   using the.** eq
c0f0: 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69  uivalent of atoi
c100: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 2e 30  () and store 0.0
c110: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
c120: 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62  ersion is possib
c130: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
c140: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
c150: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
c160: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
c170: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
c180: 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20 20 20   OP_ToReal: {   
c190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c1a0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
c1b0: 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  REAL, in1 */.  i
c1c0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
c1d0: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
c1e0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
c1f0: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31  eMemRealify(pIn1
c200: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
c210: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
c220: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a  TE_OMIT_CAST */.
c230: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50  ./* Opcode: Lt P
c240: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
c250: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20  .** Compare the 
c260: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
c270: 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49  er P1 and P3.  I
c280: 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31  f reg(P3)<reg(P1
c290: 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74  ) then.** jump t
c2a0: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a  o address P2.  .
c2b0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
c2c0: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
c2d0: 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20  it of P5 is set 
c2e0: 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50  and either reg(P
c2f0: 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29  1) or.** reg(P3)
c300: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
c310: 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66  ke the jump.  If
c320: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
c330: 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69  IFNULL .** bit i
c340: 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c  s clear then fal
c350: 6c 20 74 68 72 75 20 69 66 20 65 69 74 68 65 72  l thru if either
c360: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
c370: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
c380: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74  TE_AFF_MASK port
c390: 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62  ion of P5 must b
c3a0: 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68  e an affinity ch
c3b0: 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c  aracter -.** SQL
c3c0: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51  ITE_AFF_TEXT, SQ
c3d0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
c3e0: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
c3f0: 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  An attempt is ma
c400: 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65  de .** to coerce
c410: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63   both inputs acc
c420: 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61  ording to this a
c430: 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74  ffinity before t
c440: 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
c450: 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65   is made. If the
c460: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
c470: 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e   is 0x00, then n
c480: 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69  umeric.** affini
c490: 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65  ty is used. Note
c4a0: 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69   that the affini
c4b0: 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61  ty conversions a
c4c0: 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63  re stored.** bac
c4d0: 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74  k into the input
c4e0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
c4f0: 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f  d P3.  So this o
c500: 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a  pcode can cause.
c510: 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68  ** persistent ch
c520: 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65  anges to registe
c530: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a  rs P1 and P3..**
c540: 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e  .** Once any con
c550: 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61  versions have ta
c560: 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e  ken place, and n
c570: 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20  either value is 
c580: 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61  NULL, .** the va
c590: 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65  lues are compare
c5a0: 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  d. If both value
c5b0: 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e  s are blobs then
c5c0: 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20   memcmp() is.** 
c5d0: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
c5e0: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
c5f0: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
c600: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
c610: 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68  .** are text, th
c620: 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  en the appropria
c630: 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  te collating fun
c640: 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20  ction specified 
c650: 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65  in.** P4 is  use
c660: 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70  d to do the comp
c670: 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69  arison.  If P4 i
c680: 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20  s not specified 
c690: 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29  then.** memcmp()
c6a0: 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70   is used to comp
c6b0: 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e  are text string.
c6c0: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
c6d0: 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c   are.** numeric,
c6e0: 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20   then a numeric 
c6f0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73  comparison is us
c700: 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76  ed. If the two v
c710: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20  alues.** are of 
c720: 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c  different types,
c730: 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72   then numbers ar
c740: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
c750: 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67  s than.** string
c760: 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  s and strings ar
c770: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
c780: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a  s than blobs..**
c790: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
c7a0: 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66  E_STOREP2 bit of
c7b0: 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
c7c0: 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49   do not jump.  I
c7d0: 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65  nstead,.** store
c7e0: 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c   a boolean resul
c7f0: 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20  t (either 0, or 
c800: 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72  1, or NULL) in r
c810: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 2f  egister P2..*/./
c820: 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20  * Opcode: Ne P1 
c830: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
c840: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
c850: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
c860: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
c870: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
c880: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
c890: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
c8a0: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
c8b0: 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65   not equal.  See
c8c0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
c8d0: 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  or.** additional
c8e0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
c8f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50  ./* Opcode: Eq P
c900: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
c910: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
c920: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
c930: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
c940: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
c950: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
c960: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
c970: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
c980: 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65  re equal..** See
c990: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
c9a0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
c9b0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
c9c0: 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50   Opcode: Le P1 P
c9d0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
c9e0: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
c9f0: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
ca00: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
ca10: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
ca20: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
ca30: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
ca40: 50 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  P3 is less than 
ca50: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
ca60: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
ca70: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
ca80: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
ca90: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
caa0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
cab0: 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32  Opcode: Gt P1 P2
cac0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
cad0: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
cae0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
caf0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
cb00: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
cb10: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
cb20: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
cb30: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
cb40: 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
cb50: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
cb60: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
cb70: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
cb80: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
cb90: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65  */./* Opcode: Ge
cba0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
cbb0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
cbc0: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
cbd0: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
cbe0: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
cbf0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
cc00: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
cc10: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
cc20: 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
cc30: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
cc40: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
cc50: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
cc60: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
cc70: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
cc80: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a  ..*/.case OP_Eq:
cc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cca0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c  * same as TK_EQ,
ccb0: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
ccc0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20  */.case OP_Ne:  
ccd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cce0: 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a  same as TK_NE, j
ccf0: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
cd00: 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20  .case OP_Lt:    
cd10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
cd20: 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d  me as TK_LT, jum
cd30: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
cd40: 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20  ase OP_Le:      
cd50: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cd60: 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c   as TK_LE, jump,
cd70: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
cd80: 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20  e OP_Gt:        
cd90: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
cda0: 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69  s TK_GT, jump, i
cdb0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
cdc0: 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20  OP_Ge: {        
cdd0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
cde0: 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_GE, jump, in1
cdf0: 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 66  , in3 */.  int f
ce00: 6c 61 67 73 3b 0a 20 20 69 6e 74 20 72 65 73 3b  lags;.  int res;
ce10: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
ce20: 3b 0a 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e  ;..  flags = pIn
ce30: 31 2d 3e 66 6c 61 67 73 7c 70 49 6e 33 2d 3e 66  1->flags|pIn3->f
ce40: 6c 61 67 73 3b 0a 0a 20 20 69 66 28 20 66 6c 61  lags;..  if( fla
ce50: 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20  gs&MEM_Null ){. 
ce60: 20 20 20 2f 2a 20 49 66 20 65 69 74 68 65 72 20     /* If either 
ce70: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
ce80: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
ce90: 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a  is always NULL..
cea0: 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20      ** The jump 
ceb0: 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
cec0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
ced0: 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20  L bit is set..  
cee0: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70    */.    if( pOp
cef0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ->p5 & SQLITE_ST
cf00: 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 70  OREP2 ){.      p
cf10: 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
cf20: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 4d  Op->p2];.      M
cf30: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
cf40: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
cf50: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
cf60: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
cf70: 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  t);.    }else if
cf80: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
cf90: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b  TE_JUMPIFNULL ){
cfa0: 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
cfb0: 3e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20  >p2-1;.    }.   
cfc0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 61   break;.  }..  a
cfd0: 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
cfe0: 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  5 & SQLITE_AFF_M
cff0: 41 53 4b 3b 0a 20 20 69 66 28 20 61 66 66 69 6e  ASK;.  if( affin
d000: 69 74 79 20 29 7b 0a 20 20 20 20 61 70 70 6c 79  ity ){.    apply
d010: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61  Affinity(pIn1, a
d020: 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e  ffinity, encodin
d030: 67 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66  g);.    applyAff
d040: 69 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66 69  inity(pIn3, affi
d050: 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  nity, encoding);
d060: 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
d070: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
d080: 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e  COLLSEQ || pOp->
d090: 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20  p4.pColl==0 );. 
d0a0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
d0b0: 29 3b 0a 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  );.  ExpandBlob(
d0c0: 70 49 6e 33 29 3b 0a 20 20 72 65 73 20 3d 20 73  pIn3);.  res = s
d0d0: 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
d0e0: 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70  (pIn3, pIn1, pOp
d0f0: 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 73  ->p4.pColl);.  s
d100: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
d110: 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f  de ){.    case O
d120: 50 5f 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Eq:    res = r
d130: 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es==0;     break
d140: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65  ;.    case OP_Ne
d150: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d  :    res = res!=
d160: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
d170: 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20    case OP_Lt:   
d180: 20 72 65 73 20 3d 20 72 65 73 3c 30 3b 20 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 4c 65 3a 20 20 20 20 72 65 73  se OP_Le:    res
d1b0: 20 3d 20 72 65 73 3c 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 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Gt:    res = r
d1e0: 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es>0;      break
d1f0: 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20  ;.    default:  
d200: 20 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d       res = res>=
d210: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
d220: 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  }..  if( pOp->p5
d230: 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
d240: 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20  2 ){.    pOut = 
d250: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
d260: 5d 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  ];.    MemSetTyp
d270: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
d280: 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Int);.    pOut->
d290: 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20 20 52  u.i = res;.    R
d2a0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
d2b0: 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
d2c0: 7d 65 6c 73 65 20 69 66 28 20 72 65 73 20 29 7b  }else if( res ){
d2d0: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
d2e0: 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  2-1;.  }.  break
d2f0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
d300: 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20  Permutation * * 
d310: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74  * P4 *.**.** Set
d320: 20 74 68 65 20 70 65 72 6d 75 61 74 69 6f 6e 20   the permuation 
d330: 75 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43  used by the OP_C
d340: 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20  ompare operator 
d350: 74 6f 20 62 65 20 74 68 65 20 61 72 72 61 79 0a  to be the array.
d360: 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69  ** of integers i
d370: 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n P4..**.** The 
d380: 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f  permutation is o
d390: 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20  nly valid until 
d3a0: 74 68 65 20 6e 65 78 74 20 4f 50 5f 50 65 72 6d  the next OP_Perm
d3b0: 75 74 61 74 69 6f 6e 2c 20 4f 50 5f 43 6f 6d 70  utation, OP_Comp
d3c0: 61 72 65 2c 0a 2a 2a 20 4f 50 5f 48 61 6c 74 2c  are,.** OP_Halt,
d3d0: 20 6f 72 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77   or OP_ResultRow
d3e0: 2e 20 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65  .  Typically the
d3f0: 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20   OP_Permutation 
d400: 73 68 6f 75 6c 64 20 6f 63 63 75 72 0a 2a 2a 20  should occur.** 
d410: 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f  immediately prio
d420: 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70  r to the OP_Comp
d430: 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  are..*/.case OP_
d440: 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20  Permutation: {. 
d450: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
d460: 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
d470: 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
d480: 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61  Op->p4.ai );.  a
d490: 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70  Permute = pOp->p
d4a0: 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.ai;.  break;.}
d4b0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d  ../* Opcode: Com
d4c0: 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
d4d0: 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65   *.**.** Compare
d4e0: 20 74 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72   to vectors of r
d4f0: 65 67 69 73 74 65 72 73 20 69 6e 20 72 65 67 28  egisters in reg(
d500: 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31  P1)..reg(P1+P3-1
d510: 29 20 28 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 6f  ) (all this.** o
d520: 6e 65 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72  ne "A") and in r
d530: 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50  eg(P2)..reg(P2+P
d540: 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76  3-1) ("B").  Sav
d550: 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a  e the result of.
d560: 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** the compariso
d570: 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65  n for use by the
d580: 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e   next OP_Jump in
d590: 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 50 34  struct..**.** P4
d5a0: 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   is a KeyInfo st
d5b0: 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66  ructure that def
d5c0: 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ines collating s
d5d0: 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72  equences and sor
d5e0: 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20  t.** orders for 
d5f0: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
d600: 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
d610: 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69   applies to regi
d620: 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  sters.** only.  
d630: 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d  The KeyInfo elem
d640: 65 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65  ents are used se
d650: 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a  quentially..**.*
d660: 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * The comparison
d670: 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61   is a sort compa
d680: 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20  rison, so NULLs 
d690: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a  compare equal,.*
d6a0: 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73  * NULLs are less
d6b0: 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e   than numbers, n
d6c0: 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20  umbers are less 
d6d0: 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a  than strings,.**
d6e0: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
d6f0: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
d700: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d  ..*/.case OP_Com
d710: 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 20  pare: {.  int n 
d720: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 6e 74  = pOp->p3;.  int
d730: 20 69 2c 20 70 31 2c 20 70 32 3b 0a 20 20 63 6f   i, p1, p2;.  co
d740: 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  nst KeyInfo *pKe
d750: 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
d760: 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
d770: 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73  rt( n>0 );.  ass
d780: 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30  ert( pKeyInfo!=0
d790: 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e   );.  p1 = pOp->
d7a0: 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31  p1;.  assert( p1
d7b0: 3e 30 20 26 26 20 70 31 2b 6e 2d 31 3c 70 2d 3e  >0 && p1+n-1<p->
d7c0: 6e 4d 65 6d 20 29 3b 0a 20 20 70 32 20 3d 20 70  nMem );.  p2 = p
d7d0: 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
d7e0: 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 2d 31  ( p2>0 && p2+n-1
d7f0: 3c 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 66 6f  <p->nMem );.  fo
d800: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29  r(i=0; i<n; i++)
d810: 7b 0a 20 20 20 20 69 6e 74 20 69 64 78 20 3d 20  {.    int idx = 
d820: 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d  aPermute ? aPerm
d830: 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20  ute[i] : i;.    
d840: 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20  CollSeq *pColl; 
d850: 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
d860: 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20  sequence to use 
d870: 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a  on this term */.
d880: 20 20 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20      int bRev;   
d890: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66         /* True f
d8a0: 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f  or DESCENDING so
d8b0: 72 74 20 6f 72 64 65 72 20 2a 2f 0a 20 20 20 20  rt order */.    
d8c0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
d8d0: 31 2b 69 64 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b  1+idx, &p->aMem[
d8e0: 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
d8f0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
d900: 69 64 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70 32  idx, &p->aMem[p2
d910: 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65  +idx]);.    asse
d920: 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e  rt( i<pKeyInfo->
d930: 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43  nField );.    pC
d940: 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  oll = pKeyInfo->
d950: 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52  aColl[i];.    bR
d960: 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ev = pKeyInfo->a
d970: 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20  SortOrder[i];.  
d980: 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c    iCompare = sql
d990: 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26  ite3MemCompare(&
d9a0: 70 2d 3e 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c  p->aMem[p1+idx],
d9b0: 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 2b 69 64 78   &p->aMem[p2+idx
d9c0: 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
d9d0: 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
d9e0: 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
d9f0: 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
da00: 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
da10: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  k;.    }.  }.  a
da20: 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62  Permute = 0;.  b
da30: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
da40: 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
da50: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
da60: 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
da70: 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
da80: 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
da90: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
daa0: 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
dab0: 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
dac0: 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
dad0: 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
dae0: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
daf0: 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
db00: 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
db10: 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
db20: 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
db30: 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
db40: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
db50: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
db60: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
db70: 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65  >p1 - 1;.  }else
db80: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30   if( iCompare==0
db90: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
dba0: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
dbb0: 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  e{.    pc = pOp-
dbc0: 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p3 - 1;.  }.  b
dbd0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
dbe0: 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33  de: And P1 P2 P3
dbf0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20   * *.**.** Take 
dc00: 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20  the logical AND 
dc10: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
dc20: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
dc30: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74  d P2 and.** writ
dc40: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74  e the result int
dc50: 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
dc60: 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
dc70: 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66 61  1 or P2 is 0 (fa
dc80: 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  lse) then the re
dc90: 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69  sult is 0 even i
dca0: 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69  f.** the other i
dcb0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
dcc0: 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f   NULL and true o
dcd0: 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65  r two NULLs give
dce0: 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  .** a NULL outpu
dcf0: 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
dd00: 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a   Or P1 P2 P3 * *
dd10: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
dd20: 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68  logical OR of th
dd30: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
dd40: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
dd50: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
dd60: 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74  answer in regist
dd70: 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
dd80: 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
dd90: 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65  is nonzero (true
dda0: 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
ddb0: 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a  t is 1 (true).**
ddc0: 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68   even if the oth
ddd0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
dde0: 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61  .  A NULL and fa
ddf0: 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  lse or two NULLs
de00: 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20  .** give a NULL 
de10: 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
de20: 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20  OP_And:         
de30: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
de40: 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  TK_AND, in1, in2
de50: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
de60: 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Or: {         
de70: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
de80: 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  K_OR, in1, in2, 
de90: 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31  out3 */.  int v1
dea0: 2c 20 76 32 3b 20 20 20 20 2f 2a 20 30 3d 3d 46  , v2;    /* 0==F
deb0: 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32  ALSE, 1==TRUE, 2
dec0: 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c  ==UNKNOWN or NUL
ded0: 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 70 49 6e 31  L */..  if( pIn1
dee0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
def0: 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32  ll ){.    v1 = 2
df00: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76  ;.  }else{.    v
df10: 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  1 = sqlite3VdbeI
df20: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  ntValue(pIn1)!=0
df30: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 49 6e 32  ;.  }.  if( pIn2
df40: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
df50: 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32  ll ){.    v2 = 2
df60: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76  ;.  }else{.    v
df70: 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  2 = sqlite3VdbeI
df80: 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30  ntValue(pIn2)!=0
df90: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
dfa0: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20  >opcode==OP_And 
dfb0: 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
dfc0: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
dfd0: 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20  r and_logic[] = 
dfe0: 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c  { 0, 0, 0, 0, 1,
dff0: 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20   2, 0, 2, 2 };. 
e000: 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69     v1 = and_logi
e010: 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65  c[v1*3+v2];.  }e
e020: 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20  lse{.    static 
e030: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
e040: 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d  har or_logic[] =
e050: 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31   { 0, 1, 2, 1, 1
e060: 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a  , 1, 2, 1, 2 };.
e070: 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69      v1 = or_logi
e080: 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a  c[v1*3+v2];.  }.
e090: 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20    if( v1==2 ){. 
e0a0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
e0b0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
e0c0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
e0d0: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a  pOut->u.i = v1;.
e0e0: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
e0f0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
e100: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
e110: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
e120: 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  t P1 * * * *.**.
e130: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
e140: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
e150: 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
e160: 61 6e 20 76 61 6c 75 65 2e 20 20 52 65 70 6c 61  an value.  Repla
e170: 63 65 20 69 74 0a 2a 2a 20 77 69 74 68 20 69 74  ce it.** with it
e180: 73 20 63 6f 6d 70 6c 65 6d 65 6e 74 2e 20 20 49  s complement.  I
e190: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
e1a0: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 4e 55  egister P1 is NU
e1b0: 4c 4c 20 69 74 73 20 76 61 6c 75 65 0a 2a 2a 20  LL its value.** 
e1c0: 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f  is unchanged..*/
e1d0: 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20  .case OP_Not: { 
e1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e1f0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54  * same as TK_NOT
e200: 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 70  , in1 */.  if( p
e210: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
e220: 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 20 20  _Null ) break;  
e230: 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 74 6f  /* Do nothing to
e240: 20 4e 55 4c 4c 73 20 2a 2f 0a 20 20 73 71 6c 69   NULLs */.  sqli
e250: 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
e260: 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49  rify(pIn1);.  pI
e270: 6e 31 2d 3e 75 2e 69 20 3d 20 21 70 49 6e 31 2d  n1->u.i = !pIn1-
e280: 3e 75 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20  >u.i;.  assert( 
e290: 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
e2a0: 49 6e 74 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Int );.  break;.
e2b0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
e2c0: 74 4e 6f 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  tNot P1 * * * *.
e2d0: 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
e2e0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
e2f0: 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e  egister P1 as an
e300: 20 69 6e 74 65 67 65 72 2e 20 20 52 65 70 6c 61   integer.  Repla
e310: 63 65 20 69 74 0a 2a 2a 20 77 69 74 68 20 69 74  ce it.** with it
e320: 73 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e  s ones-complemen
e330: 74 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  t.  If the value
e340: 20 69 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 4e   is originally N
e350: 55 4c 4c 2c 20 6c 65 61 76 65 0a 2a 2a 20 69 74  ULL, leave.** it
e360: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 63   unchanged..*/.c
e370: 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b  ase OP_BitNot: {
e380: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e390: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f  same as TK_BITNO
e3a0: 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20  T, in1 */.  if( 
e3b0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
e3c0: 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 20  M_Null ) break; 
e3d0: 20 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 74   /* Do nothing t
e3e0: 6f 20 4e 55 4c 4c 73 20 2a 2f 0a 20 20 73 71 6c  o NULLs */.  sql
e3f0: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
e400: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
e410: 49 6e 31 2d 3e 75 2e 69 20 3d 20 7e 70 49 6e 31  In1->u.i = ~pIn1
e420: 2d 3e 75 2e 69 3b 0a 20 20 61 73 73 65 72 74 28  ->u.i;.  assert(
e430: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
e440: 5f 49 6e 74 20 29 3b 0a 20 20 62 72 65 61 6b 3b  _Int );.  break;
e450: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
e460: 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  f P1 P2 P3 * *.*
e470: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
e480: 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
e490: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74  register P1 is t
e4a0: 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  rue.  The value 
e4b0: 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65  is.** is conside
e4c0: 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20 69  red true if it i
e4d0: 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f  s numeric and no
e4e0: 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  n-zero.  If the 
e4f0: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
e500: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
e510: 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20   the jump if P3 
e520: 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f  is true..*/./* O
e530: 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20  pcode: IfNot P1 
e540: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
e550: 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
e560: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
e570: 74 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e  ter P1 is False.
e580: 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a    The value is.*
e590: 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
e5a0: 74 72 75 65 20 69 66 20 69 74 20 68 61 73 20 61  true if it has a
e5b0: 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f   numeric value o
e5c0: 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  f zero.  If the 
e5d0: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
e5e0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
e5f0: 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20   the jump if P3 
e600: 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 63 61 73 65  is true..*/.case
e610: 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20   OP_If:         
e620: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
e630: 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in1 */.case OP_
e640: 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  IfNot: {        
e650: 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
e660: 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 69   */.  int c;.  i
e670: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
e680: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
e690: 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   c = pOp->p3;.  
e6a0: 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51  }else{.#ifdef SQ
e6b0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
e6c0: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d  NG_POINT.    c =
e6d0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
e6e0: 61 6c 75 65 28 70 49 6e 31 29 3b 0a 23 65 6c 73  alue(pIn1);.#els
e6f0: 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65  e.    c = sqlite
e700: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
e710: 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69  In1)!=0.0;.#endi
e720: 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  f.    if( pOp->o
e730: 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20  pcode==OP_IfNot 
e740: 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20  ) c = !c;.  }.  
e750: 69 66 28 20 63 20 29 7b 0a 20 20 20 20 70 63 20  if( c ){.    pc 
e760: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
e770: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
e780: 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50  Opcode: IsNull P
e790: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
e7a0: 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
e7b0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
e7c0: 69 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c  ister P1 is NULL
e7d0: 2e 20 20 49 66 20 50 33 20 69 73 20 67 72 65 61  .  If P3 is grea
e7e0: 74 65 72 0a 2a 2a 20 74 68 61 6e 20 7a 65 72 6f  ter.** than zero
e7f0: 2c 20 74 68 65 6e 20 63 68 65 63 6b 20 61 6c 6c  , then check all
e800: 20 76 61 6c 75 65 73 20 72 65 67 28 50 31 29 2c   values reg(P1),
e810: 20 72 65 67 28 50 31 2b 31 29 2c 20 0a 2a 2a 20   reg(P1+1), .** 
e820: 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2c 20  reg(P1+2), ..., 
e830: 72 65 67 28 50 31 2b 50 33 2d 31 29 2e 0a 2a 2f  reg(P1+P3-1)..*/
e840: 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a  .case OP_IsNull:
e850: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
e860: 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55   same as TK_ISNU
e870: 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f  LL, jump, in1 */
e880: 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e  .  int n = pOp->
e890: 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p3;.  assert( pO
e8a0: 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p3==0 || pOp-
e8b0: 3e 70 31 3e 30 20 29 3b 0a 20 20 64 6f 7b 0a 20  >p1>0 );.  do{. 
e8c0: 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
e8d0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
e8e0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  =0 ){.      pc =
e8f0: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
e900: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
e910: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d  .    pIn1++;.  }
e920: 77 68 69 6c 65 28 20 2d 2d 6e 20 3e 20 30 20 29  while( --n > 0 )
e930: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
e940: 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c   Opcode: NotNull
e950: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
e960: 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
e970: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
e980: 67 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74  gister P1 is not
e990: 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65   NULL.  .*/.case
e9a0: 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20   OP_NotNull: {  
e9b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
e9c0: 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c  e as TK_NOTNULL,
e9d0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
e9e0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
e9f0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20   & MEM_Null)==0 
ea00: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
ea10: 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
ea20: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
ea30: 64 65 3a 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e  de: SetNumColumn
ea40: 73 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  s * P2 * * *.**.
ea50: 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 73  ** This opcode s
ea60: 65 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ets the number o
ea70: 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 74 68  f columns for th
ea80: 65 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20  e cursor opened 
ea90: 62 79 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  by the.** follow
eaa0: 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ing instruction 
eab0: 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  to P2..**.** An 
eac0: 4f 50 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73  OP_SetNumColumns
ead0: 20 69 73 20 6f 6e 6c 79 20 75 73 65 66 75 6c 20   is only useful 
eae0: 69 66 20 69 74 20 6f 63 63 75 72 73 20 69 6d 6d  if it occurs imm
eaf0: 65 64 69 61 74 65 6c 79 20 62 65 66 6f 72 65 20  ediately before 
eb00: 0a 2a 2a 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  .** one of the f
eb10: 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73  ollowing opcodes
eb20: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 4f 70 65 6e  :.**.**     Open
eb30: 52 65 61 64 0a 2a 2a 20 20 20 20 20 4f 70 65 6e  Read.**     Open
eb40: 57 72 69 74 65 0a 2a 2a 20 20 20 20 20 4f 70 65  Write.**     Ope
eb50: 6e 50 73 65 75 64 6f 0a 2a 2a 0a 2a 2a 20 49 66  nPseudo.**.** If
eb60: 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   the OP_Column o
eb70: 70 63 6f 64 65 20 69 73 20 74 6f 20 62 65 20 65  pcode is to be e
eb80: 78 65 63 75 74 65 64 20 6f 6e 20 61 20 63 75 72  xecuted on a cur
eb90: 73 6f 72 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69  sor, then.** thi
eba0: 73 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65  s opcode must be
ebb0: 20 70 72 65 73 65 6e 74 20 69 6d 6d 65 64 69 61   present immedia
ebc0: 74 65 6c 79 20 62 65 66 6f 72 65 20 74 68 65 20  tely before the 
ebd0: 6f 70 63 6f 64 65 20 74 68 61 74 0a 2a 2a 20 6f  opcode that.** o
ebe0: 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 2e  pens the cursor.
ebf0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 4e  .*/.case OP_SetN
ec00: 75 6d 43 6f 6c 75 6d 6e 73 3a 20 7b 0a 20 20 62  umColumns: {.  b
ec10: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
ec20: 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32  de: Column P1 P2
ec30: 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49   P3 P4 *.**.** I
ec40: 6e 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74  nterpret the dat
ec50: 61 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31  a that cursor P1
ec60: 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20   points to as a 
ec70: 73 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20  structure built 
ec80: 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b  using.** the Mak
ec90: 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
eca0: 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d  ion.  (See the M
ecb0: 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
ecc0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a   for additional.
ecd0: 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
ece0: 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20  bout the format 
ecf0: 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45  of the data.)  E
ed00: 78 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68  xtract the P2-th
ed10: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20   column.** from 
ed20: 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66  this record.  If
ed30: 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20   there are less 
ed40: 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20  that (P2+1) .** 
ed50: 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65  values in the re
ed60: 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20  cord, extract a 
ed70: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
ed80: 76 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20  value extracted 
ed90: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
eda0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
edb0: 49 66 20 74 68 65 20 4b 65 79 41 73 44 61 74 61  If the KeyAsData
edc0: 20 6f 70 63 6f 64 65 20 68 61 73 20 70 72 65 76   opcode has prev
edd0: 69 6f 75 73 6c 79 20 65 78 65 63 75 74 65 64 20  iously executed 
ede0: 6f 6e 20 74 68 69 73 20 63 75 72 73 6f 72 2c 20  on this cursor, 
edf0: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 66 69 65 6c  then the.** fiel
ee00: 64 20 6d 69 67 68 74 20 62 65 20 65 78 74 72 61  d might be extra
ee10: 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20 6b 65  cted from the ke
ee20: 79 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68  y rather than th
ee30: 65 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 49 66  e data..**.** If
ee40: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74   the column cont
ee50: 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20  ains fewer than 
ee60: 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20  P2 fields, then 
ee70: 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20  extract a NULL. 
ee80: 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50   Or,.** if the P
ee90: 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  4 argument is a 
eea0: 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76  P4_MEM use the v
eeb0: 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61  alue of the P4 a
eec0: 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68  rgument as.** th
eed0: 65 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 63 61 73  e result..*/.cas
eee0: 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20  e OP_Column: {. 
eef0: 20 75 33 32 20 70 61 79 6c 6f 61 64 53 69 7a 65   u32 payloadSize
ef00: 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66  ;   /* Number of
ef10: 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
ef20: 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31  cord */.  int p1
ef30: 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 20 2f 2a 20   = pOp->p1;  /* 
ef40: 50 31 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  P1 value of the 
ef50: 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  opcode */.  int 
ef60: 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 20 20 2f  p2 = pOp->p2;  /
ef70: 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * column number 
ef80: 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20  to retrieve */. 
ef90: 20 43 75 72 73 6f 72 20 2a 70 43 20 3d 20 30 3b   Cursor *pC = 0;
efa0: 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
efb0: 63 75 72 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72  cursor */.  char
efc0: 20 2a 7a 52 65 63 3b 20 20 20 20 20 20 20 20 2f   *zRec;        /
efd0: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d  * Pointer to com
efe0: 70 6c 65 74 65 20 72 65 63 6f 72 64 2d 64 61 74  plete record-dat
eff0: 61 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20  a */.  BtCursor 
f000: 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65  *pCrsr;   /* The
f010: 20 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f   BTree cursor */
f020: 0a 20 20 75 33 32 20 2a 61 54 79 70 65 3b 20 20  .  u32 *aType;  
f030: 20 20 20 20 20 20 2f 2a 20 61 54 79 70 65 5b 69        /* aType[i
f040: 5d 20 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65  ] holds the nume
f050: 72 69 63 20 74 79 70 65 20 6f 66 20 74 68 65 20  ric type of the 
f060: 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  i-th column */. 
f070: 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20   u32 *aOffset;  
f080: 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69      /* aOffset[i
f090: 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73  ] is offset to s
f0a0: 74 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72  tart of data for
f0b0: 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   i-th column */.
f0c0: 20 20 75 33 32 20 6e 46 69 65 6c 64 3b 20 20 20    u32 nField;   
f0d0: 20 20 20 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f       /* number o
f0e0: 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
f0f0: 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
f100: 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  len;           /
f110: 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  * The length of 
f120: 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64  the serialized d
f130: 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ata for the colu
f140: 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20  mn */.  int i;  
f150: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
f160: 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
f170: 63 68 61 72 20 2a 7a 44 61 74 61 3b 20 20 20 20  char *zData;    
f180: 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68     /* Part of th
f190: 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
f1a0: 65 63 6f 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20  ecoded */.  Mem 
f1b0: 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f  *pDest;        /
f1c0: 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65  * Where to write
f1d0: 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76   the extracted v
f1e0: 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d  alue */.  Mem sM
f1f0: 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
f200: 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20  For storing the 
f210: 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
f220: 6f 64 65 64 20 2a 2f 0a 0a 20 20 73 4d 65 6d 2e  oded */..  sMem.
f230: 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 73 4d 65  flags = 0;.  sMe
f240: 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 73 4d 65 6d  m.db = 0;.  sMem
f250: 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  .zMalloc = 0;.  
f260: 61 73 73 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43  assert( p1<p->nC
f270: 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
f280: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
f290: 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
f2a0: 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 70   );.  pDest = &p
f2b0: 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
f2c0: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
f2d0: 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c  g(pDest, MEM_Nul
f2e0: 6c 29 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20 62  l);..  /* This b
f2f0: 6c 6f 63 6b 20 73 65 74 73 20 74 68 65 20 76 61  lock sets the va
f300: 72 69 61 62 6c 65 20 70 61 79 6c 6f 61 64 53 69  riable payloadSi
f310: 7a 65 20 74 6f 20 62 65 20 74 68 65 20 74 6f 74  ze to be the tot
f320: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a  al number of.  *
f330: 2a 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72  * bytes in the r
f340: 65 63 6f 72 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ecord..  **.  **
f350: 20 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f 20   zRec is set to 
f360: 62 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  be the complete 
f370: 74 65 78 74 20 6f 66 20 74 68 65 20 72 65 63 6f  text of the reco
f380: 72 64 20 69 66 20 69 74 20 69 73 20 61 76 61 69  rd if it is avai
f390: 6c 61 62 6c 65 2e 0a 20 20 2a 2a 20 54 68 65 20  lable..  ** The 
f3a0: 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20  complete record 
f3b0: 74 65 78 74 20 69 73 20 61 6c 77 61 79 73 20 61  text is always a
f3c0: 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 73 65  vailable for pse
f3d0: 75 64 6f 2d 74 61 62 6c 65 73 0a 20 20 2a 2a 20  udo-tables.  ** 
f3e0: 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 73  If the record is
f3f0: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 63 75 72   stored in a cur
f400: 73 6f 72 2c 20 74 68 65 20 63 6f 6d 70 6c 65 74  sor, the complet
f410: 65 20 72 65 63 6f 72 64 20 74 65 78 74 0a 20 20  e record text.  
f420: 2a 2a 20 6d 69 67 68 74 20 62 65 20 61 76 61 69  ** might be avai
f430: 6c 61 62 6c 65 20 69 6e 20 74 68 65 20 20 70 43  lable in the  pC
f440: 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20 4f  ->aRow cache.  O
f450: 72 20 69 74 20 6d 69 67 68 74 20 6e 6f 74 20 62  r it might not b
f460: 65 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 64  e..  ** If the d
f470: 61 74 61 20 69 73 20 75 6e 61 76 61 69 6c 61 62  ata is unavailab
f480: 6c 65 2c 20 20 7a 52 65 63 20 69 73 20 73 65 74  le,  zRec is set
f490: 20 74 6f 20 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a 20   to NULL..  **. 
f4a0: 20 2a 2a 20 57 65 20 61 6c 73 6f 20 63 6f 6d 70   ** We also comp
f4b0: 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ute the number o
f4c0: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
f4d0: 20 72 65 63 6f 72 64 2e 20 20 46 6f 72 20 63 75   record.  For cu
f4e0: 72 73 6f 72 73 2c 0a 20 20 2a 2a 20 74 68 65 20  rsors,.  ** the 
f4f0: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
f500: 73 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  s is stored in t
f510: 68 65 20 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64  he Cursor.nField
f520: 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20   element..  */. 
f530: 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
f540: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
f550: 21 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53  !=0 );.#ifndef S
f560: 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
f570: 41 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74  ALTABLE.  assert
f580: 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  ( pC->pVtabCurso
f590: 72 3d 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20  r==0 );.#endif. 
f5a0: 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72   if( pC->pCursor
f5b0: 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  !=0 ){.    /* Th
f5c0: 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72  e record is stor
f5d0: 65 64 20 69 6e 20 61 20 42 2d 54 72 65 65 20 2a  ed in a B-Tree *
f5e0: 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
f5f0: 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
f600: 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  to(pC);.    if( 
f610: 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
f620: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
f630: 20 20 7a 52 65 63 20 3d 20 30 3b 0a 20 20 20 20    zRec = 0;.    
f640: 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
f650: 73 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  sor;.    if( pC-
f660: 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
f670: 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20    payloadSize = 
f680: 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  0;.    }else if(
f690: 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
f6a0: 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b  ==p->cacheCtr ){
f6b0: 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69  .      payloadSi
f6c0: 7a 65 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64  ze = pC->payload
f6d0: 53 69 7a 65 3b 0a 20 20 20 20 20 20 7a 52 65 63  Size;.      zRec
f6e0: 20 3d 20 28 63 68 61 72 2a 29 70 43 2d 3e 61 52   = (char*)pC->aR
f6f0: 6f 77 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ow;.    }else if
f700: 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b  ( pC->isIndex ){
f710: 0a 20 20 20 20 20 20 69 36 34 20 70 61 79 6c 6f  .      i64 paylo
f720: 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20 20 20  adSize64;.      
f730: 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
f740: 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c  ize(pCrsr, &payl
f750: 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20  oadSize64);.    
f760: 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20    payloadSize = 
f770: 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20  payloadSize64;. 
f780: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
f790: 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
f7a0: 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79  Size(pCrsr, &pay
f7b0: 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 7d  loadSize);.    }
f7c0: 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 43  .    nField = pC
f7d0: 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73  ->nField;.  }els
f7e0: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
f7f0: 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29  C->pseudoTable )
f800: 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63  ;.    /* The rec
f810: 6f 72 64 20 69 73 20 74 68 65 20 73 6f 6c 65 20  ord is the sole 
f820: 65 6e 74 72 79 20 6f 66 20 61 20 70 73 65 75 64  entry of a pseud
f830: 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 70  o-table */.    p
f840: 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d  ayloadSize = pC-
f850: 3e 6e 44 61 74 61 3b 0a 20 20 20 20 7a 52 65 63  >nData;.    zRec
f860: 20 3d 20 70 43 2d 3e 70 44 61 74 61 3b 0a 20 20   = pC->pData;.  
f870: 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
f880: 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
f890: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 61 79  .    assert( pay
f8a0: 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a  loadSize==0 || z
f8b0: 52 65 63 21 3d 30 20 29 3b 0a 20 20 20 20 6e 46  Rec!=0 );.    nF
f8c0: 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c  ield = pC->nFiel
f8d0: 64 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 30  d;.    pCrsr = 0
f8e0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70  ;.  }..  /* If p
f8f0: 61 79 6c 6f 61 64 53 69 7a 65 20 69 73 20 30 2c  ayloadSize is 0,
f900: 20 74 68 65 6e 20 6a 75 73 74 20 73 74 6f 72 65   then just store
f910: 20 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66 28   a NULL */.  if(
f920: 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20   payloadSize==0 
f930: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
f940: 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  Dest->flags&MEM_
f950: 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f  Null );.    goto
f960: 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
f970: 20 20 7d 0a 20 20 69 66 28 20 70 61 79 6c 6f 61    }.  if( payloa
f980: 64 53 69 7a 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  dSize>db->aLimit
f990: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
f9a0: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
f9b0: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a  o too_big;.  }..
f9c0: 20 20 61 73 73 65 72 74 28 20 70 32 3c 6e 46 69    assert( p2<nFi
f9d0: 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20 52 65 61  eld );..  /* Rea
f9e0: 64 20 61 6e 64 20 70 61 72 73 65 20 74 68 65 20  d and parse the 
f9f0: 74 61 62 6c 65 20 68 65 61 64 65 72 2e 20 20 53  table header.  S
fa00: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 73  tore the results
fa10: 20 6f 66 20 74 68 65 20 70 61 72 73 65 0a 20 20   of the parse.  
fa20: 2a 2a 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f  ** into the reco
fa30: 72 64 20 68 65 61 64 65 72 20 63 61 63 68 65 20  rd header cache 
fa40: 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 63 75  fields of the cu
fa50: 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61 54 79  rsor..  */.  aTy
fa60: 70 65 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a  pe = pC->aType;.
fa70: 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53    if( pC->cacheS
fa80: 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43  tatus==p->cacheC
fa90: 74 72 20 29 7b 0a 20 20 20 20 61 4f 66 66 73 65  tr ){.    aOffse
faa0: 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b  t = pC->aOffset;
fab0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 75 38  .  }else{.    u8
fac0: 20 2a 7a 49 64 78 3b 20 20 20 20 20 20 20 20 2f   *zIdx;        /
fad0: 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 68 65 61  * Index into hea
fae0: 64 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 2a 7a  der */.    u8 *z
faf0: 45 6e 64 48 64 72 3b 20 20 20 20 20 2f 2a 20 50  EndHdr;     /* P
fb00: 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20  ointer to first 
fb10: 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68  byte after the h
fb20: 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 75 33 32  eader */.    u32
fb30: 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a   offset;      /*
fb40: 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65   Offset into the
fb50: 20 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 6e 74   data */.    int
fb60: 20 73 7a 48 64 72 53 7a 3b 20 20 20 20 20 2f 2a   szHdrSz;     /*
fb70: 20 53 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61   Size of the hea
fb80: 64 65 72 20 73 69 7a 65 20 66 69 65 6c 64 20 61  der size field a
fb90: 74 20 73 74 61 72 74 20 6f 66 20 72 65 63 6f 72  t start of recor
fba0: 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 76 61  d */.    int ava
fbb0: 69 6c 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  il;       /* Num
fbc0: 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
fbd0: 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a  available data *
fbe0: 2f 0a 0a 20 20 20 20 61 73 73 65 72 74 28 61 54  /..    assert(aT
fbf0: 79 70 65 29 3b 0a 20 20 20 20 70 43 2d 3e 61 4f  ype);.    pC->aO
fc00: 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74 20  ffset = aOffset 
fc10: 3d 20 26 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d  = &aType[nField]
fc20: 3b 0a 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61  ;.    pC->payloa
fc30: 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f 61 64 53  dSize = payloadS
fc40: 69 7a 65 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  ize;.    pC->cac
fc50: 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61  heStatus = p->ca
fc60: 63 68 65 43 74 72 3b 0a 0a 20 20 20 20 2f 2a 20  cheCtr;..    /* 
fc70: 46 69 67 75 72 65 20 6f 75 74 20 68 6f 77 20 6d  Figure out how m
fc80: 61 6e 79 20 62 79 74 65 73 20 61 72 65 20 69 6e  any bytes are in
fc90: 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20   the header */. 
fca0: 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20     if( zRec ){. 
fcb0: 20 20 20 20 20 7a 44 61 74 61 20 3d 20 7a 52 65       zData = zRe
fcc0: 63 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  c;.    }else{.  
fcd0: 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e      if( pC->isIn
fce0: 64 65 78 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  dex ){.        z
fcf0: 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71  Data = (char*)sq
fd00: 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46 65 74  lite3BtreeKeyFet
fd10: 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c  ch(pCrsr, &avail
fd20: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
fd30: 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
fd40: 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74  (char*)sqlite3Bt
fd50: 72 65 65 44 61 74 61 46 65 74 63 68 28 70 43 72  reeDataFetch(pCr
fd60: 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20  sr, &avail);.   
fd70: 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 49 66     }.      /* If
fd80: 20 4b 65 79 46 65 74 63 68 28 29 2f 44 61 74 61   KeyFetch()/Data
fd90: 46 65 74 63 68 28 29 20 6d 61 6e 61 67 65 64 20  Fetch() managed 
fda0: 74 6f 20 67 65 74 20 74 68 65 20 65 6e 74 69 72  to get the entir
fdb0: 65 20 70 61 79 6c 6f 61 64 2c 0a 20 20 20 20 20  e payload,.     
fdc0: 20 2a 2a 20 73 61 76 65 20 74 68 65 20 70 61 79   ** save the pay
fdd0: 6c 6f 61 64 20 69 6e 20 74 68 65 20 70 43 2d 3e  load in the pC->
fde0: 61 52 6f 77 20 63 61 63 68 65 2e 20 20 54 68 61  aRow cache.  Tha
fdf0: 74 20 77 69 6c 6c 20 73 61 76 65 20 75 73 20 66  t will save us f
fe00: 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20 68 61 76  rom.      ** hav
fe10: 69 6e 67 20 74 6f 20 6d 61 6b 65 20 61 64 64 69  ing to make addi
fe20: 74 69 6f 6e 61 6c 20 63 61 6c 6c 73 20 74 6f 20  tional calls to 
fe30: 66 65 74 63 68 20 74 68 65 20 63 6f 6e 74 65 6e  fetch the conten
fe40: 74 20 70 6f 72 74 69 6f 6e 20 6f 66 0a 20 20 20  t portion of.   
fe50: 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64     ** the record
fe60: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
fe70: 20 69 66 28 20 61 76 61 69 6c 3e 3d 70 61 79 6c   if( avail>=payl
fe80: 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20  oadSize ){.     
fe90: 20 20 20 7a 52 65 63 20 3d 20 7a 44 61 74 61 3b     zRec = zData;
fea0: 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
feb0: 77 20 3d 20 28 75 38 2a 29 7a 44 61 74 61 3b 0a  w = (u8*)zData;.
fec0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
fed0: 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
fee0: 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
fef0: 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  .    /* The foll
ff00: 6f 77 69 6e 67 20 61 73 73 65 72 74 20 69 73 20  owing assert is 
ff10: 74 72 75 65 20 69 6e 20 61 6c 6c 20 63 61 73 65  true in all case
ff20: 73 20 61 63 63 65 70 74 20 77 68 65 6e 0a 20 20  s accept when.  
ff30: 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73    ** the databas
ff40: 65 20 66 69 6c 65 20 68 61 73 20 62 65 65 6e 20  e file has been 
ff50: 63 6f 72 72 75 70 74 65 64 20 65 78 74 65 72 6e  corrupted extern
ff60: 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20 20 20 20  ally..    **    
ff70: 61 73 73 65 72 74 28 20 7a 52 65 63 21 3d 30 20  assert( zRec!=0 
ff80: 7c 7c 20 61 76 61 69 6c 3e 3d 70 61 79 6c 6f 61  || avail>=payloa
ff90: 64 53 69 7a 65 20 7c 7c 20 61 76 61 69 6c 3e 3d  dSize || avail>=
ffa0: 39 20 29 3b 20 2a 2f 0a 20 20 20 20 73 7a 48 64  9 ); */.    szHd
ffb0: 72 53 7a 20 3d 20 67 65 74 56 61 72 69 6e 74 33  rSz = getVarint3
ffc0: 32 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 6f 66  2((u8*)zData, of
ffd0: 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a 20 54  fset);..    /* T
ffe0: 68 65 20 4b 65 79 46 65 74 63 68 28 29 20 6f 72  he KeyFetch() or
fff0: 20 44 61 74 61 46 65 74 63 68 28 29 20 61 62 6f   DataFetch() abo
10000 76 65 20 61 72 65 20 66 61 73 74 20 61 6e 64 20  ve are fast and 
10010 77 69 6c 6c 20 67 65 74 20 74 68 65 20 65 6e 74  will get the ent
10020 69 72 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72  ire.    ** recor
10030 64 20 68 65 61 64 65 72 20 69 6e 20 6d 6f 73 74  d header in most
10040 20 63 61 73 65 73 2e 20 20 42 75 74 20 74 68 65   cases.  But the
10050 79 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f 20 67  y will fail to g
10060 65 74 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a  et the complete.
10070 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68 65      ** record he
10080 61 64 65 72 20 69 66 20 74 68 65 20 72 65 63 6f  ader if the reco
10090 72 64 20 68 65 61 64 65 72 20 64 6f 65 73 20 6e  rd header does n
100a0 6f 74 20 66 69 74 20 6f 6e 20 61 20 73 69 6e 67  ot fit on a sing
100b0 6c 65 20 70 61 67 65 0a 20 20 20 20 2a 2a 20 69  le page.    ** i
100c0 6e 20 74 68 65 20 42 2d 54 72 65 65 2e 20 20 57  n the B-Tree.  W
100d0 68 65 6e 20 74 68 61 74 20 68 61 70 70 65 6e 73  hen that happens
100e0 2c 20 75 73 65 20 73 71 6c 69 74 65 33 56 64 62  , use sqlite3Vdb
100f0 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20  eMemFromBtree() 
10100 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75 69 72  to.    ** acquir
10110 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68  e the complete h
10120 65 61 64 65 72 20 74 65 78 74 2e 0a 20 20 20 20  eader text..    
10130 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a 52 65 63  */.    if( !zRec
10140 20 26 26 20 61 76 61 69 6c 3c 6f 66 66 73 65 74   && avail<offset
10150 20 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66   ){.      sMem.f
10160 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20  lags = 0;.      
10170 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20  sMem.db = 0;.   
10180 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
10190 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
101a0 70 43 72 73 72 2c 20 30 2c 20 6f 66 66 73 65 74  pCrsr, 0, offset
101b0 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26  , pC->isIndex, &
101c0 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28  sMem);.      if(
101d0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
101e0 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  {.        goto o
101f0 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
10200 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74      }.      zDat
10210 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  a = sMem.z;.    
10220 7d 0a 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20  }.    zEndHdr = 
10230 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 6f 66 66  (u8 *)&zData[off
10240 73 65 74 5d 3b 0a 20 20 20 20 7a 49 64 78 20 3d  set];.    zIdx =
10250 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 73 7a   (u8 *)&zData[sz
10260 48 64 72 53 7a 5d 3b 0a 0a 20 20 20 20 2f 2a 20  HdrSz];..    /* 
10270 53 63 61 6e 20 74 68 65 20 68 65 61 64 65 72 20  Scan the header 
10280 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20 66 69  and use it to fi
10290 6c 6c 20 69 6e 20 74 68 65 20 61 54 79 70 65 5b  ll in the aType[
102a0 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 5d 0a  ] and aOffset[].
102b0 20 20 20 20 2a 2a 20 61 72 72 61 79 73 2e 20 20      ** arrays.  
102c0 61 54 79 70 65 5b 69 5d 20 77 69 6c 6c 20 63 6f  aType[i] will co
102d0 6e 74 61 69 6e 20 74 68 65 20 74 79 70 65 20 69  ntain the type i
102e0 6e 74 65 67 65 72 20 66 6f 72 20 74 68 65 20 69  nteger for the i
102f0 2d 74 68 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d  -th.    ** colum
10300 6e 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d  n and aOffset[i]
10310 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68   will contain th
10320 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68  e offset from th
10330 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20  e beginning.    
10340 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
10350 20 74 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66   to the start of
10360 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68   the data for th
10370 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20 20  e i-th column.  
10380 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30    */.    for(i=0
10390 3b 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  ; i<nField; i++)
103a0 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 49 64 78  {.      if( zIdx
103b0 3c 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20 20 20  <zEndHdr ){.    
103c0 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d      aOffset[i] =
103d0 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 20   offset;.       
103e0 20 7a 49 64 78 20 2b 3d 20 67 65 74 56 61 72 69   zIdx += getVari
103f0 6e 74 33 32 28 7a 49 64 78 2c 20 61 54 79 70 65  nt32(zIdx, aType
10400 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 6f 66  [i]);.        of
10410 66 73 65 74 20 2b 3d 20 73 71 6c 69 74 65 33 56  fset += sqlite3V
10420 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
10430 28 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20  (aType[i]);.    
10440 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
10450 20 2f 2a 20 49 66 20 69 20 69 73 20 6c 65 73 73   /* If i is less
10460 20 74 68 61 74 20 6e 46 69 65 6c 64 2c 20 74 68   that nField, th
10470 65 6e 20 74 68 65 72 65 20 61 72 65 20 6c 65 73  en there are les
10480 73 20 66 69 65 6c 64 73 20 69 6e 20 74 68 69 73  s fields in this
10490 0a 20 20 20 20 20 20 20 20 2a 2a 20 72 65 63 6f  .        ** reco
104a0 72 64 20 74 68 61 6e 20 53 65 74 4e 75 6d 43 6f  rd than SetNumCo
104b0 6c 75 6d 6e 73 20 69 6e 64 69 63 61 74 65 64 20  lumns indicated 
104c0 74 68 65 72 65 20 61 72 65 20 63 6f 6c 75 6d 6e  there are column
104d0 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20  s in the.       
104e0 20 2a 2a 20 74 61 62 6c 65 2e 20 53 65 74 20 74   ** table. Set t
104f0 68 65 20 6f 66 66 73 65 74 20 66 6f 72 20 61 6e  he offset for an
10500 79 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e 73 20  y extra columns 
10510 6e 6f 74 20 70 72 65 73 65 6e 74 20 69 6e 0a 20  not present in. 
10520 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65         ** the re
10530 63 6f 72 64 20 74 6f 20 30 2e 20 54 68 69 73 20  cord to 0. This 
10540 74 65 6c 6c 73 20 63 6f 64 65 20 62 65 6c 6f 77  tells code below
10550 20 74 6f 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c   to store a NULL
10560 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 73 74  .        ** inst
10570 65 61 64 20 6f 66 20 64 65 73 65 72 69 61 6c 69  ead of deseriali
10580 7a 69 6e 67 20 61 20 76 61 6c 75 65 20 66 72 6f  zing a value fro
10590 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  m the record..  
105a0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
105b0 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 30 3b   aOffset[i] = 0;
105c0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
105d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
105e0 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
105f0 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20  .    sMem.flags 
10600 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20 20  = MEM_Null;..   
10610 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65 20 72   /* If we have r
10620 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20  ead more header 
10630 64 61 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f  data than was co
10640 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68  ntained in the h
10650 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a 20 6f 72  eader,.    ** or
10660 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74   if the end of t
10670 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70  he last field ap
10680 70 65 61 72 73 20 74 6f 20 62 65 20 70 61 73 74  pears to be past
10690 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a   the end of the.
106a0 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f      ** record, o
106b0 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20  r if the end of 
106c0 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61  the last field a
106d0 70 70 65 61 72 73 20 74 6f 20 62 65 20 62 65 66  ppears to be bef
106e0 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20 20  ore the end.    
106f0 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
10700 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65 6c 64   (when all field
10710 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68 65 6e  s present), then
10720 20 77 65 20 6d 75 73 74 20 62 65 20 64 65 61 6c   we must be deal
10730 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77 69 74 68  ing .    ** with
10740 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
10750 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ase..    */.    
10760 69 66 28 20 7a 49 64 78 3e 7a 45 6e 64 48 64 72  if( zIdx>zEndHdr
10770 20 7c 7c 20 6f 66 66 73 65 74 3e 70 61 79 6c 6f   || offset>paylo
10780 61 64 53 69 7a 65 20 0a 20 20 20 20 20 7c 7c 20  adSize .     || 
10790 28 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26  (zIdx==zEndHdr &
107a0 26 20 6f 66 66 73 65 74 21 3d 70 61 79 6c 6f 61  & offset!=payloa
107b0 64 53 69 7a 65 29 20 29 7b 0a 20 20 20 20 20 20  dSize) ){.      
107c0 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
107d0 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
107e0 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
107f0 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  ut;.    }.  }.. 
10800 20 2f 2a 20 47 65 74 20 74 68 65 20 63 6f 6c 75   /* Get the colu
10810 6d 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  mn information. 
10820 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69  If aOffset[p2] i
10830 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
10840 20 0a 20 20 2a 2a 20 64 65 73 65 72 69 61 6c 69   .  ** deseriali
10850 7a 65 20 74 68 65 20 76 61 6c 75 65 20 66 72 6f  ze the value fro
10860 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 20 49 66  m the record. If
10870 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73 20   aOffset[p2] is 
10880 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74 68 65 6e 20  zero,.  ** then 
10890 74 68 65 72 65 20 61 72 65 20 6e 6f 74 20 65 6e  there are not en
108a0 6f 75 67 68 20 66 69 65 6c 64 73 20 69 6e 20 74  ough fields in t
108b0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 73 61 74  he record to sat
108c0 69 73 66 79 20 74 68 65 0a 20 20 2a 2a 20 72 65  isfy the.  ** re
108d0 71 75 65 73 74 2e 20 20 49 6e 20 74 68 69 73 20  quest.  In this 
108e0 63 61 73 65 2c 20 73 65 74 20 74 68 65 20 76 61  case, set the va
108f0 6c 75 65 20 4e 55 4c 4c 20 6f 72 20 74 6f 20 50  lue NULL or to P
10900 34 20 69 66 20 50 34 20 69 73 0a 20 20 2a 2a 20  4 if P4 is.  ** 
10910 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4d  a pointer to a M
10920 65 6d 20 6f 62 6a 65 63 74 2e 0a 20 20 2a 2f 0a  em object..  */.
10930 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b 70 32    if( aOffset[p2
10940 5d 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ] ){.    assert(
10950 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
10960 3b 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20 29  ;.    if( zRec )
10970 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
10980 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74  dbeMemReleaseExt
10990 65 72 6e 61 6c 28 70 44 65 73 74 29 3b 0a 20 20  ernal(pDest);.  
109a0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
109b0 65 72 69 61 6c 47 65 74 28 28 75 38 20 2a 29 26  erialGet((u8 *)&
109c0 7a 52 65 63 5b 61 4f 66 66 73 65 74 5b 70 32 5d  zRec[aOffset[p2]
109d0 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44  ], aType[p2], pD
109e0 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  est);.    }else{
109f0 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c  .      len = sql
10a00 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
10a10 70 65 4c 65 6e 28 61 54 79 70 65 5b 70 32 5d 29  peLen(aType[p2])
10a20 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
10a30 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 4d 65 6d  dbeMemMove(&sMem
10a40 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  , pDest);.      
10a50 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
10a60 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72  MemFromBtree(pCr
10a70 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c  sr, aOffset[p2],
10a80 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65   len, pC->isInde
10a90 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20  x, &sMem);.     
10aa0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
10ab0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
10ac0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
10ad0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
10ae0 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a  zData = sMem.z;.
10af0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10b00 65 53 65 72 69 61 6c 47 65 74 28 28 75 38 2a 29  eSerialGet((u8*)
10b10 7a 44 61 74 61 2c 20 61 54 79 70 65 5b 70 32 5d  zData, aType[p2]
10b20 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 0a  , pDest);.    }.
10b30 20 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d      pDest->enc =
10b40 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 7d 65 6c   encoding;.  }el
10b50 73 65 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  se{.    if( pOp-
10b60 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20  >p4type==P4_MEM 
10b70 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
10b80 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
10b90 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70  py(pDest, pOp->p
10ba0 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74  4.pMem, MEM_Stat
10bb0 69 63 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ic);.    }else{.
10bc0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 44        assert( pD
10bd0 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e  est->flags&MEM_N
10be0 75 6c 6c 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  ull );.    }.  }
10bf0 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 64 79 6e  ..  /* If we dyn
10c00 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
10c10 65 64 20 73 70 61 63 65 20 74 6f 20 68 6f 6c 64  ed space to hold
10c20 20 74 68 65 20 64 61 74 61 20 28 69 6e 20 74 68   the data (in th
10c30 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  e.  ** sqlite3Vd
10c40 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29  beMemFromBtree()
10c50 20 63 61 6c 6c 20 61 62 6f 76 65 29 20 74 68 65   call above) the
10c60 6e 20 74 72 61 6e 73 66 65 72 20 63 6f 6e 74 72  n transfer contr
10c70 6f 6c 20 6f 66 20 74 68 61 74 0a 20 20 2a 2a 20  ol of that.  ** 
10c80 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
10c90 63 61 74 65 64 20 73 70 61 63 65 20 6f 76 65 72  cated space over
10ca0 20 74 6f 20 74 68 65 20 70 44 65 73 74 20 73 74   to the pDest st
10cb0 72 75 63 74 75 72 65 2e 0a 20 20 2a 2a 20 54 68  ructure..  ** Th
10cc0 69 73 20 70 72 65 76 65 6e 74 73 20 61 20 6d 65  is prevents a me
10cd0 6d 6f 72 79 20 63 6f 70 79 2e 0a 20 20 2a 2f 0a  mory copy..  */.
10ce0 20 20 69 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c    if( sMem.zMall
10cf0 6f 63 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  oc ){.    assert
10d00 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a  ( sMem.z==sMem.z
10d10 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20 61 73  Malloc );.    as
10d20 73 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66  sert( !(pDest->f
10d30 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20  lags & MEM_Dyn) 
10d40 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21  );.    assert( !
10d50 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20  (pDest->flags & 
10d60 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74  (MEM_Blob|MEM_St
10d70 72 29 29 20 7c 7c 20 70 44 65 73 74 2d 3e 7a 3d  r)) || pDest->z=
10d80 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20 20 70  =sMem.z );.    p
10d90 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  Dest->flags &= ~
10da0 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d 5f 53  (MEM_Ephem|MEM_S
10db0 74 61 74 69 63 29 3b 0a 20 20 20 20 70 44 65 73  tatic);.    pDes
10dc0 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
10dd0 54 65 72 6d 3b 0a 20 20 20 20 70 44 65 73 74 2d  Term;.    pDest-
10de0 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20  >z = sMem.z;.   
10df0 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20   pDest->zMalloc 
10e00 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a  = sMem.zMalloc;.
10e10 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69    }..  rc = sqli
10e20 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72  te3VdbeMemMakeWr
10e30 69 74 65 61 62 6c 65 28 70 44 65 73 74 29 3b 0a  iteable(pDest);.
10e40 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a  .op_column_out:.
10e50 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
10e60 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20 20  BSIZE(pDest);.  
10e70 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
10e80 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a  Op->p3, pDest);.
10e90 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
10ea0 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20  pcode: Affinity 
10eb0 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
10ec0 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74  ** Apply affinit
10ed0 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f  ies to a range o
10ee0 66 20 50 32 20 72 65 67 69 73 74 65 72 73 20 73  f P2 registers s
10ef0 74 61 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e  tarting with P1.
10f00 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73  .**.** P4 is a s
10f10 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32  tring that is P2
10f20 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
10f30 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63  . The nth charac
10f40 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
10f50 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
10f60 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
10f70 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
10f80 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e  e used for the n
10f90 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c  th.** memory cel
10fa0 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a  l in the range..
10fb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e  */.case OP_Affin
10fc0 69 74 79 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ity: {.  char *z
10fd0 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  Affinity = pOp->
10fe0 70 34 2e 7a 3b 0a 20 20 4d 65 6d 20 2a 70 44 61  p4.z;.  Mem *pDa
10ff0 74 61 30 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  ta0 = &p->aMem[p
11000 4f 70 2d 3e 70 31 5d 3b 0a 20 20 4d 65 6d 20 2a  Op->p1];.  Mem *
11010 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
11020 70 4f 70 2d 3e 70 32 2d 31 5d 3b 0a 20 20 4d 65  pOp->p2-1];.  Me
11030 6d 20 2a 70 52 65 63 3b 0a 0a 20 20 66 6f 72 28  m *pRec;..  for(
11040 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65  pRec=pData0; pRe
11050 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b  c<=pLast; pRec++
11060 29 7b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  ){.    ExpandBlo
11070 62 28 70 52 65 63 29 3b 0a 20 20 20 20 61 70 70  b(pRec);.    app
11080 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c  lyAffinity(pRec,
11090 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65 63 2d   zAffinity[pRec-
110a0 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e  pData0], encodin
110b0 67 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  g);.  }.  break;
110c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
110d0 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20  akeRecord P1 P2 
110e0 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f  P3 P4 *.**.** Co
110f0 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65  nvert P2 registe
11100 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  rs beginning wit
11110 68 20 50 31 20 69 6e 74 6f 20 61 20 73 69 6e 67  h P1 into a sing
11120 6c 65 20 65 6e 74 72 79 0a 2a 2a 20 73 75 69 74  le entry.** suit
11130 61 62 6c 65 20 66 6f 72 20 75 73 65 20 61 73 20  able for use as 
11140 61 20 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e  a data record in
11150 20 61 20 64 61 74 61 62 61 73 65 20 74 61 62 6c   a database tabl
11160 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a  e or as a key.**
11170 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54   in an index.  T
11180 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68  he details of th
11190 65 20 66 6f 72 6d 61 74 20 61 72 65 20 69 72 72  e format are irr
111a0 65 6c 65 76 61 6e 74 20 61 73 20 6c 6f 6e 67 20  elevant as long 
111b0 61 73 0a 2a 2a 20 74 68 65 20 4f 50 5f 43 6f 6c  as.** the OP_Col
111c0 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64  umn opcode can d
111d0 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64  ecode the record
111e0 20 6c 61 74 65 72 2e 0a 2a 2a 20 52 65 66 65 72   later..** Refer
111f0 20 74 6f 20 73 6f 75 72 63 65 20 63 6f 64 65 20   to source code 
11200 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 74 68 65  comments for the
11210 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68 65 20   details of the 
11220 72 65 63 6f 72 64 0a 2a 2a 20 66 6f 72 6d 61 74  record.** format
11230 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62  ..**.** P4 may b
11240 65 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  e a string that 
11250 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
11260 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68 20   long.  The nth 
11270 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
11280 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63  .** string indic
11290 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ates the column 
112a0 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68  affinity that sh
112b0 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72  ould be used for
112c0 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c   the nth.** fiel
112d0 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
112e0 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61  ey..**.** The ma
112f0 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72 61  pping from chara
11300 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74 79  cter to affinity
11310 20 69 73 20 67 69 76 65 6e 20 62 79 20 74 68 65   is given by the
11320 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20   SQLITE_AFF_.** 
11330 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 69  macros defined i
11340 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a  n sqliteInt.h..*
11350 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e 55  *.** If P4 is NU
11360 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65  LL then all inde
11370 78 20 66 69 65 6c 64 73 20 68 61 76 65 20 74 68  x fields have th
11380 65 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e  e affinity NONE.
11390 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65  .*/.case OP_Make
113a0 52 65 63 6f 72 64 3a 20 7b 0a 20 20 2f 2a 20 41  Record: {.  /* A
113b0 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f  ssuming the reco
113c0 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69  rd contains N fi
113d0 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64  elds, the record
113e0 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20   format looks.  
113f0 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20  ** like this:.  
11400 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d  **.  ** --------
11410 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11420 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11430 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11440 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11450 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65  .  ** | hdr-size
11460 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70 65   | type 0 | type
11470 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20   1 | ... | type 
11480 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e  N-1 | data0 | ..
11490 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a  . | data N-1 | .
114a0 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
114b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
114c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
114d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
114e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
114f0 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20  **.  ** Data(0) 
11500 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  is taken from re
11510 67 69 73 74 65 72 20 50 31 2e 20 20 44 61 74 61  gister P1.  Data
11520 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72  (1) comes from r
11530 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a  egister P1+1.  *
11540 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a  * and so froth..
11550 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74    **.  ** Each t
11560 79 70 65 20 66 69 65 6c 64 20 69 73 20 61 20 76  ype field is a v
11570 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69  arint representi
11580 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20 74 79  ng the serial ty
11590 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20  pe of the .  ** 
115a0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61  corresponding da
115b0 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20  ta element (see 
115c0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
115d0 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20  lType()). The.  
115e0 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c  ** hdr-size fiel
115f0 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69  d is also a vari
11600 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20  nt which is the 
11610 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20  offset from the 
11620 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f  beginning.  ** o
11630 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  f the record to 
11640 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 75 38  data0..  */.  u8
11650 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20   *zNewRecord;   
11660 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72       /* A buffer
11670 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74   to hold the dat
11680 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65  a for the new re
11690 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  cord */.  Mem *p
116a0 52 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  Rec;            
116b0 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f   /* The new reco
116c0 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74  rd */.  u64 nDat
116d0 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  a = 0;         /
116e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
116f0 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
11700 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 20 3d 20  */.  int nHdr = 
11710 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  0;          /* N
11720 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
11730 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a  f header space *
11740 2f 0a 20 20 75 36 34 20 6e 42 79 74 65 20 3d 20  /.  u64 nByte = 
11750 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61  0;         /* Da
11760 74 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65  ta space require
11770 64 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72  d for this recor
11780 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f  d */.  int nZero
11790 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
117a0 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20   Number of zero 
117b0 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
117c0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
117d0 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b  /.  int nVarint;
117e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
117f0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
11800 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75   a varint */.  u
11810 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20  32 serial_type; 
11820 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69        /* Type fi
11830 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  eld */.  Mem *pD
11840 61 74 61 30 3b 20 20 20 20 20 20 20 20 20 20 20  ata0;           
11850 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20 74  /* First field t
11860 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e  o be combined in
11870 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  to the record */
11880 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20  .  Mem *pLast;  
11890 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
118a0 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72  t field of the r
118b0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
118c0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20  Field;          
118d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66    /* Number of f
118e0 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
118f0 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ord */.  char *z
11900 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20  Affinity;       
11910 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
11920 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72  string for the r
11930 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66  ecord */.  int f
11940 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20  ile_format;     
11950 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74    /* File format
11960 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f   to use for enco
11970 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  ding */.  int i;
11980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11990 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69   /* Space used i
119a0 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 2a  n zNewRecord[] *
119b0 2f 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  /..  nField = pO
119c0 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69  p->p1;.  zAffini
119d0 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  ty = pOp->p4.z;.
119e0 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
119f0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20  >0 && pOp->p2>0 
11a00 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c  && pOp->p2+nFiel
11a10 64 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  d<=p->nMem );.  
11a20 70 44 61 74 61 30 20 3d 20 26 70 2d 3e 61 4d 65  pData0 = &p->aMe
11a30 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69  m[nField];.  nFi
11a40 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  eld = pOp->p2;. 
11a50 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30   pLast = &pData0
11a60 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69  [nField-1];.  fi
11a70 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d  le_format = p->m
11a80 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
11a90 74 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68  t;..  /* Loop th
11aa0 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e  rough the elemen
11ab0 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b  ts that will mak
11ac0 65 20 75 70 20 74 68 65 20 72 65 63 6f 72 64 20  e up the record 
11ad0 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f  to figure.  ** o
11ae0 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63  ut how much spac
11af0 65 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  e is required fo
11b00 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  r the new record
11b10 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 70 52 65  ..  */.  for(pRe
11b20 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d  c=pData0; pRec<=
11b30 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a  pLast; pRec++){.
11b40 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 20      int len;.   
11b50 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29   if( zAffinity )
11b60 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66  {.      applyAff
11b70 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66 66  inity(pRec, zAff
11b80 69 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74 61  inity[pRec-pData
11b90 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  0], encoding);. 
11ba0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 52 65     }.    if( pRe
11bb0 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72  c->flags&MEM_Zer
11bc0 6f 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30 20 29  o && pRec->n>0 )
11bd0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
11be0 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
11bf0 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20  (pRec);.    }.  
11c00 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20    serial_type = 
11c10 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
11c20 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65  lType(pRec, file
11c30 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65  _format);.    le
11c40 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  n = sqlite3VdbeS
11c50 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72  erialTypeLen(ser
11c60 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 6e  ial_type);.    n
11c70 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20  Data += len;.   
11c80 20 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33   nHdr += sqlite3
11c90 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c  VarintLen(serial
11ca0 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28 20  _type);.    if( 
11cb0 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
11cc0 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
11cd0 2f 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a 65 72  /* Only pure zer
11ce0 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73 20 63  o-filled BLOBs c
11cf0 61 6e 20 62 65 20 69 6e 70 75 74 20 74 6f 20 74  an be input to t
11d00 68 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20 20 20  his Opcode..    
11d10 20 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74 20 61    ** We do not a
11d20 6c 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74 68 20  llow blobs with 
11d30 61 20 70 72 65 66 69 78 20 61 6e 64 20 61 20 7a  a prefix and a z
11d40 65 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69 6c 2e  ero-filled tail.
11d50 20 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20   */.      nZero 
11d60 2b 3d 20 70 52 65 63 2d 3e 75 2e 69 3b 0a 20 20  += pRec->u.i;.  
11d70 20 20 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e 20    }else if( len 
11d80 29 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d  ){.      nZero =
11d90 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20   0;.    }.  }.. 
11da0 20 2f 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74   /* Add the init
11db0 69 61 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e  ial header varin
11dc0 74 20 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20  t and total the 
11dd0 73 69 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20 2b  size */.  nHdr +
11de0 3d 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69  = nVarint = sqli
11df0 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64  te3VarintLen(nHd
11e00 72 29 3b 0a 20 20 69 66 28 20 6e 56 61 72 69 6e  r);.  if( nVarin
11e10 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  t<sqlite3VarintL
11e20 65 6e 28 6e 48 64 72 29 20 29 7b 0a 20 20 20 20  en(nHdr) ){.    
11e30 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42  nHdr++;.  }.  nB
11e40 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61  yte = nHdr+nData
11e50 2d 6e 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42  -nZero;.  if( nB
11e60 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  yte>db->aLimit[S
11e70 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
11e80 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
11e90 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20  too_big;.  }..  
11ea0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
11eb0 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
11ec0 20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c 61   has a buffer la
11ed0 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74  rge enough to st
11ee0 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65  ore .  ** the ne
11ef0 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75  w record. The ou
11f00 74 70 75 74 20 72 65 67 69 73 74 65 72 20 28 70  tput register (p
11f10 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61  Op->p3) is not a
11f20 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62  llowed to.  ** b
11f30 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70  e one of the inp
11f40 75 74 20 72 65 67 69 73 74 65 72 73 20 28 62 65  ut registers (be
11f50 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77  cause the follow
11f60 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a  ing call to.  **
11f70 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47   sqlite3VdbeMemG
11f80 72 6f 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62  row() could clob
11f90 62 65 72 20 74 68 65 20 76 61 6c 75 65 20 62 65  ber the value be
11fa0 66 6f 72 65 20 69 74 20 69 73 20 75 73 65 64 29  fore it is used)
11fb0 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
11fc0 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31   pOp->p3<pOp->p1
11fd0 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
11fe0 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a  ->p1+pOp->p2 );.
11ff0 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65    pOut = &p->aMe
12000 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
12010 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
12020 47 72 6f 77 28 70 4f 75 74 2c 20 6e 42 79 74 65  Grow(pOut, nByte
12030 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  , 0) ){.    goto
12040 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a   no_mem;.  }.  z
12050 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20  NewRecord = (u8 
12060 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a  *)pOut->z;..  /*
12070 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72   Write the recor
12080 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61  d */.  i = putVa
12090 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72  rint32(zNewRecor
120a0 64 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28  d, nHdr);.  for(
120b0 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65  pRec=pData0; pRe
120c0 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b  c<=pLast; pRec++
120d0 29 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79  ){.    serial_ty
120e0 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  pe = sqlite3Vdbe
120f0 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c  SerialType(pRec,
12100 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20   file_format);. 
12110 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e     i += putVarin
12120 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  t32(&zNewRecord[
12130 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29  i], serial_type)
12140 3b 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c  ;      /* serial
12150 20 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66   type */.  }.  f
12160 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20  or(pRec=pData0; 
12170 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65  pRec<=pLast; pRe
12180 63 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c  c++){  /* serial
12190 20 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b   data */.    i +
121a0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
121b0 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f  ialPut(&zNewReco
121c0 72 64 5b 69 5d 2c 20 6e 42 79 74 65 2d 69 2c 20  rd[i], nByte-i, 
121d0 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
121e0 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  t);.  }.  assert
121f0 28 20 69 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20  ( i==nByte );.. 
12200 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
12210 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
12220 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74  ->nMem );.  pOut
12230 2d 3e 6e 20 3d 20 6e 42 79 74 65 3b 0a 20 20 70  ->n = nByte;.  p
12240 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
12250 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e 3b  _Blob | MEM_Dyn;
12260 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20  .  pOut->xDel = 
12270 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29  0;.  if( nZero )
12280 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  {.    pOut->u.i 
12290 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75  = nZero;.    pOu
122a0 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
122b0 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  Zero;.  }.  pOut
122c0 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
122d0 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65  TF8;  /* In case
122e0 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65   the blob is eve
122f0 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74  r converted to t
12300 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45  ext */.  REGISTE
12310 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
12320 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45   pOut);.  UPDATE
12330 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
12340 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
12350 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 61 74  ./* Opcode: Stat
12360 65 6d 65 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a  ement P1 * * * *
12370 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 6e 20  .**.** Begin an 
12380 69 6e 64 69 76 69 64 75 61 6c 20 73 74 61 74 65  individual state
12390 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
123a0 20 77 68 69 63 68 20 69 73 20 70 61 72 74 20 6f   which is part o
123b0 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 74 72  f a larger.** tr
123c0 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 69 73  ansaction.  This
123d0 20 69 73 20 6e 65 65 64 65 64 20 73 6f 20 74 68   is needed so th
123e0 61 74 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  at the statement
123f0 0a 2a 2a 20 63 61 6e 20 62 65 20 72 6f 6c 6c 65  .** can be rolle
12400 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20  d back after an 
12410 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61  error without ha
12420 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63  ving to roll bac
12430 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20  k the.** entire 
12440 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68  transaction.  Th
12450 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
12460 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 75 74  saction will aut
12470 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 63 6f  omatically.** co
12480 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44  mmit when the VD
12490 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20  BE halts..**.** 
124a0 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
124b0 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75  connection is cu
124c0 72 72 65 6e 74 6c 79 20 69 6e 20 61 75 74 6f 63  rrently in autoc
124d0 6f 6d 6d 69 74 20 6d 6f 64 65 20 28 74 68 61 74  ommit mode (that
124e0 20 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 2c 20   .** is to say, 
124f0 69 66 20 69 74 20 69 73 20 69 6e 20 62 65 74 77  if it is in betw
12500 65 65 6e 20 42 45 47 49 4e 20 61 6e 64 20 43 4f  een BEGIN and CO
12510 4d 4d 49 54 29 0a 2a 2a 20 61 6e 64 20 69 66 20  MMIT).** and if 
12520 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6f 74 68  there are no oth
12530 65 72 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  er active statem
12540 65 6e 74 73 20 6f 6e 20 74 68 65 20 73 61 6d 65  ents on the same
12550 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
12560 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  nection, then th
12570 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  is operation is 
12580 61 20 6e 6f 2d 6f 70 2e 20 20 4e 6f 20 73 74 61  a no-op.  No sta
12590 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
125a0 6f 6e 0a 2a 2a 20 69 73 20 6e 65 65 64 65 64 20  on.** is needed 
125b0 73 69 6e 63 65 20 61 6e 79 20 65 72 72 6f 72 20  since any error 
125c0 63 61 6e 20 75 73 65 20 74 68 65 20 6e 6f 72 6d  can use the norm
125d0 61 6c 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63  al ROLLBACK proc
125e0 65 73 73 20 74 6f 0a 2a 2a 20 75 6e 64 6f 20 63  ess to.** undo c
125f0 68 61 6e 67 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  hanges..**.** If
12600 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
12610 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
12620 74 65 64 2c 20 74 68 65 6e 20 61 20 73 74 61 74  ted, then a stat
12630 65 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 20 66 69  ement journal fi
12640 6c 65 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 61 6c  le.** will be al
12650 6c 6f 63 61 74 65 64 20 61 6e 64 20 69 6e 69 74  located and init
12660 69 61 6c 69 7a 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  ialized..**.** T
12670 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  he statement is 
12680 62 65 67 75 6e 20 6f 6e 20 74 68 65 20 64 61 74  begun on the dat
12690 61 62 61 73 65 20 66 69 6c 65 20 77 69 74 68 20  abase file with 
126a0 69 6e 64 65 78 20 50 31 2e 20 20 54 68 65 20 6d  index P1.  The m
126b0 61 69 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  ain.** database 
126c0 66 69 6c 65 20 68 61 73 20 61 6e 20 69 6e 64 65  file has an inde
126d0 78 20 6f 66 20 30 20 61 6e 64 20 74 68 65 20 66  x of 0 and the f
126e0 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d  ile used for tem
126f0 70 6f 72 61 72 79 20 74 61 62 6c 65 73 0a 2a 2a  porary tables.**
12700 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
12710 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53   1..*/.case OP_S
12720 74 61 74 65 6d 65 6e 74 3a 20 7b 0a 20 20 69 66  tatement: {.  if
12730 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
12740 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76  ==0 || db->activ
12750 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20  eVdbeCnt>1 ){.  
12760 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70    int i = pOp->p
12770 31 3b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42  1;.    Btree *pB
12780 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  t;.    assert( i
12790 3e 3d 30 20 26 26 20 69 3c 64 62 2d 3e 6e 44 62  >=0 && i<db->nDb
127a0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
127b0 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 21 3d  db->aDb[i].pBt!=
127c0 30 20 29 3b 0a 20 20 20 20 70 42 74 20 3d 20 64  0 );.    pBt = d
127d0 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20  b->aDb[i].pBt;. 
127e0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
127f0 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
12800 28 70 42 74 29 20 29 3b 0a 20 20 20 20 61 73 73  (pBt) );.    ass
12810 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
12820 73 6b 20 26 20 28 31 3c 3c 69 29 29 21 3d 30 20  sk & (1<<i))!=0 
12830 29 3b 0a 20 20 20 20 69 66 28 20 21 73 71 6c 69  );.    if( !sqli
12840 74 65 33 42 74 72 65 65 49 73 49 6e 53 74 6d 74  te3BtreeIsInStmt
12850 28 70 42 74 29 20 29 7b 0a 20 20 20 20 20 20 72  (pBt) ){.      r
12860 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
12870 42 65 67 69 6e 53 74 6d 74 28 70 42 74 29 3b 0a  BeginStmt(pBt);.
12880 20 20 20 20 20 20 70 2d 3e 6f 70 65 6e 65 64 53        p->openedS
12890 74 61 74 65 6d 65 6e 74 20 3d 20 31 3b 0a 20 20  tatement = 1;.  
128a0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
128b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
128c0 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20  utoCommit P1 P2 
128d0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  * * *.**.** Set 
128e0 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74  the database aut
128f0 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f  o-commit flag to
12900 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66   P1 (1 or 0). If
12910 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c   P2 is true, rol
12920 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75  l.** back any cu
12930 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62  rrently active b
12940 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tree transaction
12950 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  s. If there are 
12960 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d  any active.** VM
12970 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68  s (apart from th
12980 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 74 68  is one), then th
12990 65 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c  e COMMIT or ROLL
129a0 42 41 43 4b 20 73 74 61 74 65 6d 65 6e 74 20 66  BACK statement f
129b0 61 69 6c 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ails..**.** This
129c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75   instruction cau
129d0 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61  ses the VM to ha
129e0 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  lt..*/.case OP_A
129f0 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 75  utoCommit: {.  u
12a00 38 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  8 i = pOp->p1;. 
12a10 20 75 38 20 72 6f 6c 6c 62 61 63 6b 20 3d 20 70   u8 rollback = p
12a20 4f 70 2d 3e 70 32 3b 0a 0a 20 20 61 73 73 65 72  Op->p2;..  asser
12a30 74 28 20 69 3d 3d 31 20 7c 7c 20 69 3d 3d 30 20  t( i==1 || i==0 
12a40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d  );.  assert( i==
12a50 31 20 7c 7c 20 72 6f 6c 6c 62 61 63 6b 3d 3d 30  1 || rollback==0
12a60 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 64   );..  assert( d
12a70 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
12a80 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61  >0 );  /* At lea
12a90 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69  st this one VM i
12aa0 73 20 61 63 74 69 76 65 20 2a 2f 0a 0a 20 20 69  s active */..  i
12ab0 66 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62  f( db->activeVdb
12ac0 65 43 6e 74 3e 31 20 26 26 20 69 20 26 26 20 21  eCnt>1 && i && !
12ad0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
12ae0 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73  {.    /* If this
12af0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70   instruction imp
12b00 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54  lements a COMMIT
12b10 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 6f 74   or ROLLBACK, ot
12b20 68 65 72 20 56 4d 73 20 61 72 65 0a 20 20 20 20  her VMs are.    
12b30 2a 2a 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67  ** still running
12b40 2c 20 61 6e 64 20 61 20 74 72 61 6e 73 61 63 74  , and a transact
12b50 69 6f 6e 20 69 73 20 61 63 74 69 76 65 2c 20 72  ion is active, r
12b60 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
12b70 6e 64 69 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a  ndicating.    **
12b80 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20   that the other 
12b90 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74  VMs must complet
12ba0 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f  e first. .    */
12bb0 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
12bc0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
12bd0 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 25  g, db, "cannot %
12be0 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  s transaction - 
12bf0 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73  ".        "SQL s
12c00 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
12c10 67 72 65 73 73 22 2c 0a 20 20 20 20 20 20 20 20  gress",.        
12c20 72 6f 6c 6c 62 61 63 6b 20 3f 20 22 72 6f 6c 6c  rollback ? "roll
12c30 62 61 63 6b 22 20 3a 20 22 63 6f 6d 6d 69 74 22  back" : "commit"
12c40 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
12c50 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73  TE_ERROR;.  }els
12c60 65 20 69 66 28 20 69 21 3d 64 62 2d 3e 61 75 74  e if( i!=db->aut
12c70 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69  oCommit ){.    i
12c80 66 28 20 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20  f( pOp->p2 ){.  
12c90 20 20 20 20 61 73 73 65 72 74 28 20 69 3d 3d 31      assert( i==1
12ca0 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
12cb0 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 29  3RollbackAll(db)
12cc0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  ;.      db->auto
12cd0 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
12ce0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
12cf0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 69 3b  >autoCommit = i;
12d00 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
12d10 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
12d20 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
12d30 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
12d40 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  ;.        db->au
12d50 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 2d 69 3b 0a  toCommit = 1-i;.
12d60 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
12d70 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
12d80 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76  ;.        goto v
12d90 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
12da0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
12db0 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
12dc0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
12dd0 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
12de0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
12df0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
12e00 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
12e10 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
12e20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
12e30 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
12e40 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20  zErrMsg, db,.   
12e50 20 20 20 20 20 28 21 69 29 3f 22 63 61 6e 6e 6f       (!i)?"canno
12e60 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61  t start a transa
12e70 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74  ction within a t
12e80 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20  ransaction":(.  
12e90 20 20 20 20 20 20 28 72 6f 6c 6c 62 61 63 6b 29        (rollback)
12ea0 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63  ?"cannot rollbac
12eb0 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  k - no transacti
12ec0 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20  on is active":. 
12ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ee0 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74    "cannot commit
12ef0 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
12f00 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a  n is active"));.
12f10 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63           .    rc
12f20 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
12f30 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
12f40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e  ./* Opcode: Tran
12f50 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 2a 20  saction P1 P2 * 
12f60 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20  * *.**.** Begin 
12f70 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  a transaction.  
12f80 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  The transaction 
12f90 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f 6d 6d  ends when a Comm
12fa0 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a  it or Rollback.*
12fb0 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e 63 6f  * opcode is enco
12fc0 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65 6e 64  untered.  Depend
12fd0 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43 4f  ing on the ON CO
12fe0 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67 2c 20  NFLICT setting, 
12ff0 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  the.** transacti
13000 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65  on might also be
13010 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66 20   rolled back if 
13020 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  an error is enco
13030 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50  untered..**.** P
13040 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
13050 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
13060 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ile on which the
13070 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
13080 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64  ** started.  Ind
13090 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e  ex 0 is the main
130a0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
130b0 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68  nd index 1 is th
130c0 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66  e.** file used f
130d0 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  or temporary tab
130e0 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66  les.  Indices of
130f0 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75   2 or more are u
13100 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63  sed for.** attac
13110 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
13120 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f  *.** If P2 is no
13130 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77  n-zero, then a w
13140 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
13150 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 41 20   is started.  A 
13160 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20 69 73  RESERVED lock is
13170 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20  .** obtained on 
13180 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
13190 65 20 77 68 65 6e 20 61 20 77 72 69 74 65 2d 74  e when a write-t
131a0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
131b0 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74  arted.  No.** ot
131c0 68 65 72 20 70 72 6f 63 65 73 73 20 63 61 6e 20  her process can 
131d0 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20 77 72  start another wr
131e0 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
131f0 77 68 69 6c 65 20 74 68 69 73 20 74 72 61 6e 73  while this trans
13200 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64  action is.** und
13210 65 72 77 61 79 2e 20 20 53 74 61 72 74 69 6e 67  erway.  Starting
13220 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63   a write transac
13230 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74 65  tion also create
13240 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  s a rollback jou
13250 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74 65  rnal. A.** write
13260 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73   transaction mus
13270 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66  t be started bef
13280 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ore any changes 
13290 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74  can be made to t
132a0 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  he.** database. 
132b0 20 49 66 20 50 32 20 69 73 20 32 20 6f 72 20 67   If P2 is 2 or g
132c0 72 65 61 74 65 72 20 74 68 65 6e 20 61 6e 20 45  reater then an E
132d0 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69 73  XCLUSIVE lock is
132e0 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64 0a 2a   also obtained.*
132f0 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a  * on the file..*
13300 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65  *.** If P2 is ze
13310 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d  ro, then a read-
13320 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
13330 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
13340 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f   file..*/.case O
13350 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b  P_Transaction: {
13360 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
13370 70 31 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  p1;.  Btree *pBt
13380 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  ;..  assert( i>=
13390 30 20 26 26 20 69 3c 64 62 2d 3e 6e 44 62 20 29  0 && i<db->nDb )
133a0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
133b0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
133c0 69 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20  i))!=0 );.  pBt 
133d0 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  = db->aDb[i].pBt
133e0 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a  ;..  if( pBt ){.
133f0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
13400 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
13410 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  pBt, pOp->p2);. 
13420 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
13430 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
13440 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
13450 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
13460 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
13470 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
13480 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  rn;.    }.    if
13490 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
134a0 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 52 45  && rc!=SQLITE_RE
134b0 41 44 4f 4e 4c 59 20 2f 2a 20 26 26 20 72 63 21  ADONLY /* && rc!
134c0 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 2a 2f 20  =SQLITE_BUSY */ 
134d0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
134e0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
134f0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
13500 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13510 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31  e: ReadCookie P1
13520 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
13530 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d   Read cookie num
13540 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61  ber P3 from data
13550 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69 74  base P1 and writ
13560 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74  e it into regist
13570 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 30 20  er P2..** P3==0 
13580 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
13590 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 31 20 69 73  rsion.  P3==1 is
135a0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
135b0 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 32 20 69  rmat..** P3==2 i
135c0 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
135d0 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69  d pager cache si
135e0 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
135f0 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74  .  P1==0 is.** t
13600 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
13610 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
13620 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
13630 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
13640 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  re.** temporary 
13650 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  tables..**.** If
13660 20 50 31 20 69 73 20 6e 65 67 61 74 69 76 65 2c   P1 is negative,
13670 20 74 68 65 6e 20 74 68 69 73 20 69 73 20 61 20   then this is a 
13680 72 65 71 75 65 73 74 20 74 6f 20 72 65 61 64 20  request to read 
13690 74 68 65 20 73 69 7a 65 20 6f 66 20 61 0a 2a 2a  the size of a.**
136a0 20 64 61 74 61 62 61 73 65 73 20 66 72 65 65 2d   databases free-
136b0 6c 69 73 74 2e 20 50 33 20 6d 75 73 74 20 62 65  list. P3 must be
136c0 20 73 65 74 20 74 6f 20 31 20 69 6e 20 74 68 69   set to 1 in thi
136d0 73 20 63 61 73 65 2e 20 54 68 65 20 61 63 74 75  s case. The actu
136e0 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 61  al.** database a
136f0 63 63 65 73 73 65 64 20 69 73 20 28 28 50 31 2b  ccessed is ((P1+
13700 31 29 2a 2d 31 29 2e 20 46 6f 72 20 65 78 61 6d  1)*-1). For exam
13710 70 6c 65 2c 20 61 20 50 31 20 70 61 72 61 6d 65  ple, a P1 parame
13720 74 65 72 20 6f 66 20 2d 31 0a 2a 2a 20 63 6f 72  ter of -1.** cor
13730 72 65 73 70 6f 6e 64 73 20 74 6f 20 64 61 74 61  responds to data
13740 62 61 73 65 20 30 20 28 22 6d 61 69 6e 22 29 2c  base 0 ("main"),
13750 20 61 20 50 31 20 6f 66 20 2d 32 20 69 73 20 64   a P1 of -2 is d
13760 61 74 61 62 61 73 65 20 31 20 28 22 74 65 6d 70  atabase 1 ("temp
13770 22 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  ")..**.** There 
13780 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c  must be a read-l
13790 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
137a0 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72  ase (either a tr
137b0 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73  ansaction.** mus
137c0 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20  t be started or 
137d0 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e  there must be an
137e0 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65   open cursor) be
137f0 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e  fore.** executin
13800 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
13810 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  on..*/.case OP_R
13820 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  eadCookie: {    
13830 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
13840 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
13850 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
13860 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  int iDb = pOp->p
13870 31 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65  1;.  int iCookie
13880 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 0a 20 20 61   = pOp->p3;..  a
13890 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53  ssert( pOp->p3<S
138a0 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
138b0 54 41 20 29 3b 0a 20 20 69 66 28 20 69 44 62 3c  TA );.  if( iDb<
138c0 30 20 29 7b 0a 20 20 20 20 69 44 62 20 3d 20 28  0 ){.    iDb = (
138d0 2d 31 2a 28 69 44 62 2b 31 29 29 3b 0a 20 20 20  -1*(iDb+1));.   
138e0 20 69 43 6f 6f 6b 69 65 20 2a 3d 20 2d 31 3b 0a   iCookie *= -1;.
138f0 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 69 44    }.  assert( iD
13900 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
13910 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
13920 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42   db->aDb[iDb].pB
13930 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t!=0 );.  assert
13940 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
13950 26 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29  & (1<<iDb))!=0 )
13960 3b 0a 20 20 2f 2a 20 54 68 65 20 69 6e 64 65 78  ;.  /* The index
13970 69 6e 67 20 6f 66 20 6d 65 74 61 20 76 61 6c 75  ing of meta valu
13980 65 73 20 61 74 20 74 68 65 20 73 63 68 65 6d 61  es at the schema
13990 20 6c 61 79 65 72 20 69 73 20 6f 66 66 20 62 79   layer is off by
139a0 20 6f 6e 65 20 66 72 6f 6d 0a 20 20 2a 2a 20 74   one from.  ** t
139b0 68 65 20 69 6e 64 65 78 69 6e 67 20 69 6e 20 74  he indexing in t
139c0 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
139d0 20 54 68 65 20 62 74 72 65 65 20 63 6f 6e 73 69   The btree consi
139e0 64 65 72 73 20 6d 65 74 61 5b 30 5d 20 74 6f 0a  ders meta[0] to.
139f0 20 20 2a 2a 20 62 65 20 74 68 65 20 6e 75 6d 62    ** be the numb
13a00 65 72 20 6f 66 20 66 72 65 65 20 70 61 67 65 73  er of free pages
13a10 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
13a20 20 28 61 20 72 65 61 64 2d 6f 6e 6c 79 20 76 61   (a read-only va
13a30 6c 75 65 29 0a 20 20 2a 2a 20 61 6e 64 20 6d 65  lue).  ** and me
13a40 74 61 5b 31 5d 20 74 6f 20 62 65 20 74 68 65 20  ta[1] to be the 
13a50 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 2e 20 20  schema cookie.  
13a60 54 68 65 20 73 63 68 65 6d 61 20 6c 61 79 65 72  The schema layer
13a70 20 63 6f 6e 73 69 64 65 72 73 0a 20 20 2a 2a 20   considers.  ** 
13a80 6d 65 74 61 5b 31 5d 20 74 6f 20 62 65 20 74 68  meta[1] to be th
13a90 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 2e  e schema cookie.
13aa0 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20    So we have to 
13ab0 73 68 69 66 74 20 74 68 65 20 69 6e 64 65 78 0a  shift the index.
13ac0 20 20 2a 2a 20 62 79 20 6f 6e 65 20 69 6e 20 74    ** by one in t
13ad0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61  he following sta
13ae0 74 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 72  tement..  */.  r
13af0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
13b00 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b  GetMeta(db->aDb[
13b10 69 44 62 5d 2e 70 42 74 2c 20 31 20 2b 20 69 43  iDb].pBt, 1 + iC
13b20 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69  ookie, (u32 *)&i
13b30 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  Meta);.  pOut->u
13b40 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 4d 65  .i = iMeta;.  Me
13b50 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
13b60 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62  t, MEM_Int);.  b
13b70 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
13b80 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31  de: SetCookie P1
13b90 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
13ba0 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74 65   Write the conte
13bb0 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
13bc0 33 20 28 69 6e 74 65 72 70 72 65 74 65 64 20 61  3 (interpreted a
13bd0 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a  s an integer).**
13be0 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d   into cookie num
13bf0 62 65 72 20 50 32 20 6f 66 20 64 61 74 61 62 61  ber P2 of databa
13c00 73 65 20 50 31 2e 0a 2a 2a 20 50 32 3d 3d 30 20  se P1..** P2==0 
13c10 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
13c20 72 73 69 6f 6e 2e 20 20 50 32 3d 3d 31 20 69 73  rsion.  P2==1 is
13c30 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
13c40 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d 3d 32 20 69  rmat..** P2==2 i
13c50 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
13c60 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69  d pager cache si
13c70 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
13c80 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74  .  P1==0 is.** t
13c90 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
13ca0 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
13cb0 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
13cc0 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
13cd0 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  re.** temporary 
13ce0 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  tables..**.** A 
13cf0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74  transaction must
13d00 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f   be started befo
13d10 72 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  re executing thi
13d20 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  s opcode..*/.cas
13d30 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20  e OP_SetCookie: 
13d40 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a  {       /* in3 *
13d50 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61  /.  Db *pDb;.  a
13d60 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53  ssert( pOp->p2<S
13d70 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
13d80 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
13d90 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
13da0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
13db0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
13dc0 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
13dd0 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20  Op->p1))!=0 );. 
13de0 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
13df0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
13e00 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20  rt( pDb->pBt!=0 
13e10 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
13e20 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
13e30 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f  n3);.  /* See no
13e40 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73  te about index s
13e50 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65  hifting on OP_Re
13e60 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63  adCookie */.  rc
13e70 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55   = sqlite3BtreeU
13e80 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70  pdateMeta(pDb->p
13e90 42 74 2c 20 31 2b 70 4f 70 2d 3e 70 32 2c 20 28  Bt, 1+pOp->p2, (
13ea0 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  int)pIn3->u.i);.
13eb0 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30    if( pOp->p2==0
13ec0 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20   ){.    /* When 
13ed0 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
13ee0 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72  e changes, recor
13ef0 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65  d the new cookie
13f00 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20   internally */. 
13f10 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
13f20 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d  >schema_cookie =
13f30 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn3->u.i;.    
13f40 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
13f50 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
13f60 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  s;.  }else if( p
13f70 4f 70 2d 3e 70 32 3d 3d 31 20 29 7b 0a 20 20 20  Op->p2==1 ){.   
13f80 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67   /* Record chang
13f90 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66  es in the file f
13fa0 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62  ormat */.    pDb
13fb0 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
13fc0 66 6f 72 6d 61 74 20 3d 20 70 49 6e 33 2d 3e 75  format = pIn3->u
13fd0 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  .i;.  }.  if( pO
13fe0 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20  p->p1==1 ){.    
13ff0 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c  /* Invalidate al
14000 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  l prepared state
14010 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74  ments whenever t
14020 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
14030 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69  .    ** schema i
14040 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b  s changed.  Tick
14050 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20  et #1644 */.    
14060 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
14070 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
14080 64 62 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  db);.  }.  break
14090 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
140a0 56 65 72 69 66 79 43 6f 6f 6b 69 65 20 50 31 20  VerifyCookie P1 
140b0 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b  P2 *.**.** Check
140c0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 67 6c   the value of gl
140d0 6f 62 61 6c 20 64 61 74 61 62 61 73 65 20 70 61  obal database pa
140e0 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 30  rameter number 0
140f0 20 28 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20   (the.** schema 
14100 76 65 72 73 69 6f 6e 29 20 61 6e 64 20 6d 61 6b  version) and mak
14110 65 20 73 75 72 65 20 69 74 20 69 73 20 65 71 75  e sure it is equ
14120 61 6c 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 50  al to P2.  .** P
14130 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  1 is the databas
14140 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69  e number which i
14150 73 20 30 20 66 6f 72 20 74 68 65 20 6d 61 69 6e  s 0 for the main
14160 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
14170 2a 20 61 6e 64 20 31 20 66 6f 72 20 74 68 65 20  * and 1 for the 
14180 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d  file holding tem
14190 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e  porary tables an
141a0 64 20 73 6f 6d 65 20 68 69 67 68 65 72 20 6e 75  d some higher nu
141b0 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78 69  mber.** for auxi
141c0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 73 2e  liary databases.
141d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69  .**.** The cooki
141e0 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61  e changes its va
141f0 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  lue whenever the
14200 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
14210 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69   changes..** Thi
14220 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75  s operation is u
14230 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68  sed to detect wh
14240 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b  en that the cook
14250 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ie has changed.*
14260 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63  * and that the c
14270 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e  urrent process n
14280 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74  eeds to reread t
14290 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a  he schema..**.**
142a0 20 45 69 74 68 65 72 20 61 20 74 72 61 6e 73 61   Either a transa
142b0 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 68  ction needs to h
142c0 61 76 65 20 62 65 65 6e 20 73 74 61 72 74 65 64  ave been started
142d0 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e   or an OP_Open n
142e0 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65 78  eeds.** to be ex
142f0 65 63 75 74 65 64 20 28 74 6f 20 65 73 74 61 62  ecuted (to estab
14300 6c 69 73 68 20 61 20 72 65 61 64 20 6c 6f 63 6b  lish a read lock
14310 29 20 62 65 66 6f 72 65 20 74 68 69 73 20 6f 70  ) before this op
14320 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b  code is.** invok
14330 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ed..*/.case OP_V
14340 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20  erifyCookie: {. 
14350 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 42 74   int iMeta;.  Bt
14360 72 65 65 20 2a 70 42 74 3b 0a 20 20 61 73 73 65  ree *pBt;.  asse
14370 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
14380 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
14390 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
143a0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
143b0 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  1<<pOp->p1))!=0 
143c0 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
143d0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
143e0 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20  .  if( pBt ){.  
143f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
14400 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20  reeGetMeta(pBt, 
14410 31 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  1, (u32 *)&iMeta
14420 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
14430 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
14440 20 20 20 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20      iMeta = 0;. 
14450 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c   }.  if( rc==SQL
14460 49 54 45 5f 4f 4b 20 26 26 20 69 4d 65 74 61 21  ITE_OK && iMeta!
14470 3d 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20  =pOp->p2 ){.    
14480 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
14490 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
144a0 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
144b0 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
144c0 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63  db, "database sc
144d0 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
144e0 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  ");.    /* If th
144f0 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
14500 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
14510 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74  e file matches t
14520 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a  he cookie .    *
14530 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68  * stored with th
14540 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72  e in-memory repr
14550 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
14560 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20  e schema, do.   
14570 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74   ** not reload t
14580 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74  he schema from t
14590 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
145a0 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
145b0 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  If virtual-table
145c0 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68  s are in use, th
145d0 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61  is is not just a
145e0 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a  n optimization..
145f0 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d      ** Often, v-
14600 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65  tables store the
14610 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72  ir data in other
14620 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20   SQLite tables, 
14630 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65  which.    ** are
14640 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69   queried from wi
14650 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64  thin xNext() and
14660 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d   other v-table m
14670 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20  ethods using.   
14680 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65   ** prepared que
14690 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20  ries. If such a 
146a0 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d  query is out-of-
146b0 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20  date, we do not 
146c0 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64  want to.    ** d
146d0 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62  iscard the datab
146e0 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74  ase schema, as t
146f0 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70  he user code imp
14700 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20  lementing the.  
14710 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75    ** v-table wou
14720 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65  ld have to be re
14730 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ady for the sqli
14740 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
14750 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a  re itself.    **
14760 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74   to be invalidat
14770 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69  ed whenever sqli
14780 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61  te3_step() is ca
14790 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
147a0 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62   .    ** a v-tab
147b0 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a  le method..    *
147c0 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44  /.    if( db->aD
147d0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
147e0 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
147f0 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20  e!=iMeta ){.    
14800 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e    sqlite3ResetIn
14810 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c  ternalSchema(db,
14820 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d   pOp->p1);.    }
14830 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  ..    sqlite3Exp
14840 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
14850 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 72  ments(db);.    r
14860 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d  c = SQLITE_SCHEM
14870 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  A;.  }.  break;.
14880 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
14890 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20  enRead P1 P2 P3 
148a0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  P4 P5.**.** Open
148b0 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72   a read-only cur
148c0 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61  sor for the data
148d0 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65  base table whose
148e0 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a   root page is.**
148f0 20 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73   P2 in a databas
14900 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74  e file.  The dat
14910 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65  abase file is de
14920 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20  termined by P3. 
14930 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20  .** P3==0 means 
14940 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
14950 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74  e, P3==1 means t
14960 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64  he database used
14970 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61   for .** tempora
14980 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50  ry tables, and P
14990 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74  3>1 means used t
149a0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
149b0 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74   attached.** dat
149c0 61 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65  abase.  Give the
149d0 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69   new cursor an i
149e0 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e  dentifier of P1.
149f0 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75    The P1.** valu
14a00 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63  es need not be c
14a10 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c  ontiguous but al
14a20 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75  l P1 values shou
14a30 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65  ld be small inte
14a40 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61  gers..** It is a
14a50 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74  n error for P1 t
14a60 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a  o be negative..*
14a70 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68  *.** If P5!=0 th
14a80 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65  en use the conte
14a90 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
14aa0 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61  2 as the root pa
14ab0 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76  ge, not.** the v
14ac0 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c  alue of P2 itsel
14ad0 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77  f..**.** There w
14ae0 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f  ill be a read lo
14af0 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
14b00 73 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72  se whenever ther
14b10 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20  e is an.** open 
14b20 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20  cursor.  If the 
14b30 64 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c  database was unl
14b40 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74  ocked prior to t
14b50 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  his instruction.
14b60 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c  ** then a read l
14b70 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20  ock is acquired 
14b80 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20  as part of this 
14b90 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20  instruction.  A 
14ba0 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c  read.** lock all
14bb0 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73  ows other proces
14bc0 73 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20  ses to read the 
14bd0 64 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f  database but pro
14be0 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74  hibits.** any ot
14bf0 68 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d  her process from
14c00 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64   modifying the d
14c10 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65  atabase.  The re
14c20 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65  ad lock is.** re
14c30 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20  leased when all 
14c40 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73  cursors are clos
14c50 65 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73  ed.  If this ins
14c60 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74  truction attempt
14c70 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65  s.** to get a re
14c80 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c  ad lock but fail
14c90 73 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65  s, the script te
14ca0 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e  rminates with an
14cb0 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20  .** SQLITE_BUSY 
14cc0 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  error code..**.*
14cd0 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69  * The P4 value i
14ce0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
14cf0 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
14d00 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  re that defines 
14d10 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 61  the.** content a
14d20 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  nd collating seq
14d30 75 65 6e 63 65 20 6f 66 20 69 6e 64 69 63 65 73  uence of indices
14d40 2e 20 20 50 34 20 69 73 20 4e 55 4c 4c 20 66 6f  .  P4 is NULL fo
14d50 72 20 63 75 72 73 6f 72 73 0a 2a 2a 20 74 68 61  r cursors.** tha
14d60 74 20 61 72 65 20 6e 6f 74 20 70 6f 69 6e 74 69  t are not pointi
14d70 6e 67 20 74 6f 20 69 6e 64 69 63 65 73 2e 0a 2a  ng to indices..*
14d80 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70  *.** See also Op
14d90 65 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f  enWrite..*/./* O
14da0 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65  pcode: OpenWrite
14db0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
14dc0 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61  **.** Open a rea
14dd0 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e  d/write cursor n
14de0 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74  amed P1 on the t
14df0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
14e00 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65  ose root.** page
14e10 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50   is P2.  Or if P
14e20 35 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e  5!=0 use the con
14e30 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
14e40 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a   P2 to find the.
14e50 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a  ** root page..**
14e60 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
14e70 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
14e80 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
14e90 74 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65  ture that define
14ea0 73 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74  s the.** content
14eb0 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 73   and collating s
14ec0 65 71 75 65 6e 63 65 20 6f 66 20 69 6e 64 69 63  equence of indic
14ed0 65 73 2e 20 20 50 34 20 69 73 20 4e 55 4c 4c 20  es.  P4 is NULL 
14ee0 66 6f 72 20 63 75 72 73 6f 72 73 0a 2a 2a 20 74  for cursors.** t
14ef0 68 61 74 20 61 72 65 20 6e 6f 74 20 70 6f 69 6e  hat are not poin
14f00 74 69 6e 67 20 74 6f 20 69 6e 64 69 63 65 73 2e  ting to indices.
14f10 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
14f20 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75  ruction works ju
14f30 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64  st like OpenRead
14f40 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
14f50 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72  opens the cursor
14f60 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74  .** in read/writ
14f70 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67  e mode.  For a g
14f80 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72  iven table, ther
14f90 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20  e can be one or 
14fa0 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a  more read-only.*
14fb0 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73  * cursors or a s
14fc0 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65  ingle read/write
14fd0 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20   cursor but not 
14fe0 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  both..**.** See 
14ff0 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a  also OpenRead..*
15000 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65  /.case OP_OpenRe
15010 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  ad:.case OP_Open
15020 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 69  Write: {.  int i
15030 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e   = pOp->p1;.  in
15040 74 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  t p2 = pOp->p2;.
15050 20 20 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d    int iDb = pOp-
15060 3e 70 33 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61  >p3;.  int wrFla
15070 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a  g;.  Btree *pX;.
15080 20 20 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a    Cursor *pCur;.
15090 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 0a 20 20    Db *pDb;.  .  
150a0 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
150b0 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
150c0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
150d0 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69  treeMask & (1<<i
150e0 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62  Db))!=0 );.  pDb
150f0 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d   = &db->aDb[iDb]
15100 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42  ;.  pX = pDb->pB
15110 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58 21  t;.  assert( pX!
15120 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  =0 );.  if( pOp-
15130 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
15140 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72 46  Write ){.    wrF
15150 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 69 66 28  lag = 1;.    if(
15160 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
15170 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e  ile_format < p->
15180 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
15190 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d  at ){.      p->m
151a0 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
151b0 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  t = pDb->pSchema
151c0 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20  ->file_format;. 
151d0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
151e0 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20    wrFlag = 0;.  
151f0 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  }.  if( pOp->p5 
15200 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
15210 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  2>0 );.    asser
15220 74 28 20 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  t( p2<=p->nMem )
15230 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 70 2d  ;.    pIn2 = &p-
15240 3e 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 73  >aMem[p2];.    s
15250 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
15260 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
15270 20 20 20 70 32 20 3d 20 70 49 6e 32 2d 3e 75 2e     p2 = pIn2->u.
15280 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  i;.    assert( p
15290 32 3e 3d 32 20 29 3b 0a 20 20 7d 0a 20 20 61 73  2>=2 );.  }.  as
152a0 73 65 72 74 28 20 69 3e 3d 30 20 29 3b 0a 20 20  sert( i>=0 );.  
152b0 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43  pCur = allocateC
152c0 75 72 73 6f 72 28 70 2c 20 69 2c 20 26 70 4f 70  ursor(p, i, &pOp
152d0 5b 2d 31 5d 2c 20 69 44 62 2c 20 31 29 3b 0a 20  [-1], iDb, 1);. 
152e0 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67   if( pCur==0 ) g
152f0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
15300 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  ur->nullRow = 1;
15310 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
15320 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70  treeCursor(pX, p
15330 32 2c 20 77 72 46 6c 61 67 2c 20 70 4f 70 2d 3e  2, wrFlag, pOp->
15340 70 34 2e 70 2c 20 70 43 75 72 2d 3e 70 43 75 72  p4.p, pCur->pCur
15350 73 6f 72 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  sor);.  if( pOp-
15360 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
15370 4e 46 4f 20 29 7b 0a 20 20 20 20 70 43 75 72 2d  NFO ){.    pCur-
15380 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d  >pKeyInfo = pOp-
15390 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
153a0 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f    pCur->pKeyInfo
153b0 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64  ->enc = ENC(p->d
153c0 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  b);.  }else{.   
153d0 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20   pCur->pKeyInfo 
153e0 3d 20 30 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63  = 0;.  }.  switc
153f0 68 28 20 72 63 20 29 7b 0a 20 20 20 20 63 61 73  h( rc ){.    cas
15400 65 20 53 51 4c 49 54 45 5f 42 55 53 59 3a 20 7b  e SQLITE_BUSY: {
15410 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70  .      p->pc = p
15420 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d  c;.      p->rc =
15430 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
15440 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  Y;.      goto vd
15450 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
15460 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
15470 5f 4f 4b 3a 20 7b 0a 20 20 20 20 20 20 69 6e 74  _OK: {.      int
15480 20 66 6c 61 67 73 20 3d 20 73 71 6c 69 74 65 33   flags = sqlite3
15490 42 74 72 65 65 46 6c 61 67 73 28 70 43 75 72 2d  BtreeFlags(pCur-
154a0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
154b0 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b   /* Sanity check
154c0 69 6e 67 2e 20 20 4f 6e 6c 79 20 74 68 65 20 6c  ing.  Only the l
154d0 6f 77 65 72 20 66 6f 75 72 20 62 69 74 73 20 6f  ower four bits o
154e0 66 20 74 68 65 20 66 6c 61 67 73 20 62 79 74 65  f the flags byte
154f0 20 73 68 6f 75 6c 64 0a 20 20 20 20 20 20 2a 2a   should.      **
15500 20 62 65 20 75 73 65 64 2e 20 20 42 69 74 20 33   be used.  Bit 3
15510 20 28 6d 61 73 6b 20 30 78 30 38 29 20 69 73 20   (mask 0x08) is 
15520 75 6e 70 72 65 64 69 63 74 61 62 6c 65 2e 20 20  unpredictable.  
15530 54 68 65 20 6c 6f 77 65 72 20 33 20 62 69 74 73  The lower 3 bits
15540 0a 20 20 20 20 20 20 2a 2a 20 28 6d 61 73 6b 20  .      ** (mask 
15550 30 78 30 37 29 20 73 68 6f 75 6c 64 20 62 65 20  0x07) should be 
15560 65 69 74 68 65 72 20 35 20 28 69 6e 74 6b 65 79  either 5 (intkey
15570 2b 6c 65 61 66 64 61 74 61 20 66 6f 72 20 74 61  +leafdata for ta
15580 62 6c 65 73 29 20 6f 72 0a 20 20 20 20 20 20 2a  bles) or.      *
15590 2a 20 32 20 28 7a 65 72 6f 64 61 74 61 20 66 6f  * 2 (zerodata fo
155a0 72 20 69 6e 64 69 63 65 73 29 2e 20 20 49 66 20  r indices).  If 
155b0 74 68 65 73 65 20 63 6f 6e 64 69 74 69 6f 6e 73  these conditions
155c0 20 61 72 65 20 6e 6f 74 20 6d 65 74 20 69 74 20   are not met it 
155d0 63 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f 6e 6c  can.      ** onl
155e0 79 20 6d 65 61 6e 20 74 68 61 74 20 77 65 20 61  y mean that we a
155f0 72 65 20 64 65 61 6c 69 6e 67 20 77 69 74 68 20  re dealing with 
15600 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  a corrupt databa
15610 73 65 20 66 69 6c 65 0a 20 20 20 20 20 20 2a 2f  se file.      */
15620 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67  .      if( (flag
15630 73 20 26 20 30 78 66 30 29 21 3d 30 20 7c 7c 20  s & 0xf0)!=0 || 
15640 28 28 66 6c 61 67 73 20 26 20 30 78 30 37 29 21  ((flags & 0x07)!
15650 3d 35 20 26 26 20 28 66 6c 61 67 73 20 26 20 30  =5 && (flags & 0
15660 78 30 37 29 21 3d 32 29 20 29 7b 0a 20 20 20 20  x07)!=2) ){.    
15670 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
15680 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
15690 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
156a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
156b0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 75       }.      pCu
156c0 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 28 66 6c  r->isTable = (fl
156d0 61 67 73 20 26 20 42 54 52 45 45 5f 49 4e 54 4b  ags & BTREE_INTK
156e0 45 59 29 21 3d 30 3b 0a 20 20 20 20 20 20 70 43  EY)!=0;.      pC
156f0 75 72 2d 3e 69 73 49 6e 64 65 78 20 3d 20 28 66  ur->isIndex = (f
15700 6c 61 67 73 20 26 20 42 54 52 45 45 5f 5a 45 52  lags & BTREE_ZER
15710 4f 44 41 54 41 29 21 3d 30 3b 0a 20 20 20 20 20  ODATA)!=0;.     
15720 20 2f 2a 20 49 66 20 50 34 3d 3d 30 20 69 74 20   /* If P4==0 it 
15730 6d 65 61 6e 73 20 77 65 20 61 72 65 20 65 78 70  means we are exp
15740 65 63 74 65 64 20 74 6f 20 6f 70 65 6e 20 61 20  ected to open a 
15750 74 61 62 6c 65 2e 20 20 49 66 20 50 34 21 3d 30  table.  If P4!=0
15760 20 74 68 65 6e 0a 20 20 20 20 20 20 2a 2a 20 77   then.      ** w
15770 65 20 65 78 70 65 63 74 20 74 6f 20 62 65 20 6f  e expect to be o
15780 70 65 6e 69 6e 67 20 61 6e 20 69 6e 64 65 78 2e  pening an index.
15790 20 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74    If this is not
157a0 20 77 68 61 74 20 68 61 70 70 65 6e 65 64 2c 0a   what happened,.
157b0 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
157c0 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6f  e database is co
157d0 72 72 75 70 74 0a 20 20 20 20 20 20 2a 2f 0a 20  rrupt.      */. 
157e0 20 20 20 20 20 69 66 28 20 28 70 43 75 72 2d 3e       if( (pCur->
157f0 69 73 54 61 62 6c 65 20 26 26 20 70 4f 70 2d 3e  isTable && pOp->
15800 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
15810 46 4f 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 70  FO).       || (p
15820 43 75 72 2d 3e 69 73 49 6e 64 65 78 20 26 26 20  Cur->isIndex && 
15830 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f  pOp->p4type!=P4_
15840 4b 45 59 49 4e 46 4f 29 20 29 7b 0a 20 20 20 20  KEYINFO) ){.    
15850 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
15860 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
15870 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
15880 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
15890 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65       }.      bre
158a0 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  ak;.    }.    ca
158b0 73 65 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 3a  se SQLITE_EMPTY:
158c0 20 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 69   {.      pCur->i
158d0 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34  sTable = pOp->p4
158e0 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f  type!=P4_KEYINFO
158f0 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 69 73  ;.      pCur->is
15900 49 6e 64 65 78 20 3d 20 21 70 43 75 72 2d 3e 69  Index = !pCur->i
15910 73 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 70 43  sTable;.      pC
15920 75 72 2d 3e 70 43 75 72 73 6f 72 20 3d 20 30 3b  ur->pCursor = 0;
15930 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
15940 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 62 72 65  TE_OK;.      bre
15950 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 65  ak;.    }.    de
15960 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 67  fault: {.      g
15970 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
15980 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
15990 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
159a0 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68   Opcode: OpenEph
159b0 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50  emeral P1 P2 * P
159c0 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  4 *.**.** Open a
159d0 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74   new cursor P1 t
159e0 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  o a transient ta
159f0 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
15a00 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65  or is always ope
15a10 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65  ned read/write e
15a20 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d  ven if .** the m
15a30 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
15a40 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20  read-only.  The 
15a50 74 72 61 6e 73 69 65 6e 74 20 6f 72 20 76 69 72  transient or vir
15a60 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73  tual.** table is
15a70 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74   deleted automat
15a80 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20  ically when the 
15a90 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64  cursor is closed
15aa0 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
15ab0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
15ac0 6d 6e 73 20 69 6e 20 74 68 65 20 76 69 72 74 75  mns in the virtu
15ad0 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  al table..** The
15ae0 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74   cursor points t
15af0 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20  o a BTree table 
15b00 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20  if P4==0 and to 
15b10 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a  a BTree index.**
15b20 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e   if P4 is not 0.
15b30 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e    If P4 is not N
15b40 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74  ULL, it points t
15b50 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  o a KeyInfo stru
15b60 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65  cture.** that de
15b70 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74  fines the format
15b80 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20   of keys in the 
15b90 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  index..**.** Thi
15ba0 73 20 6f 70 63 6f 64 65 20 77 61 73 20 6f 6e 63  s opcode was onc
15bb0 65 20 63 61 6c 6c 65 64 20 4f 70 65 6e 54 65 6d  e called OpenTem
15bc0 70 2e 20 20 42 75 74 20 74 68 61 74 20 63 72 65  p.  But that cre
15bd0 61 74 65 64 0a 2a 2a 20 63 6f 6e 66 75 73 69 6f  ated.** confusio
15be0 6e 20 62 65 63 61 75 73 65 20 74 68 65 20 74 65  n because the te
15bf0 72 6d 20 22 74 65 6d 70 20 74 61 62 6c 65 22 2c  rm "temp table",
15c00 20 6d 69 67 68 74 20 72 65 66 65 72 20 65 69 74   might refer eit
15c10 68 65 72 0a 2a 2a 20 74 6f 20 61 20 54 45 4d 50  her.** to a TEMP
15c20 20 74 61 62 6c 65 20 61 74 20 74 68 65 20 53 51   table at the SQ
15c30 4c 20 6c 65 76 65 6c 2c 20 6f 72 20 74 6f 20 61  L level, or to a
15c40 20 74 61 62 6c 65 20 6f 70 65 6e 65 64 20 62 79   table opened by
15c50 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  .** this opcode.
15c60 20 20 54 68 65 6e 20 74 68 69 73 20 6f 70 63 6f    Then this opco
15c70 64 65 20 77 61 73 20 63 61 6c 6c 20 4f 70 65 6e  de was call Open
15c80 56 69 72 74 75 61 6c 2e 20 20 42 75 74 0a 2a 2a  Virtual.  But.**
15c90 20 74 68 61 74 20 63 72 65 61 74 65 64 20 63 6f   that created co
15ca0 6e 66 75 73 69 6f 6e 20 77 69 74 68 20 74 68 65  nfusion with the
15cb0 20 77 68 6f 6c 65 20 76 69 72 74 75 61 6c 2d 74   whole virtual-t
15cc0 61 62 6c 65 20 69 64 65 61 2e 0a 2a 2f 0a 63 61  able idea..*/.ca
15cd0 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  se OP_OpenEpheme
15ce0 72 61 6c 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d  ral: {.  int i =
15cf0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73   pOp->p1;.  Curs
15d00 6f 72 20 2a 70 43 78 3b 0a 20 20 73 74 61 74 69  or *pCx;.  stati
15d10 63 20 63 6f 6e 73 74 20 69 6e 74 20 6f 70 65 6e  c const int open
15d20 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53  Flags = .      S
15d30 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57  QLITE_OPEN_READW
15d40 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  RITE |.      SQL
15d50 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20  ITE_OPEN_CREATE 
15d60 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
15d70 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a  PEN_EXCLUSIVE |.
15d80 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
15d90 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20  N_DELETEONCLOSE 
15da0 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
15db0 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42  PEN_TRANSIENT_DB
15dc0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  ;..  assert( i>=
15dd0 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
15de0 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 69  ocateCursor(p, i
15df0 2c 20 70 4f 70 2c 20 2d 31 2c 20 31 29 3b 0a 20  , pOp, -1, 1);. 
15e00 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
15e10 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
15e20 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
15e30 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
15e40 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20 30 2c  eeFactory(db, 0,
15e50 20 31 2c 20 53 51 4c 49 54 45 5f 44 45 46 41 55   1, SQLITE_DEFAU
15e60 4c 54 5f 54 45 4d 50 5f 43 41 43 48 45 5f 53 49  LT_TEMP_CACHE_SI
15e70 5a 45 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 0a 20  ZE, openFlags,. 
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e90 20 20 20 20 20 20 20 20 20 20 26 70 43 78 2d 3e            &pCx->
15ea0 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  pBt);.  if( rc==
15eb0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
15ec0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
15ed0 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78  eeBeginTrans(pCx
15ee0 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20  ->pBt, 1);.  }. 
15ef0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
15f00 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  OK ){.    /* If 
15f10 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65  a transient inde
15f20 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 63  x is required, c
15f30 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c  reate it by call
15f40 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74  ing.    ** sqlit
15f50 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
15f60 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42 54  le() with the BT
15f70 52 45 45 5f 5a 45 52 4f 44 41 54 41 20 66 6c 61  REE_ZERODATA fla
15f80 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20  g before.    ** 
15f90 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61  opening it. If a
15fa0 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
15fb0 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75   is required, ju
15fc0 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a  st use the.    *
15fd0 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
15fe0 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69  created table wi
15ff0 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28  th root-page 1 (
16000 61 6e 20 49 4e 54 4b 45 59 20 74 61 62 6c 65 29  an INTKEY table)
16010 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
16020 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
16030 6f 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70  o ){.      int p
16040 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72  gno;.      asser
16050 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
16060 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20  P4_KEYINFO );.  
16070 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
16080 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65  BtreeCreateTable
16090 28 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f  (pCx->pBt, &pgno
160a0 2c 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41  , BTREE_ZERODATA
160b0 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72 63  ); .      if( rc
160c0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
160d0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
160e0 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54  gno==MASTER_ROOT
160f0 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63  +1 );.        rc
16100 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
16110 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20  ursor(pCx->pBt, 
16120 70 67 6e 6f 2c 20 31 2c 20 0a 20 20 20 20 20 20  pgno, 1, .      
16130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16140 20 20 20 20 20 20 20 20 20 20 28 4b 65 79 49 6e            (KeyIn
16150 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70  fo*)pOp->p4.z, p
16160 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  Cx->pCursor);.  
16170 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49        pCx->pKeyI
16180 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
16190 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20  eyInfo;.        
161a0 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65  pCx->pKeyInfo->e
161b0 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b  nc = ENC(p->db);
161c0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
161d0 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b  Cx->isTable = 0;
161e0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
161f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
16200 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
16210 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c  Bt, MASTER_ROOT,
16220 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75 72   1, 0, pCx->pCur
16230 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d  sor);.      pCx-
16240 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20  >isTable = 1;.  
16250 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69    }.  }.  pCx->i
16260 73 49 6e 64 65 78 20 3d 20 21 70 43 78 2d 3e 69  sIndex = !pCx->i
16270 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b  sTable;.  break;
16280 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
16290 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20  penPseudo P1 P2 
162a0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  * * *.**.** Open
162b0 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68   a new cursor th
162c0 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66  at points to a f
162d0 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  ake table that c
162e0 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65  ontains a single
162f0 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e  .** row of data.
16300 20 20 41 6e 79 20 61 74 74 65 6d 70 74 20 74 6f    Any attempt to
16310 20 77 72 69 74 65 20 61 20 73 65 63 6f 6e 64 20   write a second 
16320 72 6f 77 20 6f 66 20 64 61 74 61 20 63 61 75 73  row of data caus
16330 65 73 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20  es the.** first 
16340 72 6f 77 20 74 6f 20 62 65 20 64 65 6c 65 74 65  row to be delete
16350 64 2e 20 20 41 6c 6c 20 64 61 74 61 20 69 73 20  d.  All data is 
16360 64 65 6c 65 74 65 64 20 77 68 65 6e 20 74 68 65  deleted when the
16370 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6c   cursor is.** cl
16380 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73  osed..**.** A ps
16390 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74  eudo-table creat
163a0 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
163b0 65 20 69 73 20 75 73 65 66 75 6c 20 66 6f 72 20  e is useful for 
163c0 68 6f 6c 64 69 6e 67 20 74 68 65 0a 2a 2a 20 4e  holding the.** N
163d0 45 57 20 6f 72 20 4f 4c 44 20 74 61 62 6c 65 73  EW or OLD tables
163e0 20 69 6e 20 61 20 74 72 69 67 67 65 72 2e 20 20   in a trigger.  
163f0 41 6c 73 6f 20 75 73 65 64 20 74 6f 20 68 6f 6c  Also used to hol
16400 64 20 74 68 65 20 61 20 73 69 6e 67 6c 65 0a 2a  d the a single.*
16410 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f  * row output fro
16420 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20  m the sorter so 
16430 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e  that the row can
16440 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69   be decomposed i
16450 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61  nto.** individua
16460 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20  l columns using 
16470 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  the OP_Column op
16480 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  code..**.** When
16490 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 65 78   OP_Insert is ex
164a0 65 63 75 74 65 64 20 74 6f 20 69 6e 73 65 72 74  ecuted to insert
164b0 20 61 20 72 6f 77 20 69 6e 20 74 6f 20 74 68 65   a row in to the
164c0 20 70 73 65 75 64 6f 20 74 61 62 6c 65 2c 0a 2a   pseudo table,.*
164d0 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62  * the pseudo-tab
164e0 6c 65 20 63 75 72 73 6f 72 20 6d 61 79 20 6f 72  le cursor may or
164f0 20 6d 61 79 20 6e 6f 74 20 6d 61 6b 65 20 69 74   may not make it
16500 27 73 20 6f 77 6e 20 63 6f 70 79 20 6f 66 20 74  's own copy of t
16510 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 72  he.** original r
16520 6f 77 20 64 61 74 61 2e 20 49 66 20 50 32 20 69  ow data. If P2 i
16530 73 20 30 2c 20 74 68 65 6e 20 74 68 65 20 70 73  s 0, then the ps
16540 65 75 64 6f 2d 74 61 62 6c 65 20 77 69 6c 6c 20  eudo-table will 
16550 63 6f 70 79 20 74 68 65 0a 2a 2a 20 6f 72 69 67  copy the.** orig
16560 69 6e 61 6c 20 72 6f 77 20 64 61 74 61 2e 20 4f  inal row data. O
16570 74 68 65 72 77 69 73 65 2c 20 61 20 70 6f 69 6e  therwise, a poin
16580 74 65 72 20 74 6f 20 74 68 65 20 6f 72 69 67 69  ter to the origi
16590 6e 61 6c 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 0a  nal memory cell.
165a0 2a 2a 20 69 73 20 73 74 6f 72 65 64 2e 20 49 6e  ** is stored. In
165b0 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65 20   this case, the 
165c0 76 64 62 65 20 70 72 6f 67 72 61 6d 20 6d 75 73  vdbe program mus
165d0 74 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68  t ensure that th
165e0 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c  e .** memory cel
165f0 6c 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  l containing the
16600 20 72 6f 77 20 64 61 74 61 20 69 73 20 6e 6f 74   row data is not
16610 20 6f 76 65 72 77 72 69 74 74 65 6e 20 75 6e 74   overwritten unt
16620 69 6c 20 74 68 65 0a 2a 2a 20 70 73 65 75 64 6f  il the.** pseudo
16630 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64   table is closed
16640 20 28 6f 72 20 61 20 6e 65 77 20 72 6f 77 20 69   (or a new row i
16650 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
16660 69 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  it)..*/.case OP_
16670 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20  OpenPseudo: {.  
16680 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
16690 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  .  Cursor *pCx;.
166a0 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29    assert( i>=0 )
166b0 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
166c0 74 65 43 75 72 73 6f 72 28 70 2c 20 69 2c 20 26  teCursor(p, i, &
166d0 70 4f 70 5b 2d 31 5d 2c 20 2d 31 2c 20 30 29 3b  pOp[-1], -1, 0);
166e0 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
166f0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
16700 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
16710 0a 20 20 70 43 78 2d 3e 70 73 65 75 64 6f 54 61  .  pCx->pseudoTa
16720 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  ble = 1;.  pCx->
16730 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65  ephemPseudoTable
16740 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43   = pOp->p2;.  pC
16750 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a  x->isTable = 1;.
16760 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d    pCx->isIndex =
16770 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
16780 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65  /* Opcode: Close
16790 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
167a0 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72  * Close a cursor
167b0 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e   previously open
167c0 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31  ed as P1.  If P1
167d0 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65   is not.** curre
167e0 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20  ntly open, this 
167f0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61  instruction is a
16800 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20   no-op..*/.case 
16810 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 69 6e  OP_Close: {.  in
16820 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  t i = pOp->p1;. 
16830 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
16840 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b   i<p->nCursor );
16850 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72  .  sqlite3VdbeFr
16860 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
16870 70 43 73 72 5b 69 5d 29 3b 0a 20 20 70 2d 3e 61  pCsr[i]);.  p->a
16880 70 43 73 72 5b 69 5d 20 3d 20 30 3b 0a 20 20 62  pCsr[i] = 0;.  b
16890 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
168a0 64 65 3a 20 4d 6f 76 65 47 65 20 50 31 20 50 32  de: MoveGe P1 P2
168b0 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49   P3 P4 *.**.** I
168c0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
168d0 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
168e0 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
168f0 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
16900 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
16910 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
16920 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
16930 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
16940 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
16950 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
16960 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
16970 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
16980 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
16990 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
169a0 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
169b0 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
169c0 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
169d0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
169e0 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
169f0 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
16a00 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
16a10 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
16a20 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
16a30 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
16a40 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
16a50 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  * greater than o
16a60 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
16a70 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
16a80 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
16a90 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20   to P2..**.** A 
16aa0 73 70 65 63 69 61 6c 20 66 65 61 74 75 72 65 20  special feature 
16ab0 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 28  of this opcode (
16ac0 61 6e 64 20 64 69 66 66 65 72 65 6e 74 20 66 72  and different fr
16ad0 6f 6d 20 74 68 65 0a 2a 2a 20 72 65 6c 61 74 65  om the.** relate
16ae0 64 20 4f 50 5f 4d 6f 76 65 47 74 2c 20 4f 50 5f  d OP_MoveGt, OP_
16af0 4d 6f 76 65 4c 74 2c 20 61 6e 64 20 4f 50 5f 4d  MoveLt, and OP_M
16b00 6f 76 65 4c 65 29 20 69 73 20 74 68 61 74 20 69  oveLe) is that i
16b10 66 20 50 32 20 69 73 0a 2a 2a 20 7a 65 72 6f 20  f P2 is.** zero 
16b20 61 6e 64 20 50 31 20 69 73 20 61 6e 20 53 51 4c  and P1 is an SQL
16b30 20 74 61 62 6c 65 20 28 61 20 62 2d 74 72 65 65   table (a b-tree
16b40 20 77 69 74 68 20 69 6e 74 65 67 65 72 20 6b 65   with integer ke
16b50 79 73 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  ys) then.** the 
16b60 73 65 65 6b 20 69 73 20 64 65 66 65 72 72 65 64  seek is deferred
16b70 20 75 6e 74 69 6c 20 69 74 20 69 73 20 61 63 74   until it is act
16b80 75 61 6c 6c 79 20 6e 65 65 64 65 64 2e 20 20 49  ually needed.  I
16b90 74 20 6d 69 67 68 74 20 62 65 0a 2a 2a 20 74 68  t might be.** th
16ba0 65 20 63 61 73 65 20 74 68 61 74 20 74 68 65 20  e case that the 
16bb0 63 75 72 73 6f 72 20 69 73 20 6e 65 76 65 72 20  cursor is never 
16bc0 61 63 63 65 73 73 65 64 2e 20 20 42 79 20 64 65  accessed.  By de
16bd0 66 65 72 72 69 6e 67 20 74 68 65 0a 2a 2a 20 73  ferring the.** s
16be0 65 65 6b 2c 20 77 65 20 61 76 6f 69 64 20 75 6e  eek, we avoid un
16bf0 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b 73 2e  necessary seeks.
16c00 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
16c10 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
16c20 2c 20 44 69 73 74 69 6e 63 74 2c 20 4d 6f 76 65  , Distinct, Move
16c30 4c 74 2c 20 4d 6f 76 65 47 74 2c 20 4d 6f 76 65  Lt, MoveGt, Move
16c40 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
16c50 20 4d 6f 76 65 47 74 20 50 31 20 50 32 20 50 33   MoveGt P1 P2 P3
16c60 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63   P4 *.**.** If c
16c70 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
16c80 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
16c90 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
16ca0 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
16cb0 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 69 6e 74   .** use the int
16cc0 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65  eger value in re
16cd0 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
16ce0 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
16cf0 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
16d00 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
16d10 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
16d20 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
16d30 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
16d40 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
16d50 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
16d60 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
16d70 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
16d80 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
16d90 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
16da0 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
16db0 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
16dc0 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
16dd0 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
16de0 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67  are no records g
16df0 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20  reater than .** 
16e00 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
16e10 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
16e20 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
16e30 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
16e40 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
16e50 73 74 69 6e 63 74 2c 20 4d 6f 76 65 4c 74 2c 20  stinct, MoveLt, 
16e60 4d 6f 76 65 47 65 2c 20 4d 6f 76 65 4c 65 0a 2a  MoveGe, MoveLe.*
16e70 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76  /./* Opcode: Mov
16e80 65 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20  eLt P1 P2 P3 P4 
16e90 2a 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  * .**.** If curs
16ea0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
16eb0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
16ec0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
16ed0 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
16ee0 2a 20 75 73 65 20 74 68 65 20 69 6e 74 65 67 65  * use the intege
16ef0 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
16f00 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
16f10 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
16f20 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
16f30 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
16f40 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
16f50 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
16f60 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
16f70 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
16f80 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
16f90 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
16fa0 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
16fb0 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
16fc0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
16fd0 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
16fe0 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
16ff0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
17000 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
17010 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61  records less tha
17020 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
17030 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
17040 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
17050 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
17060 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
17070 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 4d 6f  nd, Distinct, Mo
17080 76 65 47 74 2c 20 4d 6f 76 65 47 65 2c 20 4d 6f  veGt, MoveGe, Mo
17090 76 65 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  veLe.*/./* Opcod
170a0 65 3a 20 4d 6f 76 65 4c 65 20 50 31 20 50 32 20  e: MoveLe P1 P2 
170b0 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  P3 P4 *.**.** If
170c0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
170d0 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
170e0 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
170f0 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
17100 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 69  ), .** use the i
17110 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
17120 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
17130 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
17140 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
17150 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
17160 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
17170 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
17180 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
17190 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
171a0 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
171b0 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
171c0 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
171d0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
171e0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
171f0 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
17200 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
17210 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
17220 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
17230 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
17240 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73  records .** less
17250 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
17260 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
17270 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
17280 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
17290 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
172a0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
172b0 44 69 73 74 69 6e 63 74 2c 20 4d 6f 76 65 47 74  Distinct, MoveGt
172c0 2c 20 4d 6f 76 65 47 65 2c 20 4d 6f 76 65 4c 74  , MoveGe, MoveLt
172d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65  .*/.case OP_Move
172e0 4c 74 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  Lt:         /* j
172f0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
17300 20 4f 50 5f 4d 6f 76 65 4c 65 3a 20 20 20 20 20   OP_MoveLe:     
17310 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
17320 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65   */.case OP_Move
17330 47 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  Ge:         /* j
17340 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
17350 20 4f 50 5f 4d 6f 76 65 47 74 3a 20 7b 20 20 20   OP_MoveGt: {   
17360 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
17370 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f   */.  int i = pO
17380 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f 72 20  p->p1;.  Cursor 
17390 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
173a0 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
173b0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
173c0 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73  ->apCsr[i];.  as
173d0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
173e0 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72   if( pC->pCursor
173f0 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72  !=0 ){.    int r
17400 65 73 2c 20 6f 63 3b 0a 20 20 20 20 6f 63 20 3d  es, oc;.    oc =
17410 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
17420 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
17430 30 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69  0;.    if( pC->i
17440 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20  sTable ){.      
17450 69 36 34 20 69 4b 65 79 20 3d 20 73 71 6c 69 74  i64 iKey = sqlit
17460 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
17470 49 6e 33 29 3b 0a 20 20 20 20 20 20 69 66 28 20  In3);.      if( 
17480 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
17490 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
174a0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4d 6f  p->opcode==OP_Mo
174b0 76 65 47 65 20 29 3b 0a 20 20 20 20 20 20 20 20  veGe );.        
174c0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
174d0 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20 20 20   = iKey;.       
174e0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
174f0 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 70  d = 0;.        p
17500 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
17510 6f 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62  o = 1;.        b
17520 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
17530 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
17540 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
17550 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
17560 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30   0, (u64)iKey, 0
17570 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
17580 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
17590 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
175a0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
175b0 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
175c0 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64     pC->lastRowid
175d0 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20 20 70   = iKey;.      p
175e0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
175f0 3d 20 72 65 73 3d 3d 30 3b 0a 20 20 20 20 7d 65  = res==0;.    }e
17600 6c 73 65 7b 0a 20 20 20 20 20 20 55 6e 70 61 63  lse{.      Unpac
17610 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 20  kedRecord r;.   
17620 20 20 20 69 6e 74 20 6e 46 69 65 6c 64 20 3d 20     int nField = 
17630 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 20  pOp->p4.i;.     
17640 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
17650 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
17660 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
17670 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20  nField>0 );.    
17680 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
17690 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
176a0 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 6e 46     r.nField = nF
176b0 69 65 6c 64 3b 0a 20 20 20 20 20 20 69 66 28 20  ield;.      if( 
176c0 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 47 74 20 7c 7c  oc==OP_MoveGt ||
176d0 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 4c 65 20 29   oc==OP_MoveLe )
176e0 7b 0a 20 20 20 20 20 20 20 20 72 2e 66 6c 61 67  {.        r.flag
176f0 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43  s = UNPACKED_INC
17700 52 4b 45 59 3b 0a 20 20 20 20 20 20 7d 65 6c 73  RKEY;.      }els
17710 65 7b 0a 20 20 20 20 20 20 20 20 72 2e 66 6c 61  e{.        r.fla
17720 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  gs = 0;.      }.
17730 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26        r.aMem = &
17740 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
17750 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
17760 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
17770 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
17780 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  sor, &r, 0, 0, &
17790 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
177a0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
177b0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
177c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
177d0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
177e0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
177f0 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
17800 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
17810 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
17820 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
17830 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65  CHE_STALE;.#ifde
17840 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
17850 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
17860 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
17870 0a 20 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f  .    if( oc==OP_
17880 4d 6f 76 65 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50  MoveGe || oc==OP
17890 5f 4d 6f 76 65 47 74 20 29 7b 0a 20 20 20 20 20  _MoveGt ){.     
178a0 20 69 66 28 20 72 65 73 3c 30 20 29 7b 0a 20 20   if( res<0 ){.  
178b0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
178c0 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e  e3BtreeNext(pC->
178d0 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
178e0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
178f0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
17900 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
17910 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ror;.        pC-
17920 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
17930 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
17940 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b          res = 0;
17950 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
17960 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
17970 28 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 4c 74 20  ( oc==OP_MoveLt 
17980 7c 7c 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 4c 65  || oc==OP_MoveLe
17990 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65   );.      if( re
179a0 73 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  s>=0 ){.        
179b0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
179c0 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43  ePrevious(pC->pC
179d0 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
179e0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
179f0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
17a00 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
17a10 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72  r;.        pC->r
17a20 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
17a30 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
17a40 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67        /* res mig
17a50 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62  ht be negative b
17a60 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
17a70 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63   is empty.  Chec
17a80 6b 20 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a 20  k to.        ** 
17a90 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74  see if this is t
17aa0 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 20  he case..       
17ab0 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 73 20   */.        res 
17ac0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f  = sqlite3BtreeEo
17ad0 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  f(pC->pCursor);.
17ae0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
17af0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
17b00 32 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20 72  2>0 );.    if( r
17b10 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  es ){.      pc =
17b20 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
17b30 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20    }.  }else if( 
17b40 21 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65  !pC->pseudoTable
17b50 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20   ){.    /* This 
17b60 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61 74 74  happens when att
17b70 65 6d 70 74 69 6e 67 20 74 6f 20 6f 70 65 6e 20  empting to open 
17b80 74 68 65 20 73 71 6c 69 74 65 33 5f 6d 61 73 74  the sqlite3_mast
17b90 65 72 20 74 61 62 6c 65 0a 20 20 20 20 2a 2a 20  er table.    ** 
17ba0 66 6f 72 20 72 65 61 64 20 61 63 63 65 73 73 20  for read access 
17bb0 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45  returns SQLITE_E
17bc0 4d 50 54 59 2e 20 49 6e 20 74 68 69 73 20 63 61  MPTY. In this ca
17bd0 73 65 20 61 6c 77 61 79 73 0a 20 20 20 20 2a 2a  se always.    **
17be0 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 28   take the jump (
17bf0 73 69 6e 63 65 20 74 68 65 72 65 20 61 72 65 20  since there are 
17c00 6e 6f 20 72 65 63 6f 72 64 73 20 69 6e 20 74 68  no records in th
17c10 65 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f  e table)..    */
17c20 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
17c30 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
17c40 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
17c50 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33  : Found P1 P2 P3
17c60 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73   * *.**.** Regis
17c70 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
17c80 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
17c90 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
17ca0 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a  P1 is an index..
17cb0 2a 2a 20 49 66 20 61 6e 20 65 6e 74 72 79 20 74  ** If an entry t
17cc0 68 61 74 20 6d 61 74 63 68 65 73 20 74 68 65 20  hat matches the 
17cd0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
17ce0 72 20 70 33 20 65 78 69 73 74 73 20 69 6e 20 50  r p3 exists in P
17cf0 31 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74  1 then.** jump t
17d00 6f 20 50 32 2e 20 20 49 66 20 74 68 65 20 50 33  o P2.  If the P3
17d10 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20   value does not 
17d20 6d 61 74 63 68 20 61 6e 79 20 65 6e 74 72 79 20  match any entry 
17d30 69 6e 20 50 31 0a 2a 2a 20 74 68 65 6e 20 66 61  in P1.** then fa
17d40 6c 6c 20 74 68 72 75 2e 20 20 54 68 65 20 50 31  ll thru.  The P1
17d50 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20   cursor is left 
17d60 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
17d70 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 0a 2a  matching entry.*
17d80 2a 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a  * if it exists..
17d90 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
17da0 75 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74  uction is used t
17db0 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  o implement the 
17dc0 49 4e 20 6f 70 65 72 61 74 6f 72 20 77 68 65 72  IN operator wher
17dd0 65 20 74 68 65 0a 2a 2a 20 6c 65 66 74 2d 68 61  e the.** left-ha
17de0 6e 64 20 73 69 64 65 20 69 73 20 61 20 53 45 4c  nd side is a SEL
17df0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
17e00 50 31 20 6d 61 79 20 62 65 20 61 20 74 72 75 65  P1 may be a true
17e10 20 69 6e 64 65 78 2c 20 6f 72 20 69 74 0a 2a 2a   index, or it.**
17e20 20 6d 61 79 20 62 65 20 61 20 74 65 6d 70 6f 72   may be a tempor
17e30 61 72 79 20 69 6e 64 65 78 20 74 68 61 74 20 68  ary index that h
17e40 6f 6c 64 73 20 74 68 65 20 72 65 73 75 6c 74 73  olds the results
17e50 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 0a 2a   of the SELECT.*
17e60 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 20 54  * statement.   T
17e70 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
17e80 69 73 20 61 6c 73 6f 20 75 73 65 64 20 74 6f 20  is also used to 
17e90 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a  implement the.**
17ea0 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
17eb0 64 20 69 6e 20 53 45 4c 45 43 54 20 73 74 61 74  d in SELECT stat
17ec0 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ements..**.** Th
17ed0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
17ee0 68 65 63 6b 73 20 69 66 20 69 6e 64 65 78 20 50  hecks if index P
17ef0 31 20 63 6f 6e 74 61 69 6e 73 20 61 20 72 65 63  1 contains a rec
17f00 6f 72 64 20 66 6f 72 20 77 68 69 63 68 20 0a 2a  ord for which .*
17f10 2a 20 74 68 65 20 66 69 72 73 74 20 4e 20 73 65  * the first N se
17f20 72 69 61 6c 69 7a 65 64 20 76 61 6c 75 65 73 20  rialized values 
17f30 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68  exactly match th
17f40 65 20 4e 20 73 65 72 69 61 6c 69 7a 65 64 20 76  e N serialized v
17f50 61 6c 75 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  alues.** in the 
17f60 72 65 63 6f 72 64 20 69 6e 20 72 65 67 69 73 74  record in regist
17f70 65 72 20 50 33 2c 20 77 68 65 72 65 20 4e 20 69  er P3, where N i
17f80 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
17f90 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 0a  er of values in.
17fa0 2a 2a 20 74 68 65 20 50 33 20 72 65 63 6f 72 64  ** the P3 record
17fb0 20 28 74 68 65 20 50 33 20 72 65 63 6f 72 64 20   (the P3 record 
17fc0 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  is a prefix of t
17fd0 68 65 20 50 31 20 72 65 63 6f 72 64 29 2e 20 0a  he P1 record). .
17fe0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
17ff0 4e 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71  NotFound, IsUniq
18000 75 65 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f  ue, NotExists.*/
18010 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46  ./* Opcode: NotF
18020 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20  ound P1 P2 P3 * 
18030 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  *.**.** Register
18040 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
18050 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
18060 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 50 31 20  MakeRecord.  P1 
18070 69 73 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 2e 20  is.** an index. 
18080 20 49 66 20 6e 6f 20 65 6e 74 72 79 20 65 78 69   If no entry exi
18090 73 74 73 20 69 6e 20 50 31 20 74 68 61 74 20 6d  sts in P1 that m
180a0 61 74 63 68 65 73 20 74 68 65 20 62 6c 6f 62 20  atches the blob 
180b0 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20  then jump.** to 
180c0 50 32 2e 20 20 49 66 20 61 6e 20 65 6e 74 72 79  P2.  If an entry
180d0 20 64 6f 65 73 20 65 78 69 73 74 69 6e 67 2c 20   does existing, 
180e0 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 20 20 54  fall through.  T
180f0 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  he cursor is lef
18100 74 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f  t.** pointing to
18110 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20   the entry that 
18120 6d 61 74 63 68 65 73 2e 0a 2a 2a 0a 2a 2a 20 53  matches..**.** S
18130 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
18140 4e 6f 74 45 78 69 73 74 73 2c 20 49 73 55 6e 69  NotExists, IsUni
18150 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  que.*/.case OP_N
18160 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f  otFound:       /
18170 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
18180 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20  ase OP_Found: { 
18190 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
181a0 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d  in3 */.  int i =
181b0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e 74 20   pOp->p1;.  int 
181c0 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20  alreadyExists = 
181d0 30 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b  0;.  Cursor *pC;
181e0 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
181f0 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
18200 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
18210 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20  apCsr[i]!=0 );. 
18220 20 69 66 28 20 28 70 43 20 3d 20 70 2d 3e 61 70   if( (pC = p->ap
18230 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72  Csr[i])->pCursor
18240 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72  !=0 ){.    int r
18250 65 73 3b 0a 20 20 20 20 55 6e 70 61 63 6b 65 64  es;.    Unpacked
18260 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b  Record *pIdxKey;
18270 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ..    assert( pC
18280 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
18290 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33      assert( pIn3
182a0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
182b0 6f 62 20 29 3b 0a 20 20 20 20 70 49 64 78 4b 65  ob );.    pIdxKe
182c0 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  y = sqlite3VdbeR
182d0 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e  ecordUnpack(pC->
182e0 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e  pKeyInfo, pIn3->
182f0 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 0a 20 20 20 20  n, pIn3->z,.    
18300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18320 20 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65    aTempRec, size
18330 6f 66 28 61 54 65 6d 70 52 65 63 29 29 3b 0a 20  of(aTempRec));. 
18340 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d     if( pIdxKey==
18350 30 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  0 ){.      goto 
18360 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20  no_mem;.    }.  
18370 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
18380 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20  e==OP_Found ){. 
18390 20 20 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c       pIdxKey->fl
183a0 61 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f  ags |= UNPACKED_
183b0 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20  PREFIX_MATCH;.  
183c0 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c    }.    rc = sql
183d0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
183e0 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
183f0 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c  sor, pIdxKey, 0,
18400 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 73   0, &res);.    s
18410 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65  qlite3VdbeDelete
18420 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70  UnpackedRecord(p
18430 49 64 78 4b 65 79 29 3b 0a 20 20 20 20 69 66 28  IdxKey);.    if(
18440 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
18450 7b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  {.      break;. 
18460 20 20 20 7d 0a 20 20 20 20 61 6c 72 65 61 64 79     }.    already
18470 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30  Exists = (res==0
18480 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  );.    pC->defer
18490 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
184a0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
184b0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
184c0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
184d0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e  >opcode==OP_Foun
184e0 64 20 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72  d ){.    if( alr
184f0 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20  eadyExists ) pc 
18500 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
18510 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20   }else{.    if( 
18520 21 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29  !alreadyExists )
18530 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
18540 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
18550 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73  }../* Opcode: Is
18560 55 6e 69 71 75 65 20 50 31 20 50 32 20 50 33 20  Unique P1 P2 P3 
18570 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  P4 *.**.** The P
18580 33 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 61  3 register conta
18590 69 6e 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72  ins an integer r
185a0 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 20 43  ecord number.  C
185b0 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 72 65 63 6f  all this.** reco
185c0 72 64 20 6e 75 6d 62 65 72 20 52 2e 20 20 54 68  rd number R.  Th
185d0 65 20 50 34 20 72 65 67 69 73 74 65 72 20 63 6f  e P4 register co
185e0 6e 74 61 69 6e 73 20 61 6e 20 69 6e 64 65 78 20  ntains an index 
185f0 6b 65 79 20 63 72 65 61 74 65 64 0a 2a 2a 20 75  key created.** u
18600 73 69 6e 67 20 4d 61 6b 65 52 65 63 6f 72 64 2e  sing MakeRecord.
18610 20 20 43 61 6c 6c 20 69 74 20 4b 2e 0a 2a 2a 0a    Call it K..**.
18620 2a 2a 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65  ** P1 is an inde
18630 78 2e 20 20 53 6f 20 69 74 20 68 61 73 20 6e 6f  x.  So it has no
18640 20 64 61 74 61 20 61 6e 64 20 69 74 73 20 6b 65   data and its ke
18650 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 0a  y consists of a.
18660 2a 2a 20 72 65 63 6f 72 64 20 67 65 6e 65 72 61  ** record genera
18670 74 65 64 20 62 79 20 4f 50 5f 4d 61 6b 65 52 65  ted by OP_MakeRe
18680 63 6f 72 64 20 77 68 65 72 65 20 74 68 65 20 6c  cord where the l
18690 61 73 74 20 66 69 65 6c 64 20 69 73 20 74 68 65  ast field is the
186a0 20 0a 2a 2a 20 72 6f 77 69 64 20 6f 66 20 74 68   .** rowid of th
186b0 65 20 65 6e 74 72 79 20 74 68 61 74 20 74 68 65  e entry that the
186c0 20 69 6e 64 65 78 20 72 65 66 65 72 73 20 74 6f   index refers to
186d0 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 69 73 20 69 6e  ..** .** This in
186e0 73 74 72 75 63 74 69 6f 6e 20 61 73 6b 73 20 69  struction asks i
186f0 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65 6e  f there is an en
18700 74 72 79 20 69 6e 20 50 31 20 77 68 65 72 65 20  try in P1 where 
18710 74 68 65 0a 2a 2a 20 66 69 65 6c 64 73 20 6d 61  the.** fields ma
18720 74 63 68 65 73 20 4b 20 62 75 74 20 74 68 65 20  tches K but the 
18730 72 6f 77 69 64 20 69 73 20 64 69 66 66 65 72 65  rowid is differe
18740 6e 74 20 66 72 6f 6d 20 52 2e 0a 2a 2a 20 49 66  nt from R..** If
18750 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63   there is no suc
18760 68 20 65 6e 74 72 79 2c 20 74 68 65 6e 20 74 68  h entry, then th
18770 65 72 65 20 69 73 20 61 6e 20 69 6d 6d 65 64 69  ere is an immedi
18780 61 74 65 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50  ate.** jump to P
18790 32 2e 20 20 49 66 20 61 6e 79 20 65 6e 74 72 79  2.  If any entry
187a0 20 64 6f 65 73 20 65 78 69 73 74 20 77 68 65 72   does exist wher
187b0 65 20 74 68 65 20 69 6e 64 65 78 20 73 74 72 69  e the index stri
187c0 6e 67 0a 2a 2a 20 6d 61 74 63 68 65 73 20 4b 20  ng.** matches K 
187d0 62 75 74 20 74 68 65 20 72 65 63 6f 72 64 20 6e  but the record n
187e0 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 52 2c 20  umber is not R, 
187f0 74 68 65 6e 20 74 68 65 20 72 65 63 6f 72 64 0a  then the record.
18800 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ** number for th
18810 61 74 20 65 6e 74 72 79 20 69 73 20 77 72 69 74  at entry is writ
18820 74 65 6e 20 69 6e 74 6f 20 50 33 20 61 6e 64 20  ten into P3 and 
18830 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73  control.** falls
18840 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
18850 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
18860 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
18870 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 74 45  : NotFound, NotE
18880 78 69 73 74 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a  xists, Found.*/.
18890 63 61 73 65 20 4f 50 5f 49 73 55 6e 69 71 75 65  case OP_IsUnique
188a0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
188b0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
188c0 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
188d0 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 42  Cursor *pCx;.  B
188e0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
188f0 20 20 4d 65 6d 20 2a 70 4b 3b 0a 20 20 69 36 34    Mem *pK;.  i64
18900 20 52 3b 0a 0a 20 20 2f 2a 20 50 6f 70 20 74 68   R;..  /* Pop th
18910 65 20 76 61 6c 75 65 20 52 20 6f 66 66 20 74 68  e value R off th
18920 65 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61  e top of the sta
18930 63 6b 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  ck.  */.  assert
18940 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
18950 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73  4_INT32 );.  ass
18960 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30  ert( pOp->p4.i>0
18970 20 26 26 20 70 4f 70 2d 3e 70 34 2e 69 3c 3d 70   && pOp->p4.i<=p
18980 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4b 20 3d  ->nMem );.  pK =
18990 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
189a0 34 2e 69 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  4.i];.  sqlite3V
189b0 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
189c0 28 70 49 6e 33 29 3b 0a 20 20 52 20 3d 20 70 49  (pIn3);.  R = pI
189d0 6e 33 2d 3e 75 2e 69 3b 0a 20 20 61 73 73 65 72  n3->u.i;.  asser
189e0 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e  t( i>=0 && i<p->
189f0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 78  nCursor );.  pCx
18a00 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a   = p->apCsr[i];.
18a10 20 20 61 73 73 65 72 74 28 20 70 43 78 21 3d 30    assert( pCx!=0
18a20 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
18a30 78 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66  x->pCursor;.  if
18a40 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20 20  ( pCrsr!=0 ){.  
18a50 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 69    int res;.    i
18a60 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20  64 v;           
18a70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
18a80 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 74   record number t
18a90 68 61 74 20 6d 61 74 63 68 65 73 20 4b 20 2a 2f  hat matches K */
18aa0 0a 20 20 20 20 55 6e 70 61 63 6b 65 64 52 65 63  .    UnpackedRec
18ab0 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 20 20 20  ord *pIdxKey;   
18ac0 2f 2a 20 55 6e 70 61 63 6b 65 64 20 76 65 72 73  /* Unpacked vers
18ad0 69 6f 6e 20 6f 66 20 50 34 20 2a 2f 0a 0a 20 20  ion of P4 */..  
18ae0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 4b    /* Make sure K
18af0 20 69 73 20 61 20 73 74 72 69 6e 67 20 61 6e 64   is a string and
18b00 20 6d 61 6b 65 20 7a 4b 65 79 20 70 6f 69 6e 74   make zKey point
18b10 20 74 6f 20 4b 0a 20 20 20 20 2a 2f 0a 20 20 20   to K.    */.   
18b20 20 61 73 73 65 72 74 28 20 70 4b 2d 3e 66 6c 61   assert( pK->fla
18b30 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
18b40 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73  .    pIdxKey = s
18b50 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64  qlite3VdbeRecord
18b60 55 6e 70 61 63 6b 28 70 43 78 2d 3e 70 4b 65 79  Unpack(pCx->pKey
18b70 49 6e 66 6f 2c 20 70 4b 2d 3e 6e 2c 20 70 4b 2d  Info, pK->n, pK-
18b80 3e 7a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  >z,.            
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ba0 20 20 20 20 20 20 20 20 20 20 61 54 65 6d 70 52            aTempR
18bb0 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70  ec, sizeof(aTemp
18bc0 52 65 63 29 29 3b 0a 20 20 20 20 69 66 28 20 70  Rec));.    if( p
18bd0 49 64 78 4b 65 79 3d 3d 30 20 29 7b 0a 20 20 20  IdxKey==0 ){.   
18be0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
18bf0 20 20 20 20 7d 0a 20 20 20 20 70 49 64 78 4b 65      }.    pIdxKe
18c00 79 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41  y->flags |= UNPA
18c10 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49  CKED_IGNORE_ROWI
18c20 44 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 61 72 63  D;..    /* Searc
18c30 68 20 66 6f 72 20 61 6e 20 65 6e 74 72 79 20 69  h for an entry i
18c40 6e 20 50 31 20 77 68 65 72 65 20 61 6c 6c 20 62  n P1 where all b
18c50 75 74 20 74 68 65 20 6c 61 73 74 20 72 6f 77 69  ut the last rowi
18c60 64 20 6d 61 74 63 68 20 4b 0a 20 20 20 20 2a 2a  d match K.    **
18c70 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
18c80 73 75 63 68 20 65 6e 74 72 79 2c 20 6a 75 6d 70  such entry, jump
18c90 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
18ca0 50 32 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61  P2..    */.    a
18cb0 73 73 65 72 74 28 20 70 43 78 2d 3e 64 65 66 65  ssert( pCx->defe
18cc0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
18cd0 0a 20 20 20 20 70 43 78 2d 3e 63 61 63 68 65 53  .    pCx->cacheS
18ce0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
18cf0 41 4c 45 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  ALE;.    rc = sq
18d00 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
18d10 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
18d20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26  pIdxKey, 0, 0, &
18d30 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63  res);.    if( rc
18d40 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
18d50 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
18d60 44 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65  DeleteUnpackedRe
18d70 63 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20  cord(pIdxKey);. 
18d80 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
18d90 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
18da0 20 20 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3c    }.    if( res<
18db0 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
18dc0 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
18dd0 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
18de0 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
18df0 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
18e00 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
18e10 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c    sqlite3VdbeDel
18e20 65 74 65 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  eteUnpackedRecor
18e30 64 28 70 49 64 78 4b 65 79 29 3b 0a 20 20 20 20  d(pIdxKey);.    
18e40 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
18e50 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20   }.    }.    rc 
18e60 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
18e70 4b 65 79 43 6f 6d 70 61 72 65 28 70 43 78 2c 20  KeyCompare(pCx, 
18e80 70 49 64 78 4b 65 79 2c 20 26 72 65 73 29 3b 20  pIdxKey, &res); 
18e90 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
18ea0 44 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65  DeleteUnpackedRe
18eb0 63 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20  cord(pIdxKey);. 
18ec0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
18ed0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
18ee0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
18ef0 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b      if( res>0 ){
18f00 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
18f10 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62  >p2 - 1;.      b
18f20 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  reak;.    }..   
18f30 20 2f 2a 20 41 74 20 74 68 69 73 20 70 6f 69 6e   /* At this poin
18f40 74 2c 20 70 43 72 73 72 20 69 73 20 70 6f 69 6e  t, pCrsr is poin
18f50 74 69 6e 67 20 74 6f 20 61 6e 20 65 6e 74 72 79  ting to an entry
18f60 20 69 6e 20 50 31 20 77 68 65 72 65 20 61 6c 6c   in P1 where all
18f70 20 62 75 74 0a 20 20 20 20 2a 2a 20 74 68 65 20   but.    ** the 
18f80 66 69 6e 61 6c 20 65 6e 74 72 79 20 28 74 68 65  final entry (the
18f90 20 72 6f 77 69 64 29 20 6d 61 74 63 68 65 73 20   rowid) matches 
18fa0 4b 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65  K.  Check to see
18fb0 20 69 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 66   if the.    ** f
18fc0 69 6e 61 6c 20 72 6f 77 69 64 20 63 6f 6c 75 6d  inal rowid colum
18fd0 6e 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66  n is different f
18fe0 72 6f 6d 20 52 2e 20 20 49 66 20 69 74 20 65 71  rom R.  If it eq
18ff0 75 61 6c 73 20 52 20 74 68 65 6e 20 6a 75 6d 70  uals R then jump
19000 0a 20 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74  .    ** immediat
19010 65 6c 79 20 74 6f 20 50 32 2e 0a 20 20 20 20 2a  ely to P2..    *
19020 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
19030 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 70  e3VdbeIdxRowid(p
19040 43 72 73 72 2c 20 26 76 29 3b 0a 20 20 20 20 69  Crsr, &v);.    i
19050 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
19060 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
19070 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
19080 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  r;.    }.    if(
19090 20 76 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20 70   v==R ){.      p
190a0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
190b0 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
190c0 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20    }..    /* The 
190d0 66 69 6e 61 6c 20 76 61 72 69 6e 74 20 6f 66 20  final varint of 
190e0 74 68 65 20 6b 65 79 20 69 73 20 64 69 66 66 65  the key is diffe
190f0 72 65 6e 74 20 66 72 6f 6d 20 52 2e 20 20 53 74  rent from R.  St
19100 6f 72 65 20 69 74 20 62 61 63 6b 0a 20 20 20 20  ore it back.    
19110 2a 2a 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ** into register
19120 20 52 33 2e 20 20 28 54 68 65 20 72 65 63 6f 72   R3.  (The recor
19130 64 20 6e 75 6d 62 65 72 20 6f 66 20 61 6e 20 65  d number of an e
19140 6e 74 72 79 20 74 68 61 74 20 76 69 6f 6c 61 74  ntry that violat
19150 65 73 0a 20 20 20 20 2a 2a 20 61 20 55 4e 49 51  es.    ** a UNIQ
19160 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 29 0a  UE constraint.).
19170 20 20 20 20 2a 2f 0a 20 20 20 20 70 49 6e 33 2d      */.    pIn3-
19180 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 61 73  >u.i = v;.    as
19190 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
191a0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 7d  s&MEM_Int );.  }
191b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
191c0 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74  Opcode: NotExist
191d0 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  s P1 P2 P3 * *.*
191e0 2a 0a 2a 2a 20 55 73 65 20 74 68 65 20 63 6f 6e  *.** Use the con
191f0 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
19200 20 50 33 20 61 73 20 61 20 69 6e 74 65 67 65 72   P3 as a integer
19210 20 6b 65 79 2e 20 20 49 66 20 61 20 72 65 63 6f   key.  If a reco
19220 72 64 20 0a 2a 2a 20 77 69 74 68 20 74 68 61 74  rd .** with that
19230 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20 65 78   key does not ex
19240 69 73 74 20 69 6e 20 74 61 62 6c 65 20 6f 66 20  ist in table of 
19250 50 31 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  P1, then jump to
19260 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20   P2. .** If the 
19270 72 65 63 6f 72 64 20 64 6f 65 73 20 65 78 69 73  record does exis
19280 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  t, then fall thr
19290 75 2e 20 20 54 68 65 20 63 75 72 73 6f 72 20 69  u.  The cursor i
192a0 73 20 6c 65 66 74 20 0a 2a 2a 20 70 6f 69 6e 74  s left .** point
192b0 69 6e 67 20 74 6f 20 74 68 65 20 72 65 63 6f 72  ing to the recor
192c0 64 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a  d if it exists..
192d0 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72  **.** The differ
192e0 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68 69  ence between thi
192f0 73 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  s operation and 
19300 4e 6f 74 46 6f 75 6e 64 20 69 73 20 74 68 61 74  NotFound is that
19310 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69   this.** operati
19320 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 65 20 6b  on assumes the k
19330 65 79 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  ey is an integer
19340 20 61 6e 64 20 74 68 61 74 20 50 31 20 69 73 20   and that P1 is 
19350 61 20 74 61 62 6c 65 20 77 68 65 72 65 61 73 0a  a table whereas.
19360 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20 61 73 73 75  ** NotFound assu
19370 6d 65 73 20 6b 65 79 20 69 73 20 61 20 62 6c 6f  mes key is a blo
19380 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72  b constructed fr
19390 6f 6d 20 4d 61 6b 65 52 65 63 6f 72 64 20 61 6e  om MakeRecord an
193a0 64 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 69 6e  d.** P1 is an in
193b0 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  dex..**.** See a
193c0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
193d0 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75 65 0a 2a  ound, IsUnique.*
193e0 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69  /.case OP_NotExi
193f0 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  sts: {        /*
19400 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
19410 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
19420 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  .  Cursor *pC;. 
19430 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
19440 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ;.  assert( i>=0
19450 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
19460 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
19470 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a  >apCsr[i]!=0 );.
19480 20 20 69 66 28 20 28 70 43 72 73 72 20 3d 20 28    if( (pCrsr = (
19490 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d  pC = p->apCsr[i]
194a0 29 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29  )->pCursor)!=0 )
194b0 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20  {.    int res;. 
194c0 20 20 20 75 36 34 20 69 4b 65 79 3b 0a 20 20 20     u64 iKey;.   
194d0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
194e0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
194f0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 2d  ;.    assert( p-
19500 3e 61 70 43 73 72 5b 69 5d 2d 3e 69 73 54 61 62  >apCsr[i]->isTab
19510 6c 65 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d  le );.    iKey =
19520 20 69 6e 74 54 6f 4b 65 79 28 70 49 6e 33 2d 3e   intToKey(pIn3->
19530 75 2e 69 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  u.i);.    rc = s
19540 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
19550 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
19560 20 30 2c 20 69 4b 65 79 2c 20 30 2c 26 72 65 73   0, iKey, 0,&res
19570 29 3b 0a 20 20 20 20 70 43 2d 3e 6c 61 73 74 52  );.    pC->lastR
19580 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69  owid = pIn3->u.i
19590 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49  ;.    pC->rowidI
195a0 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 3b  sValid = res==0;
195b0 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
195c0 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
195d0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
195e0 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 2f 2a 20  E_STALE;.    /* 
195f0 72 65 73 20 6d 69 67 68 74 20 62 65 20 75 6e 69  res might be uni
19600 6e 69 74 69 61 6c 69 7a 65 64 20 69 66 20 72 63  nitialized if rc
19610 21 3d 53 51 4c 49 54 45 5f 4f 4b 2e 20 20 42 75  !=SQLITE_OK.  Bu
19620 74 20 69 66 20 72 63 21 3d 53 51 4c 49 54 45 5f  t if rc!=SQLITE_
19630 4f 4b 0a 20 20 20 20 2a 2a 20 70 72 6f 63 65 73  OK.    ** proces
19640 73 69 6e 67 20 69 73 20 61 62 6f 75 74 20 74 6f  sing is about to
19650 20 61 62 6f 72 74 20 73 6f 20 77 65 20 72 65 61   abort so we rea
19660 6c 6c 79 20 64 6f 20 6e 6f 74 20 63 61 72 65 20  lly do not care 
19670 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 20  whether or not. 
19680 20 20 20 2a 2a 20 74 68 65 20 66 6f 6c 6c 6f 77     ** the follow
19690 69 6e 67 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  ing jump is take
196a0 6e 2e 20 20 28 49 6e 20 6f 74 68 65 72 20 77 6f  n.  (In other wo
196b0 72 64 73 2c 20 64 6f 20 6e 6f 74 20 73 74 72 65  rds, do not stre
196c0 73 73 20 6f 76 65 72 0a 20 20 20 20 2a 2a 20 74  ss over.    ** t
196d0 68 65 20 65 72 72 6f 72 20 74 68 61 74 20 76 61  he error that va
196e0 6c 67 72 69 6e 64 20 73 6f 6d 65 74 69 6d 65 73  lgrind sometimes
196f0 20 73 68 6f 77 73 20 6f 6e 20 74 68 65 20 6e 65   shows on the ne
19700 78 74 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65  xt statement whe
19710 6e 0a 20 20 20 20 2a 2a 20 72 75 6e 6e 69 6e 67  n.    ** running
19720 20 69 6f 65 72 72 2e 74 65 73 74 20 61 6e 64 20   ioerr.test and 
19730 73 69 6d 69 6c 61 72 20 66 61 69 6c 75 72 65 2d  similar failure-
19740 72 65 63 6f 76 65 72 79 20 74 65 73 74 20 73 63  recovery test sc
19750 72 69 70 74 73 2e 29 20 2a 2f 0a 20 20 20 20 69  ripts.) */.    i
19760 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20  f( res!=0 ){.   
19770 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
19780 2d 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72  - 1;.      asser
19790 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  t( pC->rowidIsVa
197a0 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a  lid==0 );.    }.
197b0 20 20 7d 65 6c 73 65 20 69 66 28 20 21 70 43 2d    }else if( !pC-
197c0 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a  >pseudoTable ){.
197d0 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70      /* This happ
197e0 65 6e 73 20 77 68 65 6e 20 61 6e 20 61 74 74 65  ens when an atte
197f0 6d 70 74 20 74 6f 20 6f 70 65 6e 20 61 20 72 65  mpt to open a re
19800 61 64 20 63 75 72 73 6f 72 20 6f 6e 20 74 68 65  ad cursor on the
19810 20 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 5f   .    ** sqlite_
19820 6d 61 73 74 65 72 20 74 61 62 6c 65 20 72 65 74  master table ret
19830 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54  urns SQLITE_EMPT
19840 59 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  Y..    */.    as
19850 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
19860 65 20 29 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f  e );.    pc = pO
19870 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61  p->p2 - 1;.    a
19880 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64  ssert( pC->rowid
19890 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20  IsValid==0 );.  
198a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
198b0 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63   Opcode: Sequenc
198c0 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
198d0 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78  .** Find the nex
198e0 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75  t available sequ
198f0 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  ence number for 
19900 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72  cursor P1..** Wr
19910 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65  ite the sequence
19920 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67   number into reg
19930 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65  ister P2..** The
19940 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
19950 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69   on the cursor i
19960 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66  s incremented af
19970 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74  ter this.** inst
19980 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61  ruction.  .*/.ca
19990 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20  se OP_Sequence: 
199a0 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
199b0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
199c0 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  /.  int i = pOp-
199d0 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p1;.  assert( i
199e0 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
199f0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
19a00 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20   p->apCsr[i]!=0 
19a10 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
19a20 20 70 2d 3e 61 70 43 73 72 5b 69 5d 2d 3e 73 65   p->apCsr[i]->se
19a30 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 4d 65 6d 53  qCount++;.  MemS
19a40 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
19a50 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65   MEM_Int);.  bre
19a60 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
19a70 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50  e: NewRowid P1 P
19a80 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47  2 P3 * *.**.** G
19a90 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72  et a new integer
19aa0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28   record number (
19ab0 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75  a.k.a "rowid") u
19ac0 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20 74  sed as the key t
19ad0 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  o a table..** Th
19ae0 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  e record number 
19af0 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  is not previousl
19b00 79 20 75 73 65 64 20 61 73 20 61 20 6b 65 79 20  y used as a key 
19b10 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
19b20 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63 75  ** table that cu
19b30 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74  rsor P1 points t
19b40 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f  o.  The new reco
19b50 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69  rd number is wri
19b60 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20  tten.** written 
19b70 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
19b80 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68  **.** If P3>0 th
19b90 65 6e 20 50 33 20 69 73 20 61 20 72 65 67 69 73  en P3 is a regis
19ba0 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ter that holds t
19bb0 68 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69  he largest previ
19bc0 6f 75 73 6c 79 0a 2a 2a 20 67 65 6e 65 72 61 74  ously.** generat
19bd0 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ed record number
19be0 2e 20 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64  .  No new record
19bf0 20 6e 75 6d 62 65 72 73 20 61 72 65 20 61 6c 6c   numbers are all
19c00 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 0a  owed to be less.
19c10 2a 2a 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c  ** than this val
19c20 75 65 2e 20 20 57 68 65 6e 20 74 68 69 73 20 76  ue.  When this v
19c30 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73  alue reaches its
19c40 20 6d 61 78 69 6d 75 6d 2c 20 61 20 53 51 4c 49   maximum, a SQLI
19c50 54 45 5f 46 55 4c 4c 0a 2a 2a 20 65 72 72 6f 72  TE_FULL.** error
19c60 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20 20   is generated.  
19c70 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  The P3 register 
19c80 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20  is updated with 
19c90 74 68 65 20 67 65 6e 65 72 61 74 65 64 0a 2a 2a  the generated.**
19ca0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20   record number. 
19cb0 20 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69   This P3 mechani
19cc0 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68 65  sm is used to he
19cd0 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  lp implement the
19ce0 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  .** AUTOINCREMEN
19cf0 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61  T feature..*/.ca
19d00 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20  se OP_NewRowid: 
19d10 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
19d20 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
19d30 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  /.  int i = pOp-
19d40 3e 70 31 3b 0a 20 20 69 36 34 20 76 20 3d 20 30  >p1;.  i64 v = 0
19d50 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a  ;.  Cursor *pC;.
19d60 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
19d70 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
19d80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
19d90 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20  pCsr[i]!=0 );.  
19da0 69 66 28 20 28 70 43 20 3d 20 70 2d 3e 61 70 43  if( (pC = p->apC
19db0 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 3d  sr[i])->pCursor=
19dc0 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  =0 ){.    /* The
19dd0 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61   zero initializa
19de0 74 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c  tion above is al
19df0 6c 20 74 68 61 74 20 69 73 20 6e 65 65 64 65 64  l that is needed
19e00 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
19e10 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77   /* The next row
19e20 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d  id or record num
19e30 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74  ber (different t
19e40 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d  erms for the sam
19e50 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20  e.    ** thing) 
19e60 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61  is obtained in a
19e70 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69   two-step algori
19e80 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  thm..    **.    
19e90 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65  ** First we atte
19ea0 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20  mpt to find the 
19eb0 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
19ec0 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f   rowid and add o
19ed0 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61  ne.    ** to tha
19ee0 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c  t.  But if the l
19ef0 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
19f00 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79  rowid is already
19f10 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20   the maximum.   
19f20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74   ** positive int
19f30 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f  eger, we have to
19f40 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
19f50 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20   the second.    
19f60 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63  ** probabilistic
19f70 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a   algorithm.    *
19f80 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63  *.    ** The sec
19f90 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ond algorithm is
19fa0 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77   to select a row
19fb0 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64  id at random and
19fc0 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69   see if.    ** i
19fd0 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  t already exists
19fe0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
19ff0 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65  If it does not e
1a000 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20  xist, we have.  
1a010 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20    ** succeeded. 
1a020 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72   If the random r
1a030 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c  owid does exist,
1a040 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77   we select a new
1a050 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20   one.    ** and 
1a060 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f  try again, up to
1a070 20 31 30 30 30 20 74 69 6d 65 73 2e 0a 20 20 20   1000 times..   
1a080 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 6f 72 20 61   **.    ** For a
1a090 20 74 61 62 6c 65 20 77 69 74 68 20 6c 65 73 73   table with less
1a0a0 20 74 68 61 6e 20 32 20 62 69 6c 6c 69 6f 6e 20   than 2 billion 
1a0b0 65 6e 74 72 69 65 73 2c 20 74 68 65 20 70 72 6f  entries, the pro
1a0c0 62 61 62 69 6c 69 74 79 0a 20 20 20 20 2a 2a 20  bability.    ** 
1a0d0 6f 66 20 6e 6f 74 20 66 69 6e 64 69 6e 67 20 61  of not finding a
1a0e0 20 75 6e 75 73 65 64 20 72 6f 77 69 64 20 69 73   unused rowid is
1a0f0 20 61 62 6f 75 74 20 31 2e 30 65 2d 33 30 30 2e   about 1.0e-300.
1a100 20 20 54 68 69 73 20 69 73 20 61 20 0a 20 20 20    This is a .   
1a110 20 2a 2a 20 6e 6f 6e 2d 7a 65 72 6f 20 70 72 6f   ** non-zero pro
1a120 62 61 62 69 6c 69 74 79 2c 20 62 75 74 20 69 74  bability, but it
1a130 20 69 73 20 73 74 69 6c 6c 20 76 61 6e 69 73 68   is still vanish
1a140 69 6e 67 6c 79 20 73 6d 61 6c 6c 20 61 6e 64 20  ingly small and 
1a150 73 68 6f 75 6c 64 0a 20 20 20 20 2a 2a 20 6e 65  should.    ** ne
1a160 76 65 72 20 63 61 75 73 65 20 61 20 70 72 6f 62  ver cause a prob
1a170 6c 65 6d 2e 20 20 59 6f 75 20 61 72 65 20 6d 75  lem.  You are mu
1a180 63 68 2c 20 6d 75 63 68 20 6d 6f 72 65 20 6c 69  ch, much more li
1a190 6b 65 6c 79 20 74 6f 20 68 61 76 65 20 61 0a 20  kely to have a. 
1a1a0 20 20 20 2a 2a 20 68 61 72 64 77 61 72 65 20 66     ** hardware f
1a1b0 61 69 6c 75 72 65 20 74 68 61 6e 20 66 6f 72 20  ailure than for 
1a1c0 74 68 69 73 20 61 6c 67 6f 72 69 74 68 6d 20 74  this algorithm t
1a1d0 6f 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 0a 20  o fail..    **. 
1a1e0 20 20 20 2a 2a 20 54 68 65 20 61 6e 61 6c 79 73     ** The analys
1a1f0 69 73 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f  is in the previo
1a200 75 73 20 70 61 72 61 67 72 61 70 68 20 61 73 73  us paragraph ass
1a210 75 6d 65 73 20 74 68 61 74 20 79 6f 75 20 68 61  umes that you ha
1a220 76 65 20 61 20 67 6f 6f 64 0a 20 20 20 20 2a 2a  ve a good.    **
1a230 20 73 6f 75 72 63 65 20 6f 66 20 72 61 6e 64 6f   source of rando
1a240 6d 20 6e 75 6d 62 65 72 73 2e 20 20 49 73 20 61  m numbers.  Is a
1a250 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f   library functio
1a260 6e 20 6c 69 6b 65 20 6c 72 61 6e 64 34 38 28 29  n like lrand48()
1a270 0a 20 20 20 20 2a 2a 20 67 6f 6f 64 20 65 6e 6f  .    ** good eno
1a280 75 67 68 3f 20 20 4d 61 79 62 65 2e 20 4d 61 79  ugh?  Maybe. May
1a290 62 65 20 6e 6f 74 2e 20 49 74 27 73 20 68 61 72  be not. It's har
1a2a0 64 20 74 6f 20 6b 6e 6f 77 20 77 68 65 74 68 65  d to know whethe
1a2b0 72 20 74 68 65 72 65 0a 20 20 20 20 2a 2a 20 6d  r there.    ** m
1a2c0 69 67 68 74 20 62 65 20 73 75 62 74 6c 65 20 62  ight be subtle b
1a2d0 75 67 73 20 69 73 20 73 6f 6d 65 20 69 6d 70 6c  ugs is some impl
1a2e0 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6f 66 20 6c  ementations of l
1a2f0 72 61 6e 64 34 38 28 29 20 74 68 61 74 0a 20 20  rand48() that.  
1a300 20 20 2a 2a 20 63 6f 75 6c 64 20 63 61 75 73 65    ** could cause
1a310 20 70 72 6f 62 6c 65 6d 73 2e 20 54 6f 20 61 76   problems. To av
1a320 6f 69 64 20 75 6e 63 65 72 74 61 69 6e 74 79 2c  oid uncertainty,
1a330 20 53 51 4c 69 74 65 20 75 73 65 73 20 69 74 73   SQLite uses its
1a340 20 6f 77 6e 20 0a 20 20 20 20 2a 2a 20 72 61 6e   own .    ** ran
1a350 64 6f 6d 20 6e 75 6d 62 65 72 20 67 65 6e 65 72  dom number gener
1a360 61 74 6f 72 20 62 61 73 65 64 20 6f 6e 20 74 68  ator based on th
1a370 65 20 52 43 34 20 61 6c 67 6f 72 69 74 68 6d 2e  e RC4 algorithm.
1a380 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54  .    **.    ** T
1a390 6f 20 70 72 6f 6d 6f 74 65 20 6c 6f 63 61 6c 69  o promote locali
1a3a0 74 79 20 6f 66 20 72 65 66 65 72 65 6e 63 65 20  ty of reference 
1a3b0 66 6f 72 20 72 65 70 65 74 69 74 69 76 65 20 69  for repetitive i
1a3c0 6e 73 65 72 74 73 2c 20 74 68 65 0a 20 20 20 20  nserts, the.    
1a3d0 2a 2a 20 66 69 72 73 74 20 66 65 77 20 61 74 74  ** first few att
1a3e0 65 6d 70 74 73 20 61 74 20 63 68 6f 6f 73 69 6e  empts at choosin
1a3f0 67 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  g a random rowid
1a400 20 70 69 63 6b 20 76 61 6c 75 65 73 20 6a 75 73   pick values jus
1a410 74 20 61 20 6c 69 74 74 6c 65 0a 20 20 20 20 2a  t a little.    *
1a420 2a 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68  * larger than th
1a430 65 20 70 72 65 76 69 6f 75 73 20 72 6f 77 69 64  e previous rowid
1a440 2e 20 20 54 68 69 73 20 68 61 73 20 62 65 65 6e  .  This has been
1a450 20 73 68 6f 77 6e 20 65 78 70 65 72 69 6d 65 6e   shown experimen
1a460 74 61 6c 6c 79 0a 20 20 20 20 2a 2a 20 74 6f 20  tally.    ** to 
1a470 64 6f 75 62 6c 65 20 74 68 65 20 73 70 65 65 64  double the speed
1a480 20 6f 66 20 74 68 65 20 43 4f 50 59 20 6f 70 65   of the COPY ope
1a490 72 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20  ration..    */. 
1a4a0 20 20 20 69 6e 74 20 72 65 73 2c 20 72 78 3d 53     int res, rx=S
1a4b0 51 4c 49 54 45 5f 4f 4b 2c 20 63 6e 74 3b 0a 20  QLITE_OK, cnt;. 
1a4c0 20 20 20 69 36 34 20 78 3b 0a 20 20 20 20 63 6e     i64 x;.    cn
1a4d0 74 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 28  t = 0;.    if( (
1a4e0 73 71 6c 69 74 65 33 42 74 72 65 65 46 6c 61 67  sqlite3BtreeFlag
1a4f0 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 26 28  s(pC->pCursor)&(
1a500 42 54 52 45 45 5f 49 4e 54 4b 45 59 7c 42 54 52  BTREE_INTKEY|BTR
1a510 45 45 5f 5a 45 52 4f 44 41 54 41 29 29 20 21 3d  EE_ZERODATA)) !=
1a520 0a 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45  .          BTREE
1a530 5f 49 4e 54 4b 45 59 20 29 7b 0a 20 20 20 20 20  _INTKEY ){.     
1a540 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
1a550 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
1a560 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1a570 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1a580 20 20 20 20 61 73 73 65 72 74 28 20 28 73 71 6c      assert( (sql
1a590 69 74 65 33 42 74 72 65 65 46 6c 61 67 73 28 70  ite3BtreeFlags(p
1a5a0 43 2d 3e 70 43 75 72 73 6f 72 29 20 26 20 42 54  C->pCursor) & BT
1a5b0 52 45 45 5f 49 4e 54 4b 45 59 29 21 3d 30 20 29  REE_INTKEY)!=0 )
1a5c0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 73  ;.    assert( (s
1a5d0 71 6c 69 74 65 33 42 74 72 65 65 46 6c 61 67 73  qlite3BtreeFlags
1a5e0 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 26 20  (pC->pCursor) & 
1a5f0 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 29 3d  BTREE_ZERODATA)=
1a600 3d 30 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  =0 );..#ifdef SQ
1a610 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44  LITE_32BIT_ROWID
1a620 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f  .#   define MAX_
1a630 52 4f 57 49 44 20 30 78 37 66 66 66 66 66 66 66  ROWID 0x7fffffff
1a640 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f  .#else.    /* So
1a650 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d  me compilers com
1a660 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73  plain about cons
1a670 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72  tants of the for
1a680 6d 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66  m 0x7fffffffffff
1a690 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68  ffff..    ** Oth
1a6a0 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f  ers complain abo
1a6b0 75 74 20 30 78 37 66 66 66 66 66 66 66 66 66 66  ut 0x7ffffffffff
1a6c0 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66  ffffffLL.  The f
1a6d0 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73  ollowing macro s
1a6e0 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70  eems.    ** to p
1a6f0 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74  rovide the const
1a700 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67  ant while making
1a710 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68   all compilers h
1a720 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20  appy..    */.#  
1a730 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
1a740 44 20 20 28 20 28 28 28 75 36 34 29 30 78 37 66  D  ( (((u64)0x7f
1a750 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28  ffffff)<<32) | (
1a760 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29  u64)0xffffffff )
1a770 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28  .#endif..    if(
1a780 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52   !pC->useRandomR
1a790 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 69 66  owid ){.      if
1a7a0 28 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56  ( pC->nextRowidV
1a7b0 61 6c 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20  alid ){.        
1a7c0 76 20 3d 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69  v = pC->nextRowi
1a7d0 64 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  d;.      }else{.
1a7e0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1a7f0 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
1a800 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1a810 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
1a820 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1a830 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
1a840 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1a850 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1a860 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
1a870 20 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 0a           v = 1;.
1a880 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1a890 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1a8a0 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d  BtreeKeySize(pC-
1a8b0 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  >pCursor, &v);. 
1a8c0 20 20 20 20 20 20 20 20 20 76 20 3d 20 6b 65 79           v = key
1a8d0 54 6f 49 6e 74 28 76 29 3b 0a 20 20 20 20 20 20  ToInt(v);.      
1a8e0 20 20 20 20 69 66 28 20 76 3d 3d 4d 41 58 5f 52      if( v==MAX_R
1a8f0 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20  OWID ){.        
1a900 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f      pC->useRando
1a910 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20  mRowid = 1;.    
1a920 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1a930 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 0a 20 20           v++;.  
1a940 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1a950 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69 66    }.      }..#if
1a960 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1a970 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
1a980 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33       if( pOp->p3
1a990 20 29 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d 20   ){.        Mem 
1a9a0 2a 70 4d 65 6d 3b 0a 20 20 20 20 20 20 20 20 61  *pMem;.        a
1a9b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
1a9c0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
1a9d0 6e 4d 65 6d 20 29 3b 20 2f 2a 20 50 33 20 69 73  nMem ); /* P3 is
1a9e0 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
1a9f0 63 65 6c 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20  cell */.        
1aa00 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pMem = &p->aMem[
1aa10 70 4f 70 2d 3e 70 33 5d 3b 0a 09 52 45 47 49 53  pOp->p3];..REGIS
1aa20 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
1aa30 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  3, pMem);.      
1aa40 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
1aa50 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29  Integerify(pMem)
1aa60 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1aa70 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
1aa80 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20   MEM_Int)!=0 ); 
1aa90 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64   /* mem(P3) hold
1aaa0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a  s an integer */.
1aab0 20 20 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d          if( pMem
1aac0 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44  ->u.i==MAX_ROWID
1aad0 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f   || pC->useRando
1aae0 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
1aaf0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1ab00 46 55 4c 4c 3b 0a 20 20 20 20 20 20 20 20 20 20  FULL;.          
1ab10 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1ab20 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1ab30 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 76   }.        if( v
1ab40 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a  <pMem->u.i+1 ){.
1ab50 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d            v = pM
1ab60 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20  em->u.i + 1;.   
1ab70 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70       }.        p
1ab80 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Mem->u.i = v;.  
1ab90 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
1aba0 20 20 20 20 69 66 28 20 76 3c 4d 41 58 5f 52 4f      if( v<MAX_RO
1abb0 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 70  WID ){.        p
1abc0 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c 69  C->nextRowidVali
1abd0 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 70  d = 1;.        p
1abe0 43 2d 3e 6e 65 78 74 52 6f 77 69 64 20 3d 20 76  C->nextRowid = v
1abf0 2b 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  +1;.      }else{
1ac00 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6e 65 78  .        pC->nex
1ac10 74 52 6f 77 69 64 56 61 6c 69 64 20 3d 20 30 3b  tRowidValid = 0;
1ac20 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1ac30 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61     if( pC->useRa
1ac40 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
1ac50 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1ac60 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 53 51 4c  p3==0 );  /* SQL
1ac70 49 54 45 5f 46 55 4c 4c 20 6d 75 73 74 20 68 61  ITE_FULL must ha
1ac80 76 65 20 6f 63 63 75 72 72 65 64 20 70 72 69 6f  ve occurred prio
1ac90 72 20 74 6f 20 74 68 69 73 20 2a 2f 0a 20 20 20  r to this */.   
1aca0 20 20 20 76 20 3d 20 64 62 2d 3e 70 72 69 6f 72     v = db->prior
1acb0 4e 65 77 52 6f 77 69 64 3b 0a 20 20 20 20 20 20  NewRowid;.      
1acc0 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64  cnt = 0;.      d
1acd0 6f 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63  o{.        if( c
1ace0 6e 74 3d 3d 30 20 26 26 20 28 76 26 30 78 66 66  nt==0 && (v&0xff
1acf0 66 66 66 66 29 3d 3d 76 20 29 7b 0a 20 20 20 20  ffff)==v ){.    
1ad00 20 20 20 20 20 20 76 2b 2b 3b 0a 20 20 20 20 20        v++;.     
1ad10 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1ad20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64      sqlite3_rand
1ad30 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29  omness(sizeof(v)
1ad40 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 20  , &v);.         
1ad50 20 69 66 28 20 63 6e 74 3c 35 20 29 20 76 20 26   if( cnt<5 ) v &
1ad60 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20 20  = 0xffffff;.    
1ad70 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
1ad80 28 20 76 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  ( v==0 ) continu
1ad90 65 3b 0a 20 20 20 20 20 20 20 20 78 20 3d 20 69  e;.        x = i
1ada0 6e 74 54 6f 4b 65 79 28 76 29 3b 0a 20 20 20 20  ntToKey(v);.    
1adb0 20 20 20 20 72 78 20 3d 20 73 71 6c 69 74 65 33      rx = sqlite3
1adc0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1add0 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1ade0 20 30 2c 20 28 75 36 34 29 78 2c 20 30 2c 20 26   0, (u64)x, 0, &
1adf0 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 63 6e  res);.        cn
1ae00 74 2b 2b 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c  t++;.      }whil
1ae10 65 28 20 63 6e 74 3c 31 30 30 20 26 26 20 72 78  e( cnt<100 && rx
1ae20 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
1ae30 65 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64  es==0 );.      d
1ae40 62 2d 3e 70 72 69 6f 72 4e 65 77 52 6f 77 69 64  b->priorNewRowid
1ae50 20 3d 20 76 3b 0a 20 20 20 20 20 20 69 66 28 20   = v;.      if( 
1ae60 72 78 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rx==SQLITE_OK &&
1ae70 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
1ae80 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46     rc = SQLITE_F
1ae90 55 4c 4c 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  ULL;.        got
1aea0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1aeb0 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
1aec0 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69    }.    pC->rowi
1aed0 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1aee0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1aef0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
1af00 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1af10 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
1af20 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
1af30 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
1af40 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
1af50 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
1af60 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74  * Opcode: Insert
1af70 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1af80 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65  **.** Write an e
1af90 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61  ntry into the ta
1afa0 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31  ble of cursor P1
1afb0 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69  .  A new entry i
1afc0 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20  s.** created if 
1afd0 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61  it doesn't alrea
1afe0 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20  dy exist or the 
1aff0 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73  data for an exis
1b000 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73  ting.** entry is
1b010 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54   overwritten.  T
1b020 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76  he data is the v
1b030 61 6c 75 65 20 73 74 6f 72 65 64 20 72 65 67 69  alue stored regi
1b040 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  ster.** number P
1b050 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74  2. The key is st
1b060 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
1b070 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73   P3. The key mus
1b080 74 0a 2a 2a 20 62 65 20 61 6e 20 69 6e 74 65 67  t.** be an integ
1b090 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  er..**.** If the
1b0a0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
1b0b0 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
1b0c0 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20  t, then the row 
1b0d0 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a  change count is.
1b0e0 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  ** incremented (
1b0f0 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20  otherwise not). 
1b100 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
1b110 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66  ASTROWID flag of
1b120 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74   P5 is set,.** t
1b130 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f  hen rowid is sto
1b140 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65  red for subseque
1b150 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65  nt return by the
1b160 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74  .** sqlite3_last
1b170 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
1b180 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77  function (otherw
1b190 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69  ise it is unmodi
1b1a0 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 50 61 72  fied)..**.** Par
1b1b0 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f  ameter P4 may po
1b1c0 69 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20  int to a string 
1b1d0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
1b1e0 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a  able-name, or.**
1b1f0 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66   may be NULL. If
1b200 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   it is not NULL,
1b210 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65   then the update
1b220 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74  -hook .** (sqlit
1b230 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  e3.xUpdateCallba
1b240 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66  ck) is invoked f
1b250 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65  ollowing a succe
1b260 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a  ssful insert..**
1b270 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44  .** (WARNING/TOD
1b280 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73  O: If P1 is a ps
1b290 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20  eudo-cursor and 
1b2a0 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c  P2 is dynamicall
1b2b0 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
1b2c0 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f  then ownership o
1b2d0 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72  f P2 is transfer
1b2e0 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64  red to the pseud
1b2f0 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20  o-cursor.** and 
1b300 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f  register P2 beco
1b310 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20  mes ephemeral.  
1b320 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
1b330 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a   changed, the.**
1b340 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
1b350 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20  er P2 will then 
1b360 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75  change.  Make su
1b370 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74  re this does not
1b380 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72  .** cause any pr
1b390 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54  oblems.).**.** T
1b3a0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1b3b0 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61  only works on ta
1b3c0 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  bles.  The equiv
1b3d0 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
1b3e0 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73  n.** for indices
1b3f0 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74   is OP_IdxInsert
1b400 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73  ..*/.case OP_Ins
1b410 65 72 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44  ert: {.  Mem *pD
1b420 61 74 61 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  ata = &p->aMem[p
1b430 4f 70 2d 3e 70 32 5d 3b 0a 20 20 4d 65 6d 20 2a  Op->p2];.  Mem *
1b440 70 4b 65 79 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pKey = &p->aMem[
1b450 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 69 36 34  pOp->p3];..  i64
1b460 20 69 4b 65 79 3b 20 20 20 2f 2a 20 54 68 65 20   iKey;   /* The 
1b470 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 72  integer ROWID or
1b480 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65 63   key for the rec
1b490 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ord to be insert
1b4a0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20  ed */.  int i = 
1b4b0 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f  pOp->p1;.  Curso
1b4c0 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28  r *pC;.  assert(
1b4d0 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
1b4e0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1b4f0 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61  p->apCsr[i];.  a
1b500 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1b510 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
1b520 75 72 73 6f 72 21 3d 30 20 7c 7c 20 70 43 2d 3e  ursor!=0 || pC->
1b530 70 73 65 75 64 6f 54 61 62 6c 65 20 29 3b 0a 20  pseudoTable );. 
1b540 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66   assert( pKey->f
1b550 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
1b560 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1b570 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47  isTable );.  REG
1b580 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
1b590 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 20 20 52  >p2, pData);.  R
1b5a0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
1b5b0 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 0a 20  p->p3, pKey);.. 
1b5c0 20 69 4b 65 79 20 3d 20 69 6e 74 54 6f 4b 65 79   iKey = intToKey
1b5d0 28 70 4b 65 79 2d 3e 75 2e 69 29 3b 0a 20 20 69  (pKey->u.i);.  i
1b5e0 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
1b5f0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
1b600 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66  >nChange++;.  if
1b610 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
1b620 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64  AG_LASTROWID ) d
1b630 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70  b->lastRowid = p
1b640 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20  Key->u.i;.  if( 
1b650 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c  pC->nextRowidVal
1b660 69 64 20 26 26 20 70 4b 65 79 2d 3e 75 2e 69 3e  id && pKey->u.i>
1b670 3d 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 20 29  =pC->nextRowid )
1b680 7b 0a 20 20 20 20 70 43 2d 3e 6e 65 78 74 52 6f  {.    pC->nextRo
1b690 77 69 64 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  widValid = 0;.  
1b6a0 7d 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  }.  if( pData->f
1b6b0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
1b6c0 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20  ){.    pData->z 
1b6d0 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e  = 0;.    pData->
1b6e0 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  n = 0;.  }else{.
1b6f0 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74      assert( pDat
1b700 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  a->flags & (MEM_
1b710 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b  Blob|MEM_Str) );
1b720 0a 20 20 7d 0a 20 20 69 66 28 20 70 43 2d 3e 70  .  }.  if( pC->p
1b730 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20  seudoTable ){.  
1b740 20 20 69 66 28 20 21 70 43 2d 3e 65 70 68 65 6d    if( !pC->ephem
1b750 50 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20  PseudoTable ){. 
1b760 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
1b770 65 65 28 64 62 2c 20 70 43 2d 3e 70 44 61 74 61  ee(db, pC->pData
1b780 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  );.    }.    pC-
1b790 3e 69 4b 65 79 20 3d 20 69 4b 65 79 3b 0a 20 20  >iKey = iKey;.  
1b7a0 20 20 70 43 2d 3e 6e 44 61 74 61 20 3d 20 70 44    pC->nData = pD
1b7b0 61 74 61 2d 3e 6e 3b 0a 20 20 20 20 69 66 28 20  ata->n;.    if( 
1b7c0 70 44 61 74 61 2d 3e 7a 3d 3d 70 44 61 74 61 2d  pData->z==pData-
1b7d0 3e 7a 4d 61 6c 6c 6f 63 20 7c 7c 20 70 43 2d 3e  >zMalloc || pC->
1b7e0 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65  ephemPseudoTable
1b7f0 20 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e 70 44   ){.      pC->pD
1b800 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a  ata = pData->z;.
1b810 20 20 20 20 20 20 69 66 28 20 21 70 43 2d 3e 65        if( !pC->e
1b820 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65 20  phemPseudoTable 
1b830 29 7b 0a 20 20 20 20 20 20 20 20 70 44 61 74 61  ){.        pData
1b840 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f  ->flags &= ~MEM_
1b850 44 79 6e 3b 0a 20 20 20 20 20 20 20 20 70 44 61  Dyn;.        pDa
1b860 74 61 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ta->flags |= MEM
1b870 5f 45 70 68 65 6d 3b 0a 20 20 20 20 20 20 20 20  _Ephem;.        
1b880 70 44 61 74 61 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d  pData->zMalloc =
1b890 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
1b8a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 43 2d  }else{.      pC-
1b8b0 3e 70 44 61 74 61 20 3d 20 73 71 6c 69 74 65 33  >pData = sqlite3
1b8c0 4d 61 6c 6c 6f 63 28 20 70 43 2d 3e 6e 44 61 74  Malloc( pC->nDat
1b8d0 61 2b 32 20 29 3b 0a 20 20 20 20 20 20 69 66 28  a+2 );.      if(
1b8e0 20 21 70 43 2d 3e 70 44 61 74 61 20 29 20 67 6f   !pC->pData ) go
1b8f0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20  to no_mem;.     
1b900 20 6d 65 6d 63 70 79 28 70 43 2d 3e 70 44 61 74   memcpy(pC->pDat
1b910 61 2c 20 70 44 61 74 61 2d 3e 7a 2c 20 70 43 2d  a, pData->z, pC-
1b920 3e 6e 44 61 74 61 29 3b 0a 20 20 20 20 20 20 70  >nData);.      p
1b930 43 2d 3e 70 44 61 74 61 5b 70 43 2d 3e 6e 44 61  C->pData[pC->nDa
1b940 74 61 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  ta] = 0;.      p
1b950 43 2d 3e 70 44 61 74 61 5b 70 43 2d 3e 6e 44 61  C->pData[pC->nDa
1b960 74 61 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 7d  ta+1] = 0;.    }
1b970 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
1b980 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
1b990 20 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 0a 20 20     int nZero;.  
1b9a0 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61    if( pData->fla
1b9b0 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
1b9c0 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70  .      nZero = p
1b9d0 44 61 74 61 2d 3e 75 2e 69 3b 0a 20 20 20 20 7d  Data->u.i;.    }
1b9e0 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 5a 65 72  else{.      nZer
1b9f0 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  o = 0;.    }.   
1ba00 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1ba10 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75  eeInsert(pC->pCu
1ba20 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20  rsor, 0, iKey,. 
1ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba40 20 20 20 20 20 20 20 20 20 20 20 70 44 61 74 61             pData
1ba50 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e  ->z, pData->n, n
1ba60 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20  Zero,.          
1ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba80 20 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c    pOp->p5 & OPFL
1ba90 41 47 5f 41 50 50 45 4e 44 29 3b 0a 20 20 7d 0a  AG_APPEND);.  }.
1baa0 20 20 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73    .  pC->rowidIs
1bab0 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d  Valid = 0;.  pC-
1bac0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1bad0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
1bae0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1baf0 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  TALE;..  /* Invo
1bb00 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  ke the update-ho
1bb10 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
1bb20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  */.  if( rc==SQL
1bb30 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55  ITE_OK && db->xU
1bb40 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
1bb50 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
1bb60 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
1bb70 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e  b = db->aDb[pC->
1bb80 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20  iDb].zName;.    
1bb90 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c  const char *zTbl
1bba0 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
1bbb0 20 20 69 6e 74 20 6f 70 20 3d 20 28 28 70 4f 70    int op = ((pOp
1bbc0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
1bbd0 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
1bbe0 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
1bbf0 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61 73  _INSERT);.    as
1bc00 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1bc10 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70  e );.    db->xUp
1bc20 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d  dateCallback(db-
1bc30 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c  >pUpdateArg, op,
1bc40 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79   zDb, zTbl, iKey
1bc50 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1bc60 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d  C->iDb>=0 );.  }
1bc70 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1bc80 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50  Opcode: Delete P
1bc90 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
1bca0 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63  * Delete the rec
1bcb0 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68 65  ord at which the
1bcc0 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 63 75   P1 cursor is cu
1bcd0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
1bce0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73  ..**.** The curs
1bcf0 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20  or will be left 
1bd00 70 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74 68  pointing at eith
1bd10 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74  er the next or t
1bd20 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72  he previous.** r
1bd30 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62  ecord in the tab
1bd40 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66  le. If it is lef
1bd50 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
1bd60 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74  e next record, t
1bd70 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20  hen.** the next 
1bd80 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
1bd90 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70   will be a no-op
1bda0 2e 20 20 48 65 6e 63 65 20 69 74 20 69 73 20 4f  .  Hence it is O
1bdb0 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61  K to delete.** a
1bdc0 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74   record from wit
1bdd0 68 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70  hin an Next loop
1bde0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
1bdf0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
1be00 61 67 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c  ag of P2 is set,
1be10 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68   then the row ch
1be20 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a  ange count is.**
1be30 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74   incremented (ot
1be40 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a  herwise not)..**
1be50 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20  .** P1 must not 
1be60 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  be pseudo-table.
1be70 20 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61    It has to be a
1be80 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68   real table with
1be90 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  .** multiple row
1bea0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  s..**.** If P4 i
1beb0 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
1bec0 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20   it is the name 
1bed0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
1bee0 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74  t P1 is.** point
1bef0 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64  ing to.  The upd
1bf00 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65  ate hook will be
1bf10 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20   invoked, if it 
1bf20 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34  exists..** If P4
1bf30 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65   is not NULL the
1bf40 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  n the P1 cursor 
1bf50 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 70  must have been p
1bf60 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69  ositioned.** usi
1bf70 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70  ng OP_NotFound p
1bf80 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67  rior to invoking
1bf90 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f   this opcode..*/
1bfa0 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a  .case OP_Delete:
1bfb0 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70   {.  int i = pOp
1bfc0 2d 3e 70 31 3b 0a 20 20 69 36 34 20 69 4b 65 79  ->p1;.  i64 iKey
1bfd0 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a  ;.  Cursor *pC;.
1bfe0 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
1bff0 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
1c000 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1c010 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28  sr[i];.  assert(
1c020 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1c030 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
1c040 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76  =0 );  /* Only v
1c050 61 6c 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61  alid for real ta
1c060 62 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74  bles, no pseudot
1c070 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  ables */..  /* I
1c080 66 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  f the update-hoo
1c090 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65  k will be invoke
1c0a0 64 2c 20 73 65 74 20 69 4b 65 79 20 74 6f 20 74  d, set iKey to t
1c0b0 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 0a  he rowid of the.
1c0c0 20 20 2a 2a 20 72 6f 77 20 62 65 69 6e 67 20 64    ** row being d
1c0d0 65 6c 65 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 69  eleted..  */.  i
1c0e0 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  f( db->xUpdateCa
1c0f0 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
1c100 34 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73 65 72  4.z ){.    asser
1c110 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
1c120 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
1c130 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29  ->rowidIsValid )
1c140 3b 20 20 2f 2a 20 6c 61 73 74 52 6f 77 69 64 20  ;  /* lastRowid 
1c150 73 65 74 20 62 79 20 70 72 65 76 69 6f 75 73 20  set by previous 
1c160 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20  OP_NotFound */. 
1c170 20 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61     iKey = pC->la
1c180 73 74 52 6f 77 69 64 3b 0a 20 20 7d 0a 0a 20 20  stRowid;.  }..  
1c190 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
1c1a0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
1c1b0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
1c1c0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1c1d0 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20 73 71 6c  rror;.  rc = sql
1c1e0 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
1c1f0 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
1c200 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c  pC->nextRowidVal
1c210 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  id = 0;.  pC->ca
1c220 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1c230 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49  E_STALE;..  /* I
1c240 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
1c250 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
1c260 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d  d. */.  if( rc==
1c270 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d  SQLITE_OK && db-
1c280 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
1c290 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b   && pOp->p4.z ){
1c2a0 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
1c2b0 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70  *zDb = db->aDb[p
1c2c0 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20  C->iDb].zName;. 
1c2d0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
1c2e0 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  Tbl = pOp->p4.z;
1c2f0 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65  .    db->xUpdate
1c300 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
1c310 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f  dateArg, SQLITE_
1c320 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62  DELETE, zDb, zTb
1c330 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73  l, iKey);.    as
1c340 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
1c350 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   );.  }.  if( pO
1c360 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p2 & OPFLAG_N
1c370 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
1c380 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a  nge++;.  break;.
1c390 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
1c3a0 73 65 74 43 6f 75 6e 74 20 50 31 20 2a 20 2a 0a  setCount P1 * *.
1c3b0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1c3c0 65 20 72 65 73 65 74 73 20 74 68 65 20 56 4d 73  e resets the VMs
1c3d0 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65   internal change
1c3e0 20 63 6f 75 6e 74 65 72 20 74 6f 20 30 2e 20 49   counter to 0. I
1c3f0 66 20 50 31 20 69 73 20 74 72 75 65 2c 0a 2a 2a  f P1 is true,.**
1c400 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
1c410 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  of the change co
1c420 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20  unter is copied 
1c430 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
1c440 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65  handle.** change
1c450 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e   counter (return
1c460 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74  ed by subsequent
1c470 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65   calls to sqlite
1c480 33 5f 63 68 61 6e 67 65 73 28 29 29 0a 2a 2a 20  3_changes()).** 
1c490 62 65 66 6f 72 65 20 69 74 20 69 73 20 72 65 73  before it is res
1c4a0 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  et. This is used
1c4b0 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67   by trigger prog
1c4c0 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rams..*/.case OP
1c4d0 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20  _ResetCount: {. 
1c4e0 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
1c4f0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
1c500 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
1c510 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 7d 0a 20  >nChange);.  }. 
1c520 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
1c530 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1c540 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20  Opcode: RowData 
1c550 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1c560 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
1c570 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d  ister P2 the com
1c580 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20 66  plete row data f
1c590 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  or cursor P1..**
1c5a0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74   There is no int
1c5b0 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
1c5c0 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74  he data.  .** It
1c5d0 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20   is just copied 
1c5e0 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69  onto the P2 regi
1c5f0 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20  ster exactly as 
1c600 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20  .** it is found 
1c610 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
1c620 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  file..**.** If t
1c630 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
1c640 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f  t be pointing to
1c650 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f   a valid row (no
1c660 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a  t a NULL row).**
1c670 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65   of a real table
1c680 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
1c690 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  able..*/./* Opco
1c6a0 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32  de: RowKey P1 P2
1c6b0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
1c6c0 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
1c6d0 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
1c6e0 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72   row key for cur
1c6f0 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
1c700 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
1c710 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
1c720 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20  a.  .** The key 
1c730 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  is copied onto t
1c740 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 65  he P3 register e
1c750 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
1c760 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
1c770 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
1c780 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
1c790 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
1c7a0 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
1c7b0 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
1c7c0 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
1c7d0 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
1c7e0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
1c7f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65  */.case OP_RowKe
1c800 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61  y:.case OP_RowDa
1c810 74 61 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20  ta: {.  int i = 
1c820 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f  pOp->p1;.  Curso
1c830 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
1c840 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20  r *pCrsr;.  u32 
1c850 6e 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d  n;..  pOut = &p-
1c860 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  >aMem[pOp->p2];.
1c870 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20  .  /* Note that 
1c880 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61  RowKey and RowDa
1c890 74 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78  ta are really ex
1c8a0 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69  actly the same i
1c8b0 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20  nstruction */.  
1c8c0 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20  assert( i>=0 && 
1c8d0 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  i<p->nCursor );.
1c8e0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1c8f0 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  i];.  assert( pC
1c900 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70  ->isTable || pOp
1c910 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77  ->opcode==OP_Row
1c920 4b 65 79 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Key );.  assert(
1c930 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 7c 7c 20   pC->isIndex || 
1c940 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1c950 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73  RowData );.  ass
1c960 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1c970 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c  assert( pC->null
1c980 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Row==0 );.  asse
1c990 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
1c9a0 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ble==0 );.  asse
1c9b0 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
1c9c0 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
1c9d0 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 72  pC->pCursor;.  r
1c9e0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
1c9f0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
1ca00 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1ca10 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1ca20 72 6f 72 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69  ror;.  if( pC->i
1ca30 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 69 36  sIndex ){.    i6
1ca40 34 20 6e 36 34 3b 0a 20 20 20 20 61 73 73 65 72  4 n64;.    asser
1ca50 74 28 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 20  t( !pC->isTable 
1ca60 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  );.    sqlite3Bt
1ca70 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72  reeKeySize(pCrsr
1ca80 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20 69 66 28  , &n64);.    if(
1ca90 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b   n64>db->aLimit[
1caa0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
1cab0 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f  GTH] ){.      go
1cac0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
1cad0 7d 0a 20 20 20 20 6e 20 3d 20 6e 36 34 3b 0a 20  }.    n = n64;. 
1cae0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
1caf0 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65  te3BtreeDataSize
1cb00 28 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20  (pCrsr, &n);.   
1cb10 20 69 66 28 20 6e 3e 64 62 2d 3e 61 4c 69 6d 69   if( n>db->aLimi
1cb20 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
1cb30 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
1cb40 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
1cb50 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71    }.  }.  if( sq
1cb60 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
1cb70 28 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a  (pOut, n, 0) ){.
1cb80 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
1cb90 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  .  }.  pOut->n =
1cba0 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65   n;.  MemSetType
1cbb0 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42  Flag(pOut, MEM_B
1cbc0 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  lob);.  if( pC->
1cbd0 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72  isIndex ){.    r
1cbe0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1cbf0 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  Key(pCrsr, 0, n,
1cc00 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c   pOut->z);.  }el
1cc10 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  se{.    rc = sql
1cc20 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43  ite3BtreeData(pC
1cc30 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d  rsr, 0, n, pOut-
1cc40 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  >z);.  }.  pOut-
1cc50 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
1cc60 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20  F8;  /* In case 
1cc70 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72  the blob is ever
1cc80 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f   cast to text */
1cc90 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
1cca0 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
1ccb0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1ccc0 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32  ode: Rowid P1 P2
1ccd0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f   * * *.**.** Sto
1cce0 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  re in register P
1ccf0 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
1cd00 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66  ch is the key of
1cd10 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
1cd20 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63   that.** P1 is c
1cd30 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74  urrently point t
1cd40 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  o..*/.case OP_Ro
1cd50 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
1cd60 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
1cd70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
1cd80 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
1cd90 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20    Cursor *pC;.  
1cda0 69 36 34 20 76 3b 0a 0a 20 20 61 73 73 65 72 74  i64 v;..  assert
1cdb0 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
1cdc0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1cdd0 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20   p->apCsr[i];.  
1cde0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1cdf0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
1ce00 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
1ce10 70 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  pC);.  if( rc ) 
1ce20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1ce30 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70  o_error;.  if( p
1ce40 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1ce50 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c  ){.    v = pC->l
1ce60 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d 65 6c 73  astRowid;.  }els
1ce70 65 20 69 66 28 20 70 43 2d 3e 70 73 65 75 64 6f  e if( pC->pseudo
1ce80 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 76 20 3d  Table ){.    v =
1ce90 20 6b 65 79 54 6f 49 6e 74 28 70 43 2d 3e 69 4b   keyToInt(pC->iK
1cea0 65 79 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  ey);.  }else if(
1ceb0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
1cec0 20 20 20 20 2f 2a 20 4c 65 61 76 65 20 74 68 65      /* Leave the
1ced0 20 72 6f 77 69 64 20 73 65 74 20 74 6f 20 61 20   rowid set to a 
1cee0 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 62 72 65 61  NULL */.    brea
1cef0 6b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  k;.  }else{.    
1cf00 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
1cf10 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 73 71  sor!=0 );.    sq
1cf20 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
1cf30 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
1cf40 76 29 3b 0a 20 20 20 20 76 20 3d 20 6b 65 79 54  v);.    v = keyT
1cf50 6f 49 6e 74 28 76 29 3b 0a 20 20 7d 0a 20 20 70  oInt(v);.  }.  p
1cf60 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Out->u.i = v;.  
1cf70 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
1cf80 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
1cf90 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1cfa0 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31  code: NullRow P1
1cfb0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d   * * * *.**.** M
1cfc0 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50  ove the cursor P
1cfd0 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e  1 to a null row.
1cfe0 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20    Any OP_Column 
1cff0 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68  operations.** th
1d000 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74  at occur while t
1d010 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20  he cursor is on 
1d020 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c  the null row wil
1d030 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74  l always.** writ
1d040 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  e a NULL..*/.cas
1d050 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a  e OP_NullRow: {.
1d060 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70    int i = pOp->p
1d070 31 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b  1;.  Cursor *pC;
1d080 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ..  assert( i>=0
1d090 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
1d0a0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1d0b0 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74  Csr[i];.  assert
1d0c0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d  ( pC!=0 );.  pC-
1d0d0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1d0e0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1d0f0 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 43 2d 3e   = 0;.  if( pC->
1d100 70 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 73  pCursor ){.    s
1d110 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
1d120 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73  Cursor(pC->pCurs
1d130 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  or);.  }.  break
1d140 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1d150 4c 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Last P1 P2 * * *
1d160 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  .**.** The next 
1d170 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64  use of the Rowid
1d180 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65   or Column or Ne
1d190 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66  xt instruction f
1d1a0 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72  or P1 .** will r
1d1b0 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74  efer to the last
1d1c0 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
1d1d0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
1d1e0 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
1d1f0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1d200 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e  is empty and P2>
1d210 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  0, then jump imm
1d220 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
1d230 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72  ** If P2 is 0 or
1d240 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   if the table or
1d250 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d   index is not em
1d260 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  pty, fall throug
1d270 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
1d280 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
1d290 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61  n..*/.case OP_La
1d2a0 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  st: {        /* 
1d2b0 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 69 20  jump */.  int i 
1d2c0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72  = pOp->p1;.  Cur
1d2d0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
1d2e0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
1d2f0 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
1d300 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
1d310 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1d320 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20   p->apCsr[i];.  
1d330 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1d340 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
1d350 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
1d360 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
1d370 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1d380 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72 65  eLast(pCrsr, &re
1d390 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  s);.  pC->nullRo
1d3a0 77 20 3d 20 72 65 73 3b 0a 20 20 70 43 2d 3e 64  w = res;.  pC->d
1d3b0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1d3c0 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
1d3d0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1d3e0 4c 45 3b 0a 20 20 69 66 28 20 72 65 73 20 26 26  LE;.  if( res &&
1d3f0 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20   pOp->p2>0 ){.  
1d400 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1d410 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
1d420 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
1d430 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Sort P1 P2 * * *
1d440 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1d450 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20  de does exactly 
1d460 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61  the same thing a
1d470 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65  s OP_Rewind exce
1d480 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e  pt that.** it in
1d490 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f  crements an undo
1d4a0 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20  cumented global 
1d4b0 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f  variable used fo
1d4c0 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a  r testing..**.**
1d4d0 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f   Sorting is acco
1d4e0 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72 69 74  mplished by writ
1d4f0 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f  ing records into
1d500 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78   a sorting index
1d510 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64  ,.** then rewind
1d520 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20 61  ing that index a
1d530 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61  nd playing it ba
1d540 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e  ck from beginnin
1d550 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65  g to.** end.  We
1d560 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74   use the OP_Sort
1d570 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20   opcode instead 
1d580 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20  of OP_Rewind to 
1d590 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64  do the.** rewind
1d5a0 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65 20  ing so that the 
1d5b0 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
1d5c0 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e  will be incremen
1d5d0 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65  ted and.** regre
1d5e0 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20  ssion tests can 
1d5f0 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  determine whethe
1d600 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74  r or not the opt
1d610 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72  imizer is.** cor
1d620 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e  rectly optimizin
1d630 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a  g out sorts..*/.
1d640 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20  case OP_Sort: { 
1d650 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
1d660 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1d670 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73  TEST.  sqlite3_s
1d680 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73  ort_count++;.  s
1d690 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
1d6a0 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20  unt--;.#endif.  
1d6b0 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49  p->aCounter[SQLI
1d6c0 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f  TE_STMTSTATUS_SO
1d6d0 52 54 2d 31 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61  RT-1]++;.  /* Fa
1d6e0 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
1d6f0 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f  OP_Rewind */.}./
1d700 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64  * Opcode: Rewind
1d710 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1d720 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20  ** The next use 
1d730 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20  of the Rowid or 
1d740 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69  Column or Next i
1d750 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50  nstruction for P
1d760 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72  1 .** will refer
1d770 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e   to the first en
1d780 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  try in the datab
1d790 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
1d7a0 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  ex..** If the ta
1d7b0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
1d7c0 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20  empty and P2>0, 
1d7d0 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
1d7e0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20  ately to P2..** 
1d7f0 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66  If P2 is 0 or if
1d800 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1d810 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  dex is not empty
1d820 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  , fall through.*
1d830 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
1d840 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ng instruction..
1d850 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e  */.case OP_Rewin
1d860 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
1d870 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d  ump */.  int i =
1d880 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73   pOp->p1;.  Curs
1d890 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
1d8a0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
1d8b0 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28   res;..  assert(
1d8c0 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
1d8d0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1d8e0 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61  p->apCsr[i];.  a
1d8f0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1d900 20 20 69 66 28 20 28 70 43 72 73 72 20 3d 20 70    if( (pCrsr = p
1d910 43 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29  C->pCursor)!=0 )
1d920 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
1d930 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72  e3BtreeFirst(pCr
1d940 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70  sr, &res);.    p
1d950 43 2d 3e 61 74 46 69 72 73 74 20 3d 20 72 65 73  C->atFirst = res
1d960 3d 3d 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  ==0;.    pC->def
1d970 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1d980 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
1d990 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1d9a0 4c 45 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  LE;.  }else{.   
1d9b0 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d 0a 20 20   res = 1;.  }.  
1d9c0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 72 65  pC->nullRow = re
1d9d0 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  s;.  assert( pOp
1d9e0 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
1d9f0 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66  2<p->nOp );.  if
1da00 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  ( res ){.    pc 
1da10 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1da20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1da30 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50  * Opcode: Next P
1da40 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1da50 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20   Advance cursor 
1da60 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
1da70 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74  ints to the next
1da80 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
1da90 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
1daa0 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
1dab0 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b  re are no more k
1dac0 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74  ey/value pairs t
1dad0 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
1dae0 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
1daf0 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
1db00 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75  .  But if the cu
1db10 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73  rsor advance was
1db20 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20   successful,.** 
1db30 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
1db40 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
1db50 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
1db60 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74   be for a real t
1db70 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
1db80 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  do-table..**.** 
1db90 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a  See also: Prev.*
1dba0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65  /./* Opcode: Pre
1dbb0 76 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  v P1 P2 * * *.**
1dbc0 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73  .** Back up curs
1dbd0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
1dbe0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70   points to the p
1dbf0 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61  revious key/data
1dc00 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
1dc10 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
1dc20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
1dc30 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c  previous key/val
1dc40 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
1dc50 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
1dc60 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
1dc70 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
1dc80 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62   if the cursor b
1dc90 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73  ackup was succes
1dca0 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
1dcb0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
1dcc0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
1dcd0 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
1dce0 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
1dcf0 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
1dd00 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72  e..*/.case OP_Pr
1dd10 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev:          /* 
1dd20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
1dd30 4e 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Next: {        /
1dd40 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 43 75 72 73  * jump */.  Curs
1dd50 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
1dd60 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
1dd70 20 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f 46   res;..  CHECK_F
1dd80 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
1dd90 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1dda0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1ddb0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1ddc0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1ddd0 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d 3d  >p1];.  if( pC==
1dde0 30 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 20  0 ){.    break; 
1ddf0 20 2f 2a 20 53 65 65 20 74 69 63 6b 65 74 20 23   /* See ticket #
1de00 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 70 43  2273 */.  }.  pC
1de10 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
1de20 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
1de30 73 72 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b  sr );.  res = 1;
1de40 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
1de50 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
1de60 20 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e   );.  rc = pOp->
1de70 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78 74 20  opcode==OP_Next 
1de80 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  ? sqlite3BtreeNe
1de90 78 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 20  xt(pCrsr, &res) 
1dea0 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
1deb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dec0 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
1ded0 69 6f 75 73 28 70 43 72 73 72 2c 20 26 72 65 73  ious(pCrsr, &res
1dee0 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  );.  pC->nullRow
1def0 20 3d 20 72 65 73 3b 0a 20 20 70 43 2d 3e 63 61   = res;.  pC->ca
1df00 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1df10 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72  E_STALE;.  if( r
1df20 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  es==0 ){.    pc 
1df30 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1df40 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29     if( pOp->p5 )
1df50 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70   p->aCounter[pOp
1df60 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65  ->p5-1]++;.#ifde
1df70 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
1df80 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
1df90 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
1dfa0 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64  .  }.  pC->rowid
1dfb0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62  IsValid = 0;.  b
1dfc0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1dfd0 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31  de: IdxInsert P1
1dfe0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
1dff0 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c   Register P2 hol
1e000 64 73 20 61 20 53 51 4c 20 69 6e 64 65 78 20 6b  ds a SQL index k
1e010 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68  ey made using th
1e020 65 0a 2a 2a 20 4d 61 6b 65 49 64 78 52 65 63 20  e.** MakeIdxRec 
1e030 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54  instructions.  T
1e040 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65  his opcode write
1e050 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e  s that key.** in
1e060 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e  to the index P1.
1e070 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65    Data for the e
1e080 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a  ntry is nil..**.
1e090 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67 20  ** P3 is a flag 
1e0a0 74 68 61 74 20 70 72 6f 76 69 64 65 73 20 61 20  that provides a 
1e0b0 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72  hint to the b-tr
1e0c0 65 65 20 6c 61 79 65 72 20 74 68 61 74 20 74 68  ee layer that th
1e0d0 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20  is.** insert is 
1e0e0 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20  likely to be an 
1e0f0 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  append..**.** Th
1e100 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
1e110 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e  nly works for in
1e120 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69  dices.  The equi
1e130 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
1e140 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73  on.** for tables
1e150 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a   is OP_Insert..*
1e160 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73  /.case OP_IdxIns
1e170 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ert: {        /*
1e180 20 69 6e 32 20 2a 2f 0a 20 20 69 6e 74 20 69 20   in2 */.  int i 
1e190 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72  = pOp->p1;.  Cur
1e1a0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
1e1b0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 61 73  sor *pCrsr;.  as
1e1c0 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
1e1d0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1e1e0 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
1e1f0 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  [i]!=0 );.  asse
1e200 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  rt( pIn2->flags 
1e210 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
1e220 69 66 28 20 28 70 43 72 73 72 20 3d 20 28 70 43  if( (pCrsr = (pC
1e230 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d   = p->apCsr[i])-
1e240 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a  >pCursor)!=0 ){.
1e250 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1e260 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
1e270 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f    rc = ExpandBlo
1e280 62 28 70 49 6e 32 29 3b 0a 20 20 20 20 69 66 28  b(pIn2);.    if(
1e290 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1e2a0 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 4b 65 79  {.      int nKey
1e2b0 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20   = pIn2->n;.    
1e2c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b    const char *zK
1e2d0 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20  ey = pIn2->z;.  
1e2e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1e2f0 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 72 73  BtreeInsert(pCrs
1e300 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22  r, zKey, nKey, "
1e310 22 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33  ", 0, 0, pOp->p3
1e320 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1e330 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1e340 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  eto==0 );.      
1e350 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1e360 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
1e370 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
1e380 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1e390 49 64 78 44 65 6c 65 74 65 20 50 31 20 50 32 20  IdxDelete P1 P2 
1e3a0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65  P3 * *.**.** The
1e3b0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72   content of P3 r
1e3c0 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
1e3d0 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50 32  g at register P2
1e3e0 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61   form.** an unpa
1e3f0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1e400 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f  This opcode remo
1e410 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20 66  ves that entry f
1e420 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65  rom the .** inde
1e430 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  x opened by curs
1e440 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  or P1..*/.case O
1e450 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20  P_IdxDelete: {. 
1e460 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31   int i = pOp->p1
1e470 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a  ;.  Cursor *pC;.
1e480 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
1e490 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  r;.  assert( pOp
1e4a0 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p3>0 );.  asse
1e4b0 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26  rt( pOp->p2>0 &&
1e4c0 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33   pOp->p2+pOp->p3
1e4d0 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61  <=p->nMem );.  a
1e4e0 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
1e4f0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1e500 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
1e510 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28  r[i]!=0 );.  if(
1e520 20 28 70 43 72 73 72 20 3d 20 28 70 43 20 3d 20   (pCrsr = (pC = 
1e530 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43  p->apCsr[i])->pC
1e540 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20  ursor)!=0 ){.   
1e550 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 55 6e   int res;.    Un
1e560 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
1e570 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
1e580 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
1e590 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 70 4f     r.nField = pO
1e5a0 70 2d 3e 70 33 3b 0a 20 20 20 20 72 2e 66 6c 61  p->p3;.    r.fla
1e5b0 67 73 20 3d 20 30 3b 0a 20 20 20 20 72 2e 61 4d  gs = 0;.    r.aM
1e5c0 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  em = &p->aMem[pO
1e5d0 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 72 63 20 3d  p->p2];.    rc =
1e5e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1e5f0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
1e600 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
1e610 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  s);.    if( rc==
1e620 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73  SQLITE_OK && res
1e630 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
1e640 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65  = sqlite3BtreeDe
1e650 6c 65 74 65 28 70 43 72 73 72 29 3b 0a 20 20 20  lete(pCrsr);.   
1e660 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70   }.    assert( p
1e670 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1e680 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e  o==0 );.    pC->
1e690 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1e6a0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
1e6b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1e6c0 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50  code: IdxRowid P
1e6d0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1e6e0 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
1e6f0 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67  ster P2 an integ
1e700 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
1e710 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
1e720 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74  e record at.** t
1e730 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
1e740 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20  dex key pointed 
1e750 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  to by cursor P1.
1e760 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73    This integer s
1e770 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20  hould be.** the 
1e780 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
1e790 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63  le entry to whic
1e7a0 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74  h this index ent
1e7b0 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a  ry points..**.**
1e7c0 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64   See also: Rowid
1e7d0 2c 20 4d 61 6b 65 49 64 78 52 65 63 2e 0a 2a 2f  , MakeIdxRec..*/
1e7e0 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69  .case OP_IdxRowi
1e7f0 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
1e800 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
1e810 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 20  ease */.  int i 
1e820 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 42 74 43  = pOp->p1;.  BtC
1e830 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
1e840 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
1e850 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
1e860 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1e870 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
1e880 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28  r[i]!=0 );.  if(
1e890 20 28 70 43 72 73 72 20 3d 20 28 70 43 20 3d 20   (pCrsr = (pC = 
1e8a0 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43  p->apCsr[i])->pC
1e8b0 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20  ursor)!=0 ){.   
1e8c0 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 20   i64 rowid;..   
1e8d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
1e8e0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
1e8f0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
1e900 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
1e910 20 20 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c      if( !pC->nul
1e920 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 72 63  lRow ){.      rc
1e930 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
1e940 78 52 6f 77 69 64 28 70 43 72 73 72 2c 20 26 72  xRowid(pCrsr, &r
1e950 6f 77 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28  owid);.      if(
1e960 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1e970 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  {.        goto a
1e980 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1e990 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
1e9a0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
1e9b0 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
1e9c0 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20        pOut->u.i 
1e9d0 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  = rowid;.    }. 
1e9e0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1e9f0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20  * Opcode: IdxGE 
1ea00 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1ea10 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
1ea20 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
1ea30 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
1ea40 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
1ea50 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
1ea60 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49  t omits the ROWI
1ea70 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  D.  Compare this
1ea80 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
1ea90 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
1eaa0 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
1eab0 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
1eac0 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
1ead0 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20  ROWID on the P1 
1eae0 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  index..**.** If 
1eaf0 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
1eb00 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
1eb10 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1eb20 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
1eb30 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1eb40 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
1eb50 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
1eb60 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
1eb70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
1eb80 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74   non-zero then t
1eb90 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20  he key value is 
1eba0 69 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20  increased by an 
1ebb0 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f  epsilon .** prio
1ebc0 72 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  r to the compari
1ebd0 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 20  son.  This make 
1ebe0 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20  the opcode work 
1ebf0 6c 69 6b 65 20 49 64 78 47 54 20 65 78 63 65 70  like IdxGT excep
1ec00 74 0a 2a 2a 20 74 68 61 74 20 69 66 20 74 68 65  t.** that if the
1ec10 20 6b 65 79 20 66 72 6f 6d 20 72 65 67 69 73 74   key from regist
1ec20 65 72 20 50 33 20 69 73 20 61 20 70 72 65 66 69  er P3 is a prefi
1ec30 78 20 6f 66 20 74 68 65 20 6b 65 79 20 69 6e 20  x of the key in 
1ec40 74 68 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74  the cursor,.** t
1ec50 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c  he result is fal
1ec60 73 65 20 77 68 65 72 65 61 73 20 69 74 20 77 6f  se whereas it wo
1ec70 75 6c 64 20 62 65 20 74 72 75 65 20 77 69 74 68  uld be true with
1ec80 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70   IdxGT..*/./* Op
1ec90 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50  code: IdxLT P1 P
1eca0 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  2 P3 * P5.**.** 
1ecb0 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
1ecc0 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
1ecd0 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
1ece0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1ecf0 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
1ed00 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43  ts the ROWID.  C
1ed10 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
1ed20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
1ed30 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
1ed40 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
1ed50 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
1ed60 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44  noring the ROWID
1ed70 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
1ed80 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
1ed90 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
1eda0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
1edb0 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
1edc0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68  mp to P2..** Oth
1edd0 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
1ede0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
1edf0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
1ee00 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
1ee10 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65  zero then the ke
1ee20 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65  y value is incre
1ee30 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c  ased by an epsil
1ee40 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f 20  on prior .** to 
1ee50 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
1ee60 20 54 68 69 73 20 6d 61 6b 65 73 20 74 68 65 20   This makes the 
1ee70 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65  opcode work like
1ee80 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20   IdxLE..*/.case 
1ee90 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20  OP_IdxLT:       
1eea0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1eeb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45  */.case OP_IdxGE
1eec0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
1eed0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
1eee0 20 69 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43   i= pOp->p1;.  C
1eef0 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73  ursor *pC;..  as
1ef00 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
1ef10 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1ef20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
1ef30 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  [i]!=0 );.  if( 
1ef40 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69  (pC = p->apCsr[i
1ef50 5d 29 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  ])->pCursor!=0 )
1ef60 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20  {.    int res;. 
1ef70 20 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72     UnpackedRecor
1ef80 64 20 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  d r;.    assert(
1ef90 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1efa0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73  eto==0 );.    as
1efb0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
1efc0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29   || pOp->p5==1 )
1efd0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
1efe0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1eff0 54 33 32 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65  T32 );.    r.pKe
1f000 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
1f010 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
1f020 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
1f030 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
1f040 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73  ){.      r.flags
1f050 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52   = UNPACKED_INCR
1f060 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45 44 5f 49  KEY | UNPACKED_I
1f070 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20  GNORE_ROWID;.   
1f080 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 2e   }else{.      r.
1f090 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44  flags = UNPACKED
1f0a0 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20  _IGNORE_ROWID;. 
1f0b0 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65 6d 20     }.    r.aMem 
1f0c0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
1f0d0 70 33 5d 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  p3];.    rc = sq
1f0e0 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43  lite3VdbeIdxKeyC
1f0f0 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20 26  ompare(pC, &r, &
1f100 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  res);.    if( pO
1f110 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
1f120 78 4c 54 20 29 7b 0a 20 20 20 20 20 20 72 65 73  xLT ){.      res
1f130 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d 65 6c   = -res;.    }el
1f140 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
1f150 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1f160 50 5f 49 64 78 47 45 20 29 3b 0a 20 20 20 20 20  P_IdxGE );.     
1f170 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20   res++;.    }.  
1f180 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20    if( res>0 ){. 
1f190 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1f1a0 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a 20 20  2 - 1 ;.    }.  
1f1b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1f1c0 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79   Opcode: Destroy
1f1d0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1f1e0 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e  .** Delete an en
1f1f0 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61  tire database ta
1f200 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
1f210 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  se root page in 
1f220 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
1f230 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
1f240 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74   P1..**.** The t
1f250 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72  able being destr
1f260 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d  oyed is in the m
1f270 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
1f280 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a  e if P3==0.  If.
1f290 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68  ** P3==1 then th
1f2a0 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
1f2b0 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
1f2c0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
1f2d0 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
1f2e0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1f2f0 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
1f300 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
1f310 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
1f320 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
1f330 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69  s enabled then i
1f340 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68  t is possible th
1f350 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20  at another root 
1f360 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65  page.** might be
1f370 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
1f380 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f  newly deleted ro
1f390 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72  ot page in order
1f3a0 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20   to keep all.** 
1f3b0 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69  root pages conti
1f3c0 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67  guous at the beg
1f3d0 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61  inning of the da
1f3e0 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72  tabase.  The for
1f3f0 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  mer.** value of 
1f400 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68  the root page th
1f410 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76  at moved - its v
1f420 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20  alue before the 
1f430 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a  move occurred -.
1f440 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ** is stored in 
1f450 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
1f460 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76   no page .** mov
1f470 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72  ement was requir
1f480 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65 20  ed (because the 
1f490 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70  table being drop
1f4a0 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20  ped was already 
1f4b0 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65  .** the last one
1f4c0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1f4d0 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73  ) then a zero is
1f4e0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
1f4f0 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55  ter P2..** If AU
1f500 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61  TOVACUUM is disa
1f510 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f  bled then a zero
1f520 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
1f530 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
1f540 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72   See also: Clear
1f550 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74  .*/.case OP_Dest
1f560 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75  roy: {     /* ou
1f570 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
1f580 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20  .  int iMoved;. 
1f590 20 69 6e 74 20 69 43 6e 74 3b 0a 23 69 66 6e 64   int iCnt;.#ifnd
1f5a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1f5b0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 56 64  IRTUALTABLE.  Vd
1f5c0 62 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 43 6e  be *pVdbe;.  iCn
1f5d0 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56 64  t = 0;.  for(pVd
1f5e0 62 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70 56  be=db->pVdbe; pV
1f5f0 64 62 65 3b 20 70 56 64 62 65 3d 70 56 64 62 65  dbe; pVdbe=pVdbe
1f600 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66  ->pNext){.    if
1f610 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d  ( pVdbe->magic==
1f620 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26  VDBE_MAGIC_RUN &
1f630 26 20 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d  & pVdbe->inVtabM
1f640 65 74 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65  ethod<2 && pVdbe
1f650 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20 20  ->pc>=0 ){.     
1f660 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20   iCnt++;.    }. 
1f670 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20   }.#else.  iCnt 
1f680 3d 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65  = db->activeVdbe
1f690 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  Cnt;.#endif.  if
1f6a0 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20  ( iCnt>1 ){.    
1f6b0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  rc = SQLITE_LOCK
1f6c0 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72  ED;.    p->error
1f6d0 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72  Action = OE_Abor
1f6e0 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
1f6f0 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  int iDb = pOp->p
1f700 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  3;.    assert( i
1f710 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73  Cnt==1 );.    as
1f720 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
1f730 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21  ask & (1<<iDb))!
1f740 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =0 );.    rc = s
1f750 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54  qlite3BtreeDropT
1f760 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62  able(db->aDb[iDb
1f770 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
1f780 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 4d 65  &iMoved);.    Me
1f790 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
1f7a0 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20  t, MEM_Int);.   
1f7b0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f   pOut->u.i = iMo
1f7c0 76 65 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ved;.#ifndef SQL
1f7d0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
1f7e0 55 55 4d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  UUM.    if( rc==
1f7f0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d 6f  SQLITE_OK && iMo
1f800 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ved!=0 ){.      
1f810 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
1f820 6f 76 65 64 28 26 64 62 2d 3e 61 44 62 5b 69 44  oved(&db->aDb[iD
1f830 62 5d 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d  b], iMoved, pOp-
1f840 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  >p1);.    }.#end
1f850 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
1f860 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
1f870 65 61 72 20 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a  ear P1 P2 *.**.*
1f880 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e  * Delete all con
1f890 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74  tents of the dat
1f8a0 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
1f8b0 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20  ndex whose root 
1f8c0 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64  page.** in the d
1f8d0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20  atabase file is 
1f8e0 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75  given by P1.  Bu
1f8f0 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f  t, unlike Destro
1f900 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d  y, do not.** rem
1f910 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72  ove the table or
1f920 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20   index from the 
1f930 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
1f940 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62  *.** The table b
1f950 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e  eing clear is in
1f960 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1f970 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30  se file if P2==0
1f980 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74  .  If.** P2==1 t
1f990 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f  hen the table to
1f9a0 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20   be clear is in 
1f9b0 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
1f9c0 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74  tabase file.** t
1f9d0 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  hat is used to s
1f9e0 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61  tore tables crea
1f9f0 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  te using CREATE 
1fa00 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e  TEMPORARY TABLE.
1fa10 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1fa20 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65   Destroy.*/.case
1fa30 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 61   OP_Clear: {.  a
1fa40 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
1fa50 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
1fa60 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20  p2))!=0 );.  rc 
1fa70 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
1fa80 65 61 72 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  earTable(db->aDb
1fa90 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70  [pOp->p2].pBt, p
1faa0 4f 70 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b  Op->p1);.  break
1fab0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1fac0 43 72 65 61 74 65 54 61 62 6c 65 20 50 31 20 50  CreateTable P1 P
1fad0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c  2 * * *.**.** Al
1fae0 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61 62  locate a new tab
1faf0 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  le in the main d
1fb00 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
1fb10 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a  P1==0 or in the.
1fb20 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  ** auxiliary dat
1fb30 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
1fb40 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74  ==1 or in an att
1fb50 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69  ached database i
1fb60 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74  f.** P1>1.  Writ
1fb70 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  e the root page 
1fb80 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65  number of the ne
1fb90 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20  w table into.** 
1fba0 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a  register P2.**.*
1fbb0 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65  * The difference
1fbc0 20 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c 65   between a table
1fbd0 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73   and an index is
1fbe0 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65 20   this:  A table 
1fbf0 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20 34  must.** have a 4
1fc00 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b 65  -byte integer ke
1fc10 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20 61  y and can have a
1fc20 72 62 69 74 72 61 72 79 20 64 61 74 61 2e 20 20  rbitrary data.  
1fc30 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20  An index.** has 
1fc40 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65 79  an arbitrary key
1fc50 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a   but no data..**
1fc60 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 72  .** See also: Cr
1fc70 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20  eateIndex.*/./* 
1fc80 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49 6e  Opcode: CreateIn
1fc90 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  dex P1 P2 * * *.
1fca0 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
1fcb0 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68   new index in th
1fcc0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1fcd0 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72  file if P1==0 or
1fce0 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c   in the.** auxil
1fcf0 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
1fd00 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69  le if P1==1 or i
1fd10 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
1fd20 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e  tabase if.** P1>
1fd30 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f  1.  Write the ro
1fd40 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
1fd50 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  f the new table 
1fd60 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
1fd70 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64   P2..**.** See d
1fd80 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20  ocumentation on 
1fd90 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66  OP_CreateTable f
1fda0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
1fdb0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  formation..*/.ca
1fdc0 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65  se OP_CreateInde
1fdd0 78 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x:            /*
1fde0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
1fdf0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61   */.case OP_Crea
1fe00 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  teTable: {      
1fe10 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
1fe20 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
1fe30 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67  pgno;.  int flag
1fe40 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20  s;.  Db *pDb;.  
1fe50 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1fe60 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
1fe70 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
1fe80 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
1fe90 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29   & (1<<pOp->p1))
1fea0 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  !=0 );.  pDb = &
1feb0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
1fec0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d  ;.  assert( pDb-
1fed0 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28  >pBt!=0 );.  if(
1fee0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1fef0 5f 43 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a  _CreateTable ){.
1ff00 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42      /* flags = B
1ff10 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a  TREE_INTKEY; */.
1ff20 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45      flags = BTRE
1ff30 45 5f 4c 45 41 46 44 41 54 41 7c 42 54 52 45 45  E_LEAFDATA|BTREE
1ff40 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65  _INTKEY;.  }else
1ff50 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54  {.    flags = BT
1ff60 52 45 45 5f 5a 45 52 4f 44 41 54 41 3b 0a 20 20  REE_ZERODATA;.  
1ff70 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
1ff80 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65  BtreeCreateTable
1ff90 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f  (pDb->pBt, &pgno
1ffa0 2c 20 66 6c 61 67 73 29 3b 0a 20 20 69 66 28 20  , flags);.  if( 
1ffb0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1ffc0 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
1ffd0 20 70 67 6e 6f 3b 0a 20 20 20 20 4d 65 6d 53 65   pgno;.    MemSe
1ffe0 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
1fff0 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20  MEM_Int);.  }.  
20000 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
20010 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61  ode: ParseSchema
20020 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
20030 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72  .** Read and par
20040 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66  se all entries f
20050 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  rom the SQLITE_M
20060 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20 64  ASTER table of d
20070 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74 68  atabase P1.** th
20080 61 74 20 6d 61 74 63 68 20 74 68 65 20 57 48 45  at match the WHE
20090 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20 20 50  RE clause P4.  P
200a0 32 20 69 73 20 74 68 65 20 22 66 6f 72 63 65 22  2 is the "force"
200b0 20 66 6c 61 67 2e 20 20 20 41 6c 77 61 79 73 20   flag.   Always 
200c0 64 6f 0a 2a 2a 20 74 68 65 20 70 61 72 73 69 6e  do.** the parsin
200d0 67 20 69 66 20 50 32 20 69 73 20 74 72 75 65 2e  g if P2 is true.
200e0 20 20 49 66 20 50 32 20 69 73 20 66 61 6c 73 65    If P2 is false
200f0 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74  , then this rout
20100 69 6e 65 20 69 73 20 61 0a 2a 2a 20 6e 6f 2d 6f  ine is a.** no-o
20110 70 20 69 66 20 74 68 65 20 73 63 68 65 6d 61 20  p if the schema 
20120 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
20130 20 6c 6f 61 64 65 64 2e 20 20 49 6e 20 6f 74 68   loaded.  In oth
20140 65 72 20 77 6f 72 64 73 2c 20 69 66 20 50 32 0a  er words, if P2.
20150 2a 2a 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  ** is false, the
20160 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74   SQLITE_MASTER t
20170 61 62 6c 65 20 69 73 20 6f 6e 6c 79 20 70 61 72  able is only par
20180 73 65 64 20 69 66 20 74 68 65 20 72 65 73 74 20  sed if the rest 
20190 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
201a0 20 69 73 20 61 6c 72 65 61 64 79 20 6c 6f 61 64   is already load
201b0 65 64 20 69 6e 74 6f 20 74 68 65 20 73 79 6d 62  ed into the symb
201c0 6f 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ol table..**.** 
201d0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
201e0 6b 65 73 20 74 68 65 20 70 61 72 73 65 72 20 74  kes the parser t
201f0 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 76  o create a new v
20200 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a  irtual machine,.
20210 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65  ** then runs the
20220 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
20230 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75  hine.  It is thu
20240 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f  s a re-entrant o
20250 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
20260 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b  P_ParseSchema: {
20270 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
20280 20 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d 3e   int iDb = pOp->
20290 70 31 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  p1;.  const char
202a0 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 49 6e 69   *zMaster;.  Ini
202b0 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a  tData initData;.
202c0 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
202d0 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
202e0 20 29 3b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e   );.  if( !pOp->
202f0 70 32 20 26 26 20 21 44 62 48 61 73 50 72 6f 70  p2 && !DbHasProp
20300 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42  erty(db, iDb, DB
20310 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29  _SchemaLoaded) )
20320 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  {.    break;.  }
20330 0a 20 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48  .  zMaster = SCH
20340 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a  EMA_TABLE(iDb);.
20350 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20    initData.db = 
20360 64 62 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e 69  db;.  initData.i
20370 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
20380 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73  initData.pzErrMs
20390 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b  g = &p->zErrMsg;
203a0 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65  .  zSql = sqlite
203b0 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20  3MPrintf(db,.   
203c0 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20    "SELECT name, 
203d0 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52  rootpage, sql FR
203e0 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52 45  OM '%q'.%s WHERE
203f0 20 25 73 22 2c 0a 20 20 20 20 20 64 62 2d 3e 61   %s",.     db->a
20400 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a  Db[iDb].zName, z
20410 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e  Master, pOp->p4.
20420 7a 29 3b 0a 20 20 69 66 28 20 7a 53 71 6c 3d 3d  z);.  if( zSql==
20430 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
20440 0a 20 20 28 76 6f 69 64 29 73 71 6c 69 74 65 33  .  (void)sqlite3
20450 53 61 66 65 74 79 4f 66 66 28 64 62 29 3b 0a 20  SafetyOff(db);. 
20460 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69   assert( db->ini
20470 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 64  t.busy==0 );.  d
20480 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31  b->init.busy = 1
20490 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20  ;.  initData.rc 
204a0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61  = SQLITE_OK;.  a
204b0 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c  ssert( !db->mall
204c0 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 72 63  ocFailed );.  rc
204d0 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
204e0 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65  db, zSql, sqlite
204f0 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26  3InitCallback, &
20500 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20  initData, 0);.  
20510 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
20520 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74  K ) rc = initDat
20530 61 2e 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 44  a.rc;.  sqlite3D
20540 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b  bFree(db, zSql);
20550 0a 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79  .  db->init.busy
20560 20 3d 20 30 3b 0a 20 20 28 76 6f 69 64 29 73 71   = 0;.  (void)sq
20570 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62  lite3SafetyOn(db
20580 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
20590 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
205a0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
205b0 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a  }.  break;  .}..
205c0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
205d0 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45  ITE_OMIT_ANALYZE
205e0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
205f0 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 52 53 45 52  LITE_OMIT_PARSER
20600 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61  )./* Opcode: Loa
20610 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a  dAnalysis P1 * *
20620 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
20630 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
20640 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62   table for datab
20650 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20  ase P1 and load 
20660 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f  the content.** o
20670 66 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74  f that table int
20680 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69  o the internal i
20690 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e  ndex hash table.
206a0 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
206b0 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69  e.** the analysi
206c0 73 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65  s to be used whe
206d0 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20  n preparing all 
206e0 73 75 62 73 65 71 75 65 6e 74 20 71 75 65 72 69  subsequent queri
206f0 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  es..*/.case OP_L
20700 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20  oadAnalysis: {. 
20710 20 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d 3e   int iDb = pOp->
20720 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44  p1;.  assert( iD
20730 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
20740 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  nDb );.  rc = sq
20750 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
20760 64 28 64 62 2c 20 69 44 62 29 3b 0a 20 20 62 72  d(db, iDb);.  br
20770 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20  eak;  .}.#endif 
20780 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
20790 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29  TE_OMIT_ANALYZE)
207a0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
207b0 49 54 45 5f 4f 4d 49 54 5f 50 41 52 53 45 52 29  ITE_OMIT_PARSER)
207c0 20 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a    */../* Opcode:
207d0 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20   DropTable P1 * 
207e0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
207f0 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
20800 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
20810 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
20820 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
20830 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34  e table named P4
20840 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
20850 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
20860 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a   after a table.*
20870 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20  * is dropped in 
20880 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68  order to keep th
20890 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
208a0 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
208b0 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
208c0 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
208d0 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
208e0 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65  ase OP_DropTable
208f0 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
20900 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c  inkAndDeleteTabl
20910 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  e(db, pOp->p1, p
20920 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
20930 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
20940 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a  : DropIndex P1 *
20950 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
20960 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
20970 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
20980 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
20990 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
209a0 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50  he index named P
209b0 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
209c0 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
209d0 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78  d after an index
209e0 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69  .** is dropped i
209f0 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
20a00 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
20a10 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
20a20 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
20a30 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
20a40 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
20a50 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64  .case OP_DropInd
20a60 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  ex: {.  sqlite3U
20a70 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
20a80 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  dex(db, pOp->p1,
20a90 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
20aa0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
20ab0 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20  de: DropTrigger 
20ac0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
20ad0 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
20ae0 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
20af0 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
20b00 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
20b10 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 6e  ** the trigger n
20b20 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
20b30 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
20b40 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
20b50 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72  trigger.** is dr
20b60 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74  opped in order t
20b70 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
20b80 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
20b90 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
20ba0 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
20bb0 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
20bc0 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
20bd0 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20  DropTrigger: {. 
20be0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
20bf0 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 64  dDeleteTrigger(d
20c00 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
20c10 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
20c20 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .}...#ifndef SQL
20c30 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
20c40 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f  TY_CHECK./* Opco
20c50 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20  de: IntegrityCk 
20c60 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
20c70 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73  .** Do an analys
20c80 69 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  is of the curren
20c90 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73  tly open databas
20ca0 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20  e.  Store in.** 
20cb0 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20  register P1 the 
20cc0 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72  text of an error
20cd0 20 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62   message describ
20ce0 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73  ing any problems
20cf0 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c  ..** If no probl
20d00 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73  ems are found, s
20d10 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72  tore a NULL in r
20d20 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a  egister P1..**.*
20d30 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50  * The register P
20d40 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d  3 contains the m
20d50 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
20d60 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e   allowed errors.
20d70 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28  .** At most reg(
20d80 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20  P3) errors will 
20d90 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20  be reported..** 
20da0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
20db0 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f  the analysis sto
20dc0 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65  ps as soon as re
20dd0 67 28 50 31 29 20 65 72 72 6f 72 73 20 61 72 65  g(P1) errors are
20de0 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28   .** seen.  Reg(
20df0 50 31 29 20 69 73 20 75 70 64 61 74 65 64 20 77  P1) is updated w
20e00 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ith the number o
20e10 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69  f errors remaini
20e20 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f  ng..**.** The ro
20e30 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ot page numbers 
20e40 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e  of all tables in
20e50 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72   the database ar
20e60 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f  e integer.** sto
20e70 72 65 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20  red in reg(P1), 
20e80 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50  reg(P1+1), reg(P
20e90 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72  1+2), ....  Ther
20ea0 65 20 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a  e are P2 tables.
20eb0 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20  ** total..**.** 
20ec0 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72  If P5 is not zer
20ed0 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73 20  o, the check is 
20ee0 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69  done on the auxi
20ef0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a  liary database.*
20f00 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20  * file, not the 
20f10 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
20f20 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  le..**.** This o
20f30 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f  pcode is used to
20f40 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69   implement the i
20f50 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70  ntegrity_check p
20f60 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ragma..*/.case O
20f70 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b  P_IntegrityCk: {
20f80 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20  .  int nRoot;   
20f90 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20fa0 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e  tables to check.
20fb0 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f    (Number of roo
20fc0 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69  t pages.) */.  i
20fd0 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f  nt *aRoot;     /
20fe0 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70  * Array of rootp
20ff0 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20  age numbers for 
21000 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65  tables to be che
21010 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b  cked */.  int j;
21020 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
21030 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
21040 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f  nt nErr;       /
21050 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
21060 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20  rs reported */. 
21070 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20   char *z;       
21080 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
21090 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a  error report */.
210a0 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20    Mem *pnErr;   
210b0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65    /* Register ke
210c0 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65  eping track of e
210d0 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20  rrors remaining 
210e0 2a 2f 0a 20 20 0a 20 20 6e 52 6f 6f 74 20 3d 20  */.  .  nRoot = 
210f0 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
21100 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20  t( nRoot>0 );.  
21110 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33 44  aRoot = sqlite3D
21120 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73  bMallocRaw(db, s
21130 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f 6f  izeof(int)*(nRoo
21140 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20 61 52  t+1) );.  if( aR
21150 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  oot==0 ) goto no
21160 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  _mem;.  assert( 
21170 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
21180 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
21190 0a 20 20 70 6e 45 72 72 20 3d 20 26 70 2d 3e 61  .  pnErr = &p->a
211a0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
211b0 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e  assert( (pnErr->
211c0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
211d0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
211e0 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26   (pnErr->flags &
211f0 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
21200 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  ob))==0 );.  pIn
21210 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  1 = &p->aMem[pOp
21220 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30  ->p1];.  for(j=0
21230 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b  ; j<nRoot; j++){
21240 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20  .    aRoot[j] = 
21250 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
21260 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20  lue(&pIn1[j]);. 
21270 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20   }.  aRoot[j] = 
21280 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
21290 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p5<db->nDb );.
212a0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
212b0 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f  reeMask & (1<<pO
212c0 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20 20  p->p5))!=0 );.  
212d0 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  z = sqlite3Btree
212e0 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28 64  IntegrityCheck(d
212f0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e  b->aDb[pOp->p5].
21300 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f  pBt, aRoot, nRoo
21310 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
21320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21330 20 20 20 20 70 6e 45 72 72 2d 3e 75 2e 69 2c 20      pnErr->u.i, 
21340 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65  &nErr);.  sqlite
21350 33 44 62 46 72 65 65 28 64 62 2c 20 61 52 6f 6f  3DbFree(db, aRoo
21360 74 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69  t);.  pnErr->u.i
21370 20 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69   -= nErr;.  sqli
21380 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
21390 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e  l(pIn1);.  if( n
213a0 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73  Err==0 ){.    as
213b0 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20  sert( z==0 );.  
213c0 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29  }else if( z==0 )
213d0 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
213e0 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  m;.  }else{.    
213f0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
21400 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31  tStr(pIn1, z, -1
21410 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73  , SQLITE_UTF8, s
21420 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20  qlite3_free);.  
21430 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  }.  UPDATE_MAX_B
21440 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20  LOBSIZE(pIn1);. 
21450 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
21460 67 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c  geEncoding(pIn1,
21470 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72   encoding);.  br
21480 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
21490 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
214a0 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a  EGRITY_CHECK */.
214b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 69 66 6f  ./* Opcode: Fifo
214c0 57 72 69 74 65 20 50 31 20 2a 20 2a 20 2a 20 2a  Write P1 * * * *
214d0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
214e0 20 69 6e 74 65 67 65 72 20 66 72 6f 6d 20 72 65   integer from re
214f0 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 74  gister P1 into t
21500 68 65 20 46 69 66 6f 2e 0a 2a 2f 0a 63 61 73 65  he Fifo..*/.case
21510 20 4f 50 5f 46 69 66 6f 57 72 69 74 65 3a 20 7b   OP_FifoWrite: {
21520 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
21530 2f 0a 20 20 70 2d 3e 73 46 69 66 6f 2e 64 62 20  /.  p->sFifo.db 
21540 3d 20 64 62 3b 0a 20 20 69 66 28 20 73 71 6c 69  = db;.  if( sqli
21550 74 65 33 56 64 62 65 46 69 66 6f 50 75 73 68 28  te3VdbeFifoPush(
21560 26 70 2d 3e 73 46 69 66 6f 2c 20 73 71 6c 69 74  &p->sFifo, sqlit
21570 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
21580 49 6e 31 29 29 3d 3d 53 51 4c 49 54 45 5f 4e 4f  In1))==SQLITE_NO
21590 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  MEM ){.    goto 
215a0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72  no_mem;.  }.  br
215b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
215c0 65 3a 20 46 69 66 6f 52 65 61 64 20 50 31 20 50  e: FifoRead P1 P
215d0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 74  2 * * *.**.** At
215e0 74 65 6d 70 74 20 74 6f 20 72 65 61 64 20 61 20  tempt to read a 
215f0 73 69 6e 67 6c 65 20 69 6e 74 65 67 65 72 20 66  single integer f
21600 72 6f 6d 20 74 68 65 20 46 69 66 6f 2e 20 20 53  rom the Fifo.  S
21610 74 6f 72 65 20 74 68 61 74 0a 2a 2a 20 69 6e 74  tore that.** int
21620 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
21630 20 50 31 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 74   P1..** .** If t
21640 68 65 20 46 69 66 6f 20 69 73 20 65 6d 70 74 79  he Fifo is empty
21650 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2f 0a   jump to P2..*/.
21660 63 61 73 65 20 4f 50 5f 46 69 66 6f 52 65 61 64  case OP_FifoRead
21670 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  : {         /* j
21680 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46  ump */.  CHECK_F
21690 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
216a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
216b0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  0 && pOp->p1<=p-
216c0 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20  >nMem );.  pOut 
216d0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
216e0 70 31 5d 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  p1];.  MemSetTyp
216f0 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
21700 49 6e 74 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  Int);.  if( sqli
21710 74 65 33 56 64 62 65 46 69 66 6f 50 6f 70 28 26  te3VdbeFifoPop(&
21720 70 2d 3e 73 46 69 66 6f 2c 20 26 70 4f 75 74 2d  p->sFifo, &pOut-
21730 3e 75 2e 69 29 3d 3d 53 51 4c 49 54 45 5f 44 4f  >u.i)==SQLITE_DO
21740 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  NE ){.    pc = p
21750 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
21760 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
21770 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
21780 54 52 49 47 47 45 52 0a 2f 2a 20 4f 70 63 6f 64  TRIGGER./* Opcod
21790 65 3a 20 43 6f 6e 74 65 78 74 50 75 73 68 20 2a  e: ContextPush *
217a0 20 2a 20 2a 20 0a 2a 2a 0a 2a 2a 20 53 61 76 65   * * .**.** Save
217b0 20 74 68 65 20 63 75 72 72 65 6e 74 20 56 64 62   the current Vdb
217c0 65 20 63 6f 6e 74 65 78 74 20 73 75 63 68 20 74  e context such t
217d0 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
217e0 73 74 6f 72 65 64 20 62 79 20 61 20 43 6f 6e 74  stored by a Cont
217f0 65 78 74 50 6f 70 0a 2a 2a 20 6f 70 63 6f 64 65  extPop.** opcode
21800 2e 20 54 68 65 20 63 6f 6e 74 65 78 74 20 73 74  . The context st
21810 6f 72 65 73 20 74 68 65 20 6c 61 73 74 20 69 6e  ores the last in
21820 73 65 72 74 20 72 6f 77 20 69 64 2c 20 74 68 65  sert row id, the
21830 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   last statement 
21840 63 68 61 6e 67 65 0a 2a 2a 20 63 6f 75 6e 74 2c  change.** count,
21850 20 61 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74   and the current
21860 20 73 74 61 74 65 6d 65 6e 74 20 63 68 61 6e 67   statement chang
21870 65 20 63 6f 75 6e 74 2e 0a 2a 2f 0a 63 61 73 65  e count..*/.case
21880 20 4f 50 5f 43 6f 6e 74 65 78 74 50 75 73 68 3a   OP_ContextPush:
21890 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 2d 3e   {.  int i = p->
218a0 63 6f 6e 74 65 78 74 53 74 61 63 6b 54 6f 70 2b  contextStackTop+
218b0 2b 3b 0a 20 20 43 6f 6e 74 65 78 74 20 2a 70 43  +;.  Context *pC
218c0 6f 6e 74 65 78 74 3b 0a 0a 20 20 61 73 73 65 72  ontext;..  asser
218d0 74 28 20 69 3e 3d 30 20 29 3b 0a 20 20 2f 2a 20  t( i>=0 );.  /* 
218e0 46 49 58 20 4d 45 3a 20 54 68 69 73 20 73 68 6f  FIX ME: This sho
218f0 75 6c 64 20 62 65 20 61 6c 6c 6f 63 61 74 65 64  uld be allocated
21900 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
21910 76 64 62 65 20 61 74 20 63 6f 6d 70 69 6c 65 2d  vdbe at compile-
21920 74 69 6d 65 20 2a 2f 0a 20 20 69 66 28 20 69 3e  time */.  if( i>
21930 3d 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b  =p->contextStack
21940 44 65 70 74 68 20 29 7b 0a 20 20 20 20 70 2d 3e  Depth ){.    p->
21950 63 6f 6e 74 65 78 74 53 74 61 63 6b 44 65 70 74  contextStackDept
21960 68 20 3d 20 69 2b 31 3b 0a 20 20 20 20 70 2d 3e  h = i+1;.    p->
21970 63 6f 6e 74 65 78 74 53 74 61 63 6b 20 3d 20 73  contextStack = s
21980 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f  qlite3DbReallocO
21990 72 46 72 65 65 28 64 62 2c 20 70 2d 3e 63 6f 6e  rFree(db, p->con
219a0 74 65 78 74 53 74 61 63 6b 2c 0a 20 20 20 20 20  textStack,.     
219b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219d0 20 20 20 20 20 73 69 7a 65 6f 66 28 43 6f 6e 74       sizeof(Cont
219e0 65 78 74 29 2a 28 69 2b 31 29 29 3b 0a 20 20 20  ext)*(i+1));.   
219f0 20 69 66 28 20 70 2d 3e 63 6f 6e 74 65 78 74 53   if( p->contextS
21a00 74 61 63 6b 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  tack==0 ) goto n
21a10 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 43 6f  o_mem;.  }.  pCo
21a20 6e 74 65 78 74 20 3d 20 26 70 2d 3e 63 6f 6e 74  ntext = &p->cont
21a30 65 78 74 53 74 61 63 6b 5b 69 5d 3b 0a 20 20 70  extStack[i];.  p
21a40 43 6f 6e 74 65 78 74 2d 3e 6c 61 73 74 52 6f 77  Context->lastRow
21a50 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
21a60 69 64 3b 0a 20 20 70 43 6f 6e 74 65 78 74 2d 3e  id;.  pContext->
21a70 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68  nChange = p->nCh
21a80 61 6e 67 65 3b 0a 20 20 70 43 6f 6e 74 65 78 74  ange;.  pContext
21a90 2d 3e 73 46 69 66 6f 20 3d 20 70 2d 3e 73 46 69  ->sFifo = p->sFi
21aa0 66 6f 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  fo;.  sqlite3Vdb
21ab0 65 46 69 66 6f 49 6e 69 74 28 26 70 2d 3e 73 46  eFifoInit(&p->sF
21ac0 69 66 6f 2c 20 64 62 29 3b 0a 20 20 62 72 65 61  ifo, db);.  brea
21ad0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
21ae0 20 43 6f 6e 74 65 78 74 50 6f 70 20 2a 20 2a 20   ContextPop * * 
21af0 2a 20 0a 2a 2a 0a 2a 2a 20 52 65 73 74 6f 72 65  * .**.** Restore
21b00 20 74 68 65 20 56 64 62 65 20 63 6f 6e 74 65 78   the Vdbe contex
21b10 74 20 74 6f 20 74 68 65 20 73 74 61 74 65 20 69  t to the state i
21b20 74 20 77 61 73 20 69 6e 20 77 68 65 6e 20 63 6f  t was in when co
21b30 6e 74 65 78 74 50 75 73 68 20 77 61 73 20 6c 61  ntextPush was la
21b40 73 74 0a 2a 2a 20 65 78 65 63 75 74 65 64 2e 20  st.** executed. 
21b50 54 68 65 20 63 6f 6e 74 65 78 74 20 73 74 6f 72  The context stor
21b60 65 73 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65  es the last inse
21b70 72 74 20 72 6f 77 20 69 64 2c 20 74 68 65 20 6c  rt row id, the l
21b80 61 73 74 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  ast statement.**
21b90 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 2c 20 61   change count, a
21ba0 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  nd the current s
21bb0 74 61 74 65 6d 65 6e 74 20 63 68 61 6e 67 65 20  tatement change 
21bc0 63 6f 75 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  count..*/.case O
21bd0 50 5f 43 6f 6e 74 65 78 74 50 6f 70 3a 20 7b 0a  P_ContextPop: {.
21be0 20 20 43 6f 6e 74 65 78 74 20 2a 70 43 6f 6e 74    Context *pCont
21bf0 65 78 74 20 3d 20 26 70 2d 3e 63 6f 6e 74 65 78  ext = &p->contex
21c00 74 53 74 61 63 6b 5b 2d 2d 70 2d 3e 63 6f 6e 74  tStack[--p->cont
21c10 65 78 74 53 74 61 63 6b 54 6f 70 5d 3b 0a 20 20  extStackTop];.  
21c20 61 73 73 65 72 74 28 20 70 2d 3e 63 6f 6e 74 65  assert( p->conte
21c30 78 74 53 74 61 63 6b 54 6f 70 3e 3d 30 20 29 3b  xtStackTop>=0 );
21c40 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64  .  db->lastRowid
21c50 20 3d 20 70 43 6f 6e 74 65 78 74 2d 3e 6c 61 73   = pContext->las
21c60 74 52 6f 77 69 64 3b 0a 20 20 70 2d 3e 6e 43 68  tRowid;.  p->nCh
21c70 61 6e 67 65 20 3d 20 70 43 6f 6e 74 65 78 74 2d  ange = pContext-
21c80 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 73 71 6c 69  >nChange;.  sqli
21c90 74 65 33 56 64 62 65 46 69 66 6f 43 6c 65 61 72  te3VdbeFifoClear
21ca0 28 26 70 2d 3e 73 46 69 66 6f 29 3b 0a 20 20 70  (&p->sFifo);.  p
21cb0 2d 3e 73 46 69 66 6f 20 3d 20 70 43 6f 6e 74 65  ->sFifo = pConte
21cc0 78 74 2d 3e 73 46 69 66 6f 3b 0a 20 20 62 72 65  xt->sFifo;.  bre
21cd0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
21ce0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21cf0 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a  MIT_TRIGGER */..
21d00 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21d10 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
21d20 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d  T./* Opcode: Mem
21d30 4d 61 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Max P1 P2 * * *.
21d40 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 76 61  **.** Set the va
21d50 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
21d60 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75  P1 to the maximu
21d70 6d 20 6f 66 20 69 74 73 20 63 75 72 72 65 6e 74  m of its current
21d80 20 76 61 6c 75 65 0a 2a 2a 20 61 6e 64 20 74 68   value.** and th
21d90 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
21da0 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
21db0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  is instruction t
21dc0 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69  hrows an error i
21dd0 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
21de0 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c  l is not initial
21df0 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  ly.** an integer
21e00 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d  ..*/.case OP_Mem
21e10 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Max: {        /*
21e20 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 73   in1, in2 */.  s
21e30 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
21e40 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
21e50 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
21e60 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b  ntegerify(pIn2);
21e70 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
21e80 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20  <pIn2->u.i){.   
21e90 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e   pIn1->u.i = pIn
21ea0 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72  2->u.i;.  }.  br
21eb0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
21ec0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
21ed0 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f  OINCREMENT */../
21ee0 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20  * Opcode: IfPos 
21ef0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
21f00 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f  * If the value o
21f10 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
21f20 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20 6a   1 or greater, j
21f30 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
21f40 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74   It is illegal t
21f50 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72  o use this instr
21f60 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69  uction on a regi
21f70 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a  ster that does.*
21f80 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  * not contain an
21f90 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73   integer.  An as
21fa0 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69  sertion fault wi
21fb0 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75  ll result if you
21fc0 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   try..*/.case OP
21fd0 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20 20  _IfPos: {       
21fe0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
21ff0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
22000 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
22010 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
22020 69 3e 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d  i>0 ){.     pc =
22030 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
22040 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
22050 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50   Opcode: IfNeg P
22060 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
22070 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66   If the value of
22080 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
22090 6c 65 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20  less than zero, 
220a0 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a  jump to P2. .**.
220b0 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
220c0 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73   to use this ins
220d0 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65  truction on a re
220e0 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73  gister that does
220f0 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  .** not contain 
22100 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20  an integer.  An 
22110 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20  assertion fault 
22120 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79  will result if y
22130 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20  ou try..*/.case 
22140 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20  OP_IfNeg: {     
22150 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
22160 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  */.  assert( pIn
22170 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
22180 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e   );.  if( pIn1->
22190 75 2e 69 3c 30 20 29 7b 0a 20 20 20 20 20 70 63  u.i<0 ){.     pc
221a0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
221b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
221c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 5a 65 72  /* Opcode: IfZer
221d0 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
221e0 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
221f0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
22200 69 73 20 65 78 61 63 74 6c 79 20 30 2c 20 6a 75  is exactly 0, ju
22210 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a  mp to P2. .**.**
22220 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74   It is illegal t
22230 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72  o use this instr
22240 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69  uction on a regi
22250 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a  ster that does.*
22260 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  * not contain an
22270 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73   integer.  An as
22280 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69  sertion fault wi
22290 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75  ll result if you
222a0 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   try..*/.case OP
222b0 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  _IfZero: {      
222c0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
222d0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  /.  assert( pIn1
222e0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
222f0 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
22300 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20 70 63  .i==0 ){.     pc
22310 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
22320 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
22330 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74  /* Opcode: AggSt
22340 65 70 20 2a 20 50 32 20 50 33 20 50 34 20 50 35  ep * P2 P3 P4 P5
22350 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
22360 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
22370 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
22380 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74  e.  The.** funct
22390 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d  ion has P5 argum
223a0 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20  ents.   P4 is a 
223b0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46  pointer to the F
223c0 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74  uncDef.** struct
223d0 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69  ure that specifi
223e0 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  es the function.
223f0 20 20 55 73 65 20 72 65 67 69 73 74 65 72 0a 2a    Use register.*
22400 2a 20 50 33 20 61 73 20 74 68 65 20 61 63 63 75  * P3 as the accu
22410 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  mulator..**.** T
22420 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  he P5 arguments 
22430 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  are taken from r
22440 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69  egister P2 and i
22450 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  ts.** successors
22460 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
22470 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 20  Step: {.  int n 
22480 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 69 6e 74  = pOp->p5;.  int
22490 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 2c   i;.  Mem *pMem,
224a0 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69 74 65   *pRec;.  sqlite
224b0 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20  3_context ctx;. 
224c0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
224d0 2a 61 70 56 61 6c 3b 0a 0a 20 20 61 73 73 65 72  *apVal;..  asser
224e0 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65  t( n>=0 );.  pRe
224f0 63 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  c = &p->aMem[pOp
22500 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d  ->p2];.  apVal =
22510 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73   p->apArg;.  ass
22520 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d  ert( apVal || n=
22530 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  =0 );.  for(i=0;
22540 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b   i<n; i++, pRec+
22550 2b 29 7b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d  +){.    apVal[i]
22560 20 3d 20 70 52 65 63 3b 0a 20 20 20 20 73 74 6f   = pRec;.    sto
22570 72 65 54 79 70 65 49 6e 66 6f 28 70 52 65 63 2c  reTypeInfo(pRec,
22580 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 7d 0a   encoding);.  }.
22590 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f    ctx.pFunc = pO
225a0 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61  p->p4.pFunc;.  a
225b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
225c0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
225d0 6e 4d 65 6d 20 29 3b 0a 20 20 63 74 78 2e 70 4d  nMem );.  ctx.pM
225e0 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26 70 2d 3e  em = pMem = &p->
225f0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
22600 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63 74   pMem->n++;.  ct
22610 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  x.s.flags = MEM_
22620 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a 20  Null;.  ctx.s.z 
22630 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61  = 0;.  ctx.s.zMa
22640 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e  lloc = 0;.  ctx.
22650 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74  s.xDel = 0;.  ct
22660 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63  x.s.db = db;.  c
22670 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a  tx.isError = 0;.
22680 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 30 3b    ctx.pColl = 0;
22690 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63  .  if( ctx.pFunc
226a0 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
226b0 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29  _FUNC_NEEDCOLL )
226c0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
226d0 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20  p>p->aOp );.    
226e0 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
226f0 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
22700 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  EQ );.    assert
22710 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
22720 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a  ==OP_CollSeq );.
22730 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20      ctx.pColl = 
22740 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c  pOp[-1].p4.pColl
22750 3b 0a 20 20 7d 0a 20 20 28 63 74 78 2e 70 46 75  ;.  }.  (ctx.pFu
22760 6e 63 2d 3e 78 53 74 65 70 29 28 26 63 74 78 2c  nc->xStep)(&ctx,
22770 20 6e 2c 20 61 70 56 61 6c 29 3b 0a 20 20 69 66   n, apVal);.  if
22780 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b  ( ctx.isError ){
22790 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
227a0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
227b0 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
227c0 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
227d0 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72 63  &ctx.s));.    rc
227e0 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a   = ctx.isError;.
227f0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
22800 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78  eMemRelease(&ctx
22810 2e 73 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .s);.  break;.}.
22820 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46  ./* Opcode: AggF
22830 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20  inal P1 P2 * P4 
22840 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  *.**.** Execute 
22850 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75  the finalizer fu
22860 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
22870 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a  gregate.  P1 is.
22880 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  ** the memory lo
22890 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74  cation that is t
228a0 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66  he accumulator f
228b0 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65  or the aggregate
228c0 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
228d0 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
228e0 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73  ments that the s
228f0 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b  tep function tak
22900 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20  es and.** P4 is 
22910 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
22920 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69   FuncDef for thi
22930 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65  s function.  The
22940 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20   P2.** argument 
22950 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74  is not used by t
22960 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20  his opcode.  It 
22970 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f  is only there to
22980 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a   disambiguate.**
22990 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20   functions that 
229a0 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67  can take varying
229b0 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75   numbers of argu
229c0 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50  ments.  The.** P
229d0 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e  4 argument is on
229e0 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68  ly needed for th
229f0 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73  e degenerate cas
22a00 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73  e where.** the s
22a10 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  tep function was
22a20 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
22a30 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  called..*/.case 
22a40 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20  OP_AggFinal: {. 
22a50 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73   Mem *pMem;.  as
22a60 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
22a70 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
22a80 4d 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20  Mem );.  pMem = 
22a90 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
22aa0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d  ];.  assert( (pM
22ab0 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45  em->flags & ~(ME
22ac0 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29  M_Null|MEM_Agg))
22ad0 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
22ae0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61  lite3VdbeMemFina
22af0 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e  lize(pMem, pOp->
22b00 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28  p4.pFunc);.  if(
22b10 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f   rc==SQLITE_ERRO
22b20 52 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  R ){.    sqlite3
22b30 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
22b40 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
22b50 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
22b60 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a  ext(pMem));.  }.
22b70 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
22b80 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d  ngeEncoding(pMem
22b90 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55  , encoding);.  U
22ba0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
22bb0 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20  ZE(pMem);.  if( 
22bc0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
22bd0 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20  oBig(pMem) ){.  
22be0 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
22bf0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
22c00 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
22c10 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d  LITE_OMIT_VACUUM
22c20 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
22c30 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48  LITE_OMIT_ATTACH
22c40 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63  )./* Opcode: Vac
22c50 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  uum * * * * *.**
22c60 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65  .** Vacuum the e
22c70 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e 20  ntire database. 
22c80 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c   This opcode wil
22c90 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20 76 69  l cause other vi
22ca0 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65  rtual.** machine
22cb0 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 20  s to be created 
22cc0 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61 79  and run.  It may
22cd0 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 66   not be called f
22ce0 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20  rom within.** a 
22cf0 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a  transaction..*/.
22d00 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20  case OP_Vacuum: 
22d10 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  {.  if( sqlite3S
22d20 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67  afetyOff(db) ) g
22d30 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
22d40 5f 6d 69 73 75 73 65 3b 20 0a 20 20 72 63 20 3d  _misuse; .  rc =
22d50 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
22d60 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  m(&p->zErrMsg, d
22d70 62 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  b);.  if( sqlite
22d80 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20  3SafetyOn(db) ) 
22d90 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
22da0 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 62 72 65 61  o_misuse;.  brea
22db0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
22dc0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
22dd0 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
22de0 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63  )./* Opcode: Inc
22df0 72 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20  rVacuum P1 P2 * 
22e00 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72  * *.**.** Perfor
22e10 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20  m a single step 
22e20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74  of the increment
22e30 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64  al vacuum proced
22e40 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31  ure on.** the P1
22e50 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68   database. If th
22e60 65 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e  e vacuum has fin
22e70 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69  ished, jump to i
22e80 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32  nstruction.** P2
22e90 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c  . Otherwise, fal
22ea0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
22eb0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
22ec0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  n..*/.case OP_In
22ed0 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20  crVacuum: {     
22ee0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
22ef0 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61  Btree *pBt;..  a
22f00 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
22f10 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
22f20 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
22f30 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
22f40 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21  & (1<<pOp->p1))!
22f50 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62  =0 );.  pBt = db
22f60 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
22f70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  Bt;.  rc = sqlit
22f80 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75  e3BtreeIncrVacuu
22f90 6d 28 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63  m(pBt);.  if( rc
22fa0 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b  ==SQLITE_DONE ){
22fb0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
22fc0 32 20 2d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20  2 - 1;.    rc = 
22fd0 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20  SQLITE_OK;.  }. 
22fe0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
22ff0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70  ../* Opcode: Exp
23000 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ire P1 * * * *.*
23010 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f  *.** Cause preco
23020 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74  mpiled statement
23030 73 20 74 6f 20 62 65 63 6f 6d 65 20 65 78 70 69  s to become expi
23040 72 65 64 2e 20 41 6e 20 65 78 70 69 72 65 64 20  red. An expired 
23050 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66 61 69  statement.** fai
23060 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  ls with an error
23070 20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54 45 5f   code of SQLITE_
23080 53 43 48 45 4d 41 20 69 66 20 69 74 20 69 73 20  SCHEMA if it is 
23090 65 76 65 72 20 65 78 65 63 75 74 65 64 20 0a 2a  ever executed .*
230a0 2a 20 28 76 69 61 20 73 71 6c 69 74 65 33 5f 73  * (via sqlite3_s
230b0 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a 2a 20 49  tep())..** .** I
230c0 66 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20  f P1 is 0, then 
230d0 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  all SQL statemen
230e0 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65  ts become expire
230f0 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  d. If P1 is non-
23100 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e  zero,.** then on
23110 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  ly the currently
23120 20 65 78 65 63 75 74 69 6e 67 20 73 74 61 74 65   executing state
23130 6d 65 6e 74 20 69 73 20 61 66 66 65 63 74 65 64  ment is affected
23140 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78  . .*/.case OP_Ex
23150 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70  pire: {.  if( !p
23160 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
23170 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
23180 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
23190 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
231a0 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
231b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
231c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
231d0 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
231e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c  ./* Opcode: Tabl
231f0 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50  eLock P1 P2 P3 P
23200 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e  4 *.**.** Obtain
23210 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72   a lock on a par
23220 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54  ticular table. T
23230 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
23240 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65  is only used whe
23250 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d  n.** the shared-
23260 63 61 63 68 65 20 66 65 61 74 75 72 65 20 69 73  cache feature is
23270 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a   enabled. .**.**
23280 20 49 66 20 50 31 20 69 73 20 20 74 68 65 20 69   If P1 is  the i
23290 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
232a0 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e  base in sqlite3.
232b0 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74  aDb[] of the dat
232c0 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63  abase.** on whic
232d0 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63  h the lock is ac
232e0 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c  quired.  A readl
232f0 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ock is obtained 
23300 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61  if P3==0 or.** a
23310 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50   write lock if P
23320 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63  3==1..**.** P2 c
23330 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74  ontains the root
23340 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62  -page of the tab
23350 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a  le to lock..**.*
23360 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20  * P4 contains a 
23370 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e  pointer to the n
23380 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
23390 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54   being locked. T
233a0 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75  his is only.** u
233b0 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  sed to generate 
233c0 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
233d0 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e   if the lock can
233e0 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e  not be obtained.
233f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c  .*/.case OP_Tabl
23400 65 4c 6f 63 6b 3a 20 7b 0a 20 20 69 6e 74 20 70  eLock: {.  int p
23410 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20  1 = pOp->p1; .  
23420 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d  u8 isWriteLock =
23430 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
23440 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c  rt( p1>=0 && p1<
23450 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
23460 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
23470 73 6b 20 26 20 28 31 3c 3c 70 31 29 29 21 3d 30  sk & (1<<p1))!=0
23480 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
23490 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20  WriteLock==0 || 
234a0 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29  isWriteLock==1 )
234b0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
234c0 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64  BtreeLockTable(d
234d0 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20  b->aDb[p1].pBt, 
234e0 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65  pOp->p2, isWrite
234f0 4c 6f 63 6b 29 3b 0a 20 20 69 66 28 20 72 63 3d  Lock);.  if( rc=
23500 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29  =SQLITE_LOCKED )
23510 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
23520 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b   *z = pOp->p4.z;
23530 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
23540 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
23550 67 2c 20 64 62 2c 20 22 64 61 74 61 62 61 73 65  g, db, "database
23560 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64   table is locked
23570 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 7d 0a 20  : %s", z);.  }. 
23580 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
23590 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
235a0 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a  SHARED_CACHE */.
235b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
235c0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
235d0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65  E./* Opcode: VBe
235e0 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  gin * * * P4 *.*
235f0 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
23600 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73   pointer to an s
23610 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
23620 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61  cture. If so, ca
23630 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69  ll the .** xBegi
23640 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61  n method for tha
23650 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  t table..**.** A
23660 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20  lso, whether or 
23670 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20 63  not P4 is set, c
23680 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20 69  heck that this i
23690 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c  s not being call
236a0 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69  ed from.** withi
236b0 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20  n a callback to 
236c0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
236d0 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20  xSync() method. 
236e0 49 66 20 69 74 20 69 73 2c 20 73 65 74 20 74 68  If it is, set th
236f0 65 0a 2a 2a 20 65 72 72 6f 72 20 63 6f 64 65 20  e.** error code 
23700 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  to SQLITE_LOCKED
23710 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65  ..*/.case OP_VBe
23720 67 69 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  gin: {.  sqlite3
23730 5f 76 74 61 62 20 2a 70 56 74 61 62 20 3d 20 70  _vtab *pVtab = p
23740 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20  Op->p4.pVtab;.  
23750 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
23760 42 65 67 69 6e 28 64 62 2c 20 70 56 74 61 62 29  Begin(db, pVtab)
23770 3b 0a 20 20 69 66 28 20 70 56 74 61 62 20 29 7b  ;.  if( pVtab ){
23780 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
23790 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
237a0 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
237b0 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72  sg = pVtab->zErr
237c0 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e  Msg;.    pVtab->
237d0 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 7d  zErrMsg = 0;.  }
237e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
237f0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
23800 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
23810 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
23820 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
23830 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
23840 43 72 65 61 74 65 20 50 31 20 2a 20 2a 20 50 34  Create P1 * * P4
23850 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74   *.**.** P4 is t
23860 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72  he name of a vir
23870 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61  tual table in da
23880 74 61 62 61 73 65 20 50 31 2e 20 43 61 6c 6c 20  tabase P1. Call 
23890 74 68 65 20 78 43 72 65 61 74 65 20 6d 65 74 68  the xCreate meth
238a0 6f 64 0a 2a 2a 20 66 6f 72 20 74 68 61 74 20 74  od.** for that t
238b0 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
238c0 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 72 63  _VCreate: {.  rc
238d0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61   = sqlite3VtabCa
238e0 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70  llCreate(db, pOp
238f0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  ->p1, pOp->p4.z,
23900 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20   &p->zErrMsg);. 
23910 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
23920 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
23930 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
23940 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
23950 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
23960 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65  E./* Opcode: VDe
23970 73 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20  stroy P1 * * P4 
23980 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68  *.**.** P4 is th
23990 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74  e name of a virt
239a0 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74  ual table in dat
239b0 61 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20  abase P1.  Call 
239c0 74 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74  the xDestroy met
239d0 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74  hod.** of that t
239e0 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
239f0 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70  _VDestroy: {.  p
23a00 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
23a10 20 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   2;.  rc = sqlit
23a20 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f  e3VtabCallDestro
23a30 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  y(db, pOp->p1, p
23a40 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e  Op->p4.z);.  p->
23a50 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30  inVtabMethod = 0
23a60 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
23a70 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
23a80 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
23a90 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
23aa0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
23ab0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
23ac0 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20  VOpen P1 * * P4 
23ad0 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
23ae0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
23af0 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
23b00 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
23b10 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
23b20 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20   P1 is a cursor 
23b30 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70  number.  This op
23b40 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72  code opens a cur
23b50 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74 75  sor to the virtu
23b60 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20  al.** table and 
23b70 73 74 6f 72 65 73 20 74 68 61 74 20 63 75 72 73  stores that curs
23b80 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73  or in P1..*/.cas
23b90 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20  e OP_VOpen: {.  
23ba0 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 30  Cursor *pCur = 0
23bb0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
23bc0 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75  _cursor *pVtabCu
23bd0 72 73 6f 72 20 3d 20 30 3b 0a 0a 20 20 73 71 6c  rsor = 0;..  sql
23be0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
23bf0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
23c00 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ;.  sqlite3_modu
23c10 6c 65 20 2a 70 4d 6f 64 75 6c 65 20 3d 20 28 73  le *pModule = (s
23c20 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29  qlite3_module *)
23c30 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
23c40 0a 20 20 61 73 73 65 72 74 28 70 56 74 61 62 20  .  assert(pVtab 
23c50 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 69  && pModule);.  i
23c60 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
23c70 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61  Off(db) ) goto a
23c80 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
23c90 73 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75  se;.  rc = pModu
23ca0 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c  le->xOpen(pVtab,
23cb0 20 26 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a   &pVtabCursor);.
23cc0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
23cd0 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
23ce0 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  .  p->zErrMsg = 
23cf0 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a  pVtab->zErrMsg;.
23d00 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67    pVtab->zErrMsg
23d10 20 3d 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69   = 0;.  if( sqli
23d20 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
23d30 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
23d40 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 69 66  _to_misuse;.  if
23d50 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20  ( SQLITE_OK==rc 
23d60 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ){.    /* Initia
23d70 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61  lize sqlite3_vta
23d80 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c  b_cursor base cl
23d90 61 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62  ass */.    pVtab
23da0 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20  Cursor->pVtab = 
23db0 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49  pVtab;..    /* I
23dc0 6e 69 74 69 61 6c 69 73 65 20 76 64 62 65 20 63  nitialise vdbe c
23dd0 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a  ursor object */.
23de0 20 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63      pCur = alloc
23df0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
23e00 2d 3e 70 31 2c 20 26 70 4f 70 5b 2d 31 5d 2c 20  ->p1, &pOp[-1], 
23e10 2d 31 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20  -1, 0);.    if( 
23e20 70 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43  pCur ){.      pC
23e30 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
23e40 3d 20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20  = pVtabCursor;. 
23e50 20 20 20 20 20 70 43 75 72 2d 3e 70 4d 6f 64 75       pCur->pModu
23e60 6c 65 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72  le = pVtabCursor
23e70 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  ->pVtab->pModule
23e80 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
23e90 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69     db->mallocFai
23ea0 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 70  led = 1;.      p
23eb0 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70  Module->xClose(p
23ec0 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20  VtabCursor);.   
23ed0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
23ee0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
23ef0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
23f00 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
23f10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
23f20 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
23f30 6f 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20  ode: VFilter P1 
23f40 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
23f50 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20   P1 is a cursor 
23f60 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70  opened using VOp
23f70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64  en.  P2 is an ad
23f80 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f  dress to jump to
23f90 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65   if.** the filte
23fa0 72 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69  red result set i
23fb0 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50  s empty..**.** P
23fc0 34 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c  4 is either NULL
23fd0 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61   or a string tha
23fe0 74 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20  t was generated 
23ff0 62 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65  by the xBestInde
24000 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74  x.** method of t
24010 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20  he module.  The 
24020 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
24030 66 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20  f the P4 string 
24040 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68  is left.** to th
24050 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  e module impleme
24060 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
24070 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
24080 65 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d  es the xFilter m
24090 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72  ethod on the vir
240a0 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69  tual table speci
240b0 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20  fied.** by P1.  
240c0 54 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72  The integer quer
240d0 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72  y plan parameter
240e0 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73   to xFilter is s
240f0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
24100 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65  r.** P3. Registe
24110 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68  r P3+1 stores th
24120 65 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72  e argc parameter
24130 20 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f   to be passed to
24140 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20   the.** xFilter 
24150 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72  method. Register
24160 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67  s P3+2..P3+1+arg
24170 63 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a  c are the argc.*
24180 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72  * additional par
24190 61 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72  ameters which ar
241a0 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78  e passed to.** x
241b0 46 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20  Filter as argv. 
241c0 52 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65  Register P3+2 be
241d0 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68  comes argv[0] wh
241e0 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69  en passed to xFi
241f0 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75  lter..**.** A ju
24200 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
24210 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73   if the result s
24220 65 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69  et after filteri
24230 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74  ng would be empt
24240 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46  y..*/.case OP_VF
24250 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75  ilter: {   /* ju
24260 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67  mp */.  int nArg
24270 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a  ;.  int iQuery;.
24280 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
24290 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
242a0 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 20 3d  .  Mem *pQuery =
242b0 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
242c0 33 5d 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63  3];.  Mem *pArgc
242d0 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20   = &pQuery[1];. 
242e0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
242f0 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f  rsor *pVtabCurso
24300 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
24310 62 20 2a 70 56 74 61 62 3b 0a 0a 20 20 43 75 72  b *pVtab;..  Cur
24320 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61  sor *pCur = p->a
24330 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 0a  pCsr[pOp->p1];..
24340 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
24350 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79  (pOp->p3, pQuery
24360 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  );.  assert( pCu
24370 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  r->pVtabCursor )
24380 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20  ;.  pVtabCursor 
24390 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
243a0 73 6f 72 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  sor;.  pVtab = p
243b0 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
243c0 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
243d0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a  Vtab->pModule;..
243e0 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e    /* Grab the in
243f0 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61  dex number and a
24400 72 67 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a  rgc parameters *
24410 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 51 75  /.  assert( (pQu
24420 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  ery->flags&MEM_I
24430 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d  nt)!=0 && pArgc-
24440 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20  >flags==MEM_Int 
24450 29 3b 0a 20 20 6e 41 72 67 20 3d 20 70 41 72 67  );.  nArg = pArg
24460 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79  c->u.i;.  iQuery
24470 20 3d 20 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a   = pQuery->u.i;.
24480 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
24490 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
244a0 2a 2f 0a 20 20 7b 0a 20 20 20 20 69 6e 74 20 72  */.  {.    int r
244b0 65 73 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20  es = 0;.    int 
244c0 69 3b 0a 20 20 20 20 4d 65 6d 20 2a 2a 61 70 41  i;.    Mem **apA
244d0 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
244e0 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c     for(i = 0; i<
244f0 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
24500 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41    apArg[i] = &pA
24510 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 20 20  rgc[i+1];.      
24520 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 61 70  storeTypeInfo(ap
24530 41 72 67 5b 69 5d 2c 20 30 29 3b 0a 20 20 20 20  Arg[i], 0);.    
24540 7d 0a 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  }..    if( sqlit
24550 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
24560 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
24570 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20  _to_misuse;.    
24580 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
24590 70 56 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 69  pVtab);.    p->i
245a0 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b  nVtabMethod = 1;
245b0 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  .    rc = pModul
245c0 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 74 61 62  e->xFilter(pVtab
245d0 43 75 72 73 6f 72 2c 20 69 51 75 65 72 79 2c 20  Cursor, iQuery, 
245e0 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c  pOp->p4.z, nArg,
245f0 20 61 70 41 72 67 29 3b 0a 20 20 20 20 70 2d 3e   apArg);.    p->
24600 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30  inVtabMethod = 0
24610 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  ;.    sqlite3DbF
24620 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
24630 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
24640 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72  Msg = pVtab->zEr
24650 72 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d  rMsg;.    pVtab-
24660 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  >zErrMsg = 0;.  
24670 20 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c    sqlite3VtabUnl
24680 6f 63 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a  ock(db, pVtab);.
24690 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
246a0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
246b0 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
246c0 6f 66 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  of(pVtabCursor);
246d0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73  .    }.    if( s
246e0 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
246f0 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
24700 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a  due_to_misuse;..
24710 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
24720 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
24730 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  2 - 1;.    }.  }
24740 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
24750 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a   = 0;..  break;.
24760 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
24770 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
24780 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
24790 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
247a0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
247b0 6f 64 65 3a 20 56 52 6f 77 69 64 20 50 31 20 50  ode: VRowid P1 P
247c0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74  2 * * *.**.** St
247d0 6f 72 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ore into registe
247e0 72 20 50 32 20 20 74 68 65 20 72 6f 77 69 64 20  r P2  the rowid 
247f0 6f 66 0a 2a 2a 20 74 68 65 20 76 69 72 74 75 61  of.** the virtua
24800 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  l-table that the
24810 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f   P1 cursor is po
24820 69 6e 74 69 6e 67 20 74 6f 2e 0a 2a 2f 0a 63 61  inting to..*/.ca
24830 73 65 20 4f 50 5f 56 52 6f 77 69 64 3a 20 7b 20  se OP_VRowid: { 
24840 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
24850 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
24860 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /.  sqlite3_vtab
24870 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
24880 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
24890 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 73 71 6c 69  *pModule;.  sqli
248a0 74 65 5f 69 6e 74 36 34 20 69 52 6f 77 3b 0a 20  te_int64 iRow;. 
248b0 20 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20   Cursor *pCur = 
248c0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
248d0 5d 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 43  ];..  assert( pC
248e0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
248f0 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
24900 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72  ullRow ){.    br
24910 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
24920 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
24930 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
24940 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
24950 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
24960 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77  t( pModule->xRow
24970 69 64 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  id );.  if( sqli
24980 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29  te3SafetyOff(db)
24990 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
249a0 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 72  e_to_misuse;.  r
249b0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  c = pModule->xRo
249c0 77 69 64 28 70 43 75 72 2d 3e 70 56 74 61 62 43  wid(pCur->pVtabC
249d0 75 72 73 6f 72 2c 20 26 69 52 6f 77 29 3b 0a 20  ursor, &iRow);. 
249e0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
249f0 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
24a00 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70    p->zErrMsg = p
24a10 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  Vtab->zErrMsg;. 
24a20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20   pVtab->zErrMsg 
24a30 3d 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  = 0;.  if( sqlit
24a40 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
24a50 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
24a60 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 4d 65 6d  to_misuse;.  Mem
24a70 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
24a80 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 70 4f  , MEM_Int);.  pO
24a90 75 74 2d 3e 75 2e 69 20 3d 20 69 52 6f 77 3b 0a  ut->u.i = iRow;.
24aa0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
24ab0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
24ac0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
24ad0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
24ae0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
24af0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43  LE./* Opcode: VC
24b00 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a  olumn P1 P2 P3 *
24b10 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74   *.**.** Store t
24b20 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
24b30 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a  P2-th column of.
24b40 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68  ** the row of th
24b50 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20  e virtual-table 
24b60 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20  that the .** P1 
24b70 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69  cursor is pointi
24b80 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73  ng to into regis
24b90 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
24ba0 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20  OP_VColumn: {.  
24bb0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
24bc0 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
24bd0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
24be0 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65  dule;.  Mem *pDe
24bf0 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  st;.  sqlite3_co
24c00 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a  ntext sContext;.
24c10 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 75 72 20  .  Cursor *pCur 
24c20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
24c30 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
24c40 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
24c50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
24c60 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
24c70 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
24c80 20 70 44 65 73 74 20 3d 20 26 70 2d 3e 61 4d 65   pDest = &p->aMe
24c90 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
24ca0 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  ( pCur->nullRow 
24cb0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
24cc0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65  beMemSetNull(pDe
24cd0 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  st);.    break;.
24ce0 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43    }.  pVtab = pC
24cf0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d  ur->pVtabCursor-
24d00 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
24d10 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
24d20 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
24d30 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29  odule->xColumn )
24d40 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e  ;.  memset(&sCon
24d50 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28  text, 0, sizeof(
24d60 73 43 6f 6e 74 65 78 74 29 29 3b 0a 0a 20 20 2f  sContext));..  /
24d70 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c  * The output cel
24d80 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61  l may already ha
24d90 76 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f  ve a buffer allo
24da0 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a  cated. Move.  **
24db0 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6e   the current con
24dc0 74 65 6e 74 73 20 74 6f 20 73 43 6f 6e 74 65 78  tents to sContex
24dd0 74 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74  t.s so in case t
24de0 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e  he user-function
24df0 20 0a 20 20 2a 2a 20 63 61 6e 20 75 73 65 20 74   .  ** can use t
24e00 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  he already alloc
24e10 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74  ated buffer inst
24e20 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e  ead of allocatin
24e30 67 20 61 20 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e  g a .  ** new on
24e40 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  e..  */.  sqlite
24e50 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 43  3VdbeMemMove(&sC
24e60 6f 6e 74 65 78 74 2e 73 2c 20 70 44 65 73 74 29  ontext.s, pDest)
24e70 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
24e80 61 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20  ag(&sContext.s, 
24e90 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 69 66  MEM_Null);..  if
24ea0 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
24eb0 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
24ec0 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
24ed0 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  e;.  rc = pModul
24ee0 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d  e->xColumn(pCur-
24ef0 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 73  >pVtabCursor, &s
24f00 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32  Context, pOp->p2
24f10 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  );.  sqlite3DbFr
24f20 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
24f30 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67  g);.  p->zErrMsg
24f40 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73   = pVtab->zErrMs
24f50 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72  g;.  pVtab->zErr
24f60 4d 73 67 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 43  Msg = 0;..  /* C
24f70 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f  opy the result o
24f80 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74  f the function t
24f90 6f 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65  o the P3 registe
24fa0 72 2e 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68  r. We.  ** do th
24fb0 69 73 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  is regardless of
24fc0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
24fd0 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 65 64  an error occured
24fe0 20 74 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a 20   to ensure any. 
24ff0 20 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f   ** dynamic allo
25000 63 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65  cation in sConte
25010 78 74 2e 73 20 28 61 20 4d 65 6d 20 73 74 72 75  xt.s (a Mem stru
25020 63 74 29 20 69 73 20 20 72 65 6c 65 61 73 65 64  ct) is  released
25030 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
25040 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
25050 6e 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20  ng(&sContext.s, 
25060 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47  encoding);.  REG
25070 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
25080 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 73  >p3, pDest);.  s
25090 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
250a0 65 28 70 44 65 73 74 2c 20 26 73 43 6f 6e 74 65  e(pDest, &sConte
250b0 78 74 2e 73 29 3b 0a 20 20 55 50 44 41 54 45 5f  xt.s);.  UPDATE_
250c0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65  MAX_BLOBSIZE(pDe
250d0 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69  st);..  if( sqli
250e0 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
250f0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  ){.    goto abor
25100 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
25110 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
25120 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
25130 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f  pDest) ){.    go
25140 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
25150 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
25160 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
25170 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
25180 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
25190 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
251a0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e  LE./* Opcode: VN
251b0 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ext P1 P2 * * *.
251c0 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69  **.** Advance vi
251d0 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74  rtual table P1 t
251e0 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69  o the next row i
251f0 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74  n its result set
25200 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20   and.** jump to 
25210 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
25220 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74   Or, if the virt
25230 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65  ual table has re
25240 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64  ached.** the end
25250 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73   of its result s
25260 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  et, then fall th
25270 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
25280 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
25290 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a  /.case OP_VNext:
252a0 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a   {   /* jump */.
252b0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
252c0 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
252d0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
252e0 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65  Module;.  int re
252f0 73 20 3d 20 30 3b 0a 0a 20 20 43 75 72 73 6f 72  s = 0;..  Cursor
25300 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73   *pCur = p->apCs
25310 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
25320 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61  sert( pCur->pVta
25330 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  bCursor );.  if(
25340 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29   pCur->nullRow )
25350 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  {.    break;.  }
25360 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d  .  pVtab = pCur-
25370 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56  >pVtabCursor->pV
25380 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
25390 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
253a0 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75  .  assert( pModu
253b0 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20  le->xNext );..  
253c0 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e  /* Invoke the xN
253d0 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20  ext() method of 
253e0 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72  the module. Ther
253f0 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20  e is no way for 
25400 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79  the.  ** underly
25410 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ing implementati
25420 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20  on to return an 
25430 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63  error if one occ
25440 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20  urs during.  ** 
25450 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64  xNext(). Instead
25460 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  , if an error oc
25470 63 75 72 73 2c 20 74 72 75 65 20 69 73 20 72 65  curs, true is re
25480 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69  turned (indicati
25490 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61  ng that .  ** da
254a0 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29  ta is available)
254b0 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63   and the error c
254c0 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77 68 65  ode returned whe
254d0 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a  n xColumn or.  *
254e0 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74  * some other met
254f0 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f  hod is next invo
25500 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20  ked on the save 
25510 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75  virtual table cu
25520 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  rsor..  */.  if(
25530 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
25540 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
25550 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
25560 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 4c  ;.  sqlite3VtabL
25570 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 70 2d  ock(pVtab);.  p-
25580 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
25590 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  1;.  rc = pModul
255a0 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 70  e->xNext(pCur->p
255b0 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 70  VtabCursor);.  p
255c0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
255d0 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46   0;.  sqlite3DbF
255e0 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
255f0 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73  sg);.  p->zErrMs
25600 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  g = pVtab->zErrM
25610 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72  sg;.  pVtab->zEr
25620 72 4d 73 67 20 3d 20 30 3b 0a 20 20 73 71 6c 69  rMsg = 0;.  sqli
25630 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62  te3VtabUnlock(db
25640 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
25650 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
25660 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75  .    res = pModu
25670 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70  le->xEof(pCur->p
25680 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d  VtabCursor);.  }
25690 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
256a0 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
256b0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
256c0 69 73 75 73 65 3b 0a 0a 20 20 69 66 28 20 21 72  isuse;..  if( !r
256d0 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  es ){.    /* If 
256e0 74 68 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a  there is data, j
256f0 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20  ump to P2 */.   
25700 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
25710 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
25720 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
25730 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
25740 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
25750 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
25760 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
25770 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20  ode: VRename P1 
25780 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
25790 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
257a0 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
257b0 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
257c0 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
257d0 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ure..** This opc
257e0 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
257f0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52  corresponding xR
25800 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68  ename method. Th
25810 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65  e value.** in re
25820 67 69 73 74 65 72 20 50 31 20 69 73 20 70 61 73  gister P1 is pas
25830 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65  sed as the zName
25840 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
25850 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e   xRename method.
25860 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e  .*/.case OP_VRen
25870 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ame: {.  sqlite3
25880 5f 76 74 61 62 20 2a 70 56 74 61 62 20 3d 20 70  _vtab *pVtab = p
25890 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20  Op->p4.pVtab;.  
258a0 4d 65 6d 20 2a 70 4e 61 6d 65 20 3d 20 26 70 2d  Mem *pName = &p-
258b0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
258c0 20 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d    assert( pVtab-
258d0 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d  >pModule->xRenam
258e0 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  e );.  REGISTER_
258f0 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
25900 4e 61 6d 65 29 3b 0a 0a 20 20 53 74 72 69 6e 67  Name);..  String
25910 69 66 79 28 70 4e 61 6d 65 2c 20 65 6e 63 6f 64  ify(pName, encod
25920 69 6e 67 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c  ing);..  if( sql
25930 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
25940 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
25950 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
25960 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
25970 70 56 74 61 62 29 3b 0a 20 20 72 63 20 3d 20 70  pVtab);.  rc = p
25980 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78  Vtab->pModule->x
25990 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e  Rename(pVtab, pN
259a0 61 6d 65 2d 3e 7a 29 3b 0a 20 20 73 71 6c 69 74  ame->z);.  sqlit
259b0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
259c0 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a  zErrMsg);.  p->z
259d0 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e  ErrMsg = pVtab->
259e0 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62  zErrMsg;.  pVtab
259f0 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20  ->zErrMsg = 0;. 
25a00 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
25a10 63 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20  ck(db, pVtab);. 
25a20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
25a30 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20  tyOn(db) ) goto 
25a40 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
25a50 75 73 65 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  use;..  break;.}
25a60 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
25a70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
25a80 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
25a90 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50 31 20  ode: VUpdate P1 
25aa0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
25ab0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
25ac0 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
25ad0 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73  ble object, an s
25ae0 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
25af0 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f  cture..** This o
25b00 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
25b10 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
25b20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e 20  xUpdate method. 
25b30 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  P2 values.** are
25b40 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f   contiguous memo
25b50 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69 6e  ry cells startin
25b60 67 20 61 74 20 50 33 20 74 6f 20 70 61 73 73 20  g at P3 to pass 
25b70 74 6f 20 74 68 65 20 78 55 70 64 61 74 65 20 0a  to the xUpdate .
25b80 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54  ** invocation. T
25b90 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
25ba0 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29 20 63  ster (P3+P2-1) c
25bb0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
25bc0 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65  e .** p2th eleme
25bd0 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76 20 61  nt of the argv a
25be0 72 72 61 79 20 70 61 73 73 65 64 20 74 6f 20 78  rray passed to x
25bf0 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  Update..**.** Th
25c00 65 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64  e xUpdate method
25c10 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54   will do a DELET
25c20 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54 20 6f  E or an INSERT o
25c30 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61  r both..** The a
25c40 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28  rgv[0] element (
25c50 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e 64  which correspond
25c60 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  s to memory cell
25c70 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20 72   P3).** is the r
25c80 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20 74 6f  owid of a row to
25c90 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61 72 67   delete.  If arg
25ca0 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65  v[0] is NULL the
25cb0 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f  n no .** deletio
25cc0 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65 20 61  n occurs.  The a
25cd0 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69  rgv[1] element i
25ce0 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  s the rowid of t
25cf0 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20  he new .** row. 
25d00 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e 55 4c   This can be NUL
25d10 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 69  L to have the vi
25d20 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65 6c 65  rtual table sele
25d30 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72  ct the new .** r
25d40 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c 66 2e  owid for itself.
25d50 20 20 54 68 65 20 73 75 62 73 65 71 75 65 6e 74    The subsequent
25d60 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65   elements in the
25d70 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a 20 74   array are .** t
25d80 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c  he values of col
25d90 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65 77 20  umns in the new 
25da0 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  row..**.** If P2
25db0 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65  ==1 then no inse
25dc0 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e  rt is performed.
25dd0 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74 68 65    argv[0] is the
25de0 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72   rowid of.** a r
25df0 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a  ow to delete..**
25e00 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f 6f 6c  .** P1 is a bool
25e10 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69 74 20  ean flag. If it 
25e20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65 20 61  is set to true a
25e30 6e 64 20 74 68 65 20 78 55 70 64 61 74 65 20 63  nd the xUpdate c
25e40 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65 73  all.** is succes
25e50 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65 20 76  sful, then the v
25e60 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
25e70 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e   sqlite3_last_in
25e80 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a  sert_rowid() .**
25e90 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76   is set to the v
25ea0 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 77 69  alue of the rowi
25eb0 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20 6a 75  d for the row ju
25ec0 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2f 0a  st inserted..*/.
25ed0 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a  case OP_VUpdate:
25ee0 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
25ef0 62 20 2a 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  b *pVtab = pOp->
25f00 70 34 2e 70 56 74 61 62 3b 0a 20 20 73 71 6c 69  p4.pVtab;.  sqli
25f10 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
25f20 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d  ule = (sqlite3_m
25f30 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70  odule *)pVtab->p
25f40 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41  Module;.  int nA
25f50 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  rg = pOp->p2;.  
25f60 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
25f70 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a  ype==P4_VTAB );.
25f80 20 20 69 66 28 20 70 4d 6f 64 75 6c 65 2d 3e 78    if( pModule->x
25f90 55 70 64 61 74 65 3d 3d 30 20 29 7b 0a 20 20 20  Update==0 ){.   
25fa0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
25fb0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
25fc0 62 2c 20 22 72 65 61 64 2d 6f 6e 6c 79 20 74 61  b, "read-only ta
25fd0 62 6c 65 22 29 3b 0a 20 20 20 20 72 63 20 3d 20  ble");.    rc = 
25fe0 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
25ff0 7d 65 6c 73 65 7b 0a 20 20 20 20 69 6e 74 20 69  }else{.    int i
26000 3b 0a 20 20 20 20 73 71 6c 69 74 65 5f 69 6e 74  ;.    sqlite_int
26010 36 34 20 72 6f 77 69 64 3b 0a 20 20 20 20 4d 65  64 rowid;.    Me
26020 6d 20 2a 2a 61 70 41 72 67 20 3d 20 70 2d 3e 61  m **apArg = p->a
26030 70 41 72 67 3b 0a 20 20 20 20 4d 65 6d 20 2a 70  pArg;.    Mem *p
26040 58 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  X = &p->aMem[pOp
26050 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69  ->p3];.    for(i
26060 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
26070 7b 0a 20 20 20 20 20 20 73 74 6f 72 65 54 79 70  {.      storeTyp
26080 65 49 6e 66 6f 28 70 58 2c 20 30 29 3b 0a 20 20  eInfo(pX, 0);.  
26090 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70      apArg[i] = p
260a0 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20  X;.      pX++;. 
260b0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c     }.    if( sql
260c0 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
260d0 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
260e0 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
260f0 20 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63    sqlite3VtabLoc
26100 6b 28 70 56 74 61 62 29 3b 0a 20 20 20 20 72 63  k(pVtab);.    rc
26110 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64   = pModule->xUpd
26120 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c  ate(pVtab, nArg,
26130 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b   apArg, &rowid);
26140 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
26150 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
26160 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
26170 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72  sg = pVtab->zErr
26180 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e  Msg;.    pVtab->
26190 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20  zErrMsg = 0;.   
261a0 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
261b0 63 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20  ck(db, pVtab);. 
261c0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61     if( sqlite3Sa
261d0 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
261e0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
261f0 69 73 75 73 65 3b 0a 20 20 20 20 69 66 28 20 70  isuse;.    if( p
26200 4f 70 2d 3e 70 31 20 26 26 20 72 63 3d 3d 53 51  Op->p1 && rc==SQ
26210 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
26220 20 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31 20   assert( nArg>1 
26230 26 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20 28  && apArg[0] && (
26240 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26  apArg[0]->flags&
26250 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20  MEM_Null) );.   
26260 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64     db->lastRowid
26270 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a   = rowid;.    }.
26280 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b      p->nChange++
26290 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
262a0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
262b0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
262c0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
262d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
262e0 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70  ER_PRAGMAS./* Op
262f0 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20  code: Pagecount 
26300 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
26310 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
26320 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  ent number of pa
26330 67 65 73 20 69 6e 20 64 61 74 61 62 61 73 65 20  ges in database 
26340 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c  P1 to memory cel
26350 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  l P2..*/.case OP
26360 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20  _Pagecount: {   
26370 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
26380 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
26390 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70   int p1 = pOp->p
263a0 31 3b 20 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b  1; .  int nPage;
263b0 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72  .  Pager *pPager
263c0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
263d0 61 67 65 72 28 64 62 2d 3e 61 44 62 5b 70 31 5d  ager(db->aDb[p1]
263e0 2e 70 42 74 29 3b 0a 0a 20 20 72 63 20 3d 20 73  .pBt);..  rc = s
263f0 71 6c 69 74 65 33 50 61 67 65 72 50 61 67 65 63  qlite3PagerPagec
26400 6f 75 6e 74 28 70 50 61 67 65 72 2c 20 26 6e 50  ount(pPager, &nP
26410 61 67 65 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  age);.  if( rc==
26420 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
26430 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
26440 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
26450 2d 3e 75 2e 69 20 3d 20 6e 50 61 67 65 3b 0a 20  ->u.i = nPage;. 
26460 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
26470 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
26480 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a  LITE_OMIT_TRACE.
26490 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 63 65  /* Opcode: Trace
264a0 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
264b0 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69 73 20  * If tracing is 
264c0 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68 65 20  enabled (by the 
264d0 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29  sqlite3_trace())
264e0 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e   interface, then
264f0 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74  .** the UTF-8 st
26500 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69  ring contained i
26510 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65 64 20  n P4 is emitted 
26520 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63 61 6c  on the trace cal
26530 6c 62 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f  lback..*/.case O
26540 50 5f 54 72 61 63 65 3a 20 7b 0a 20 20 69 66 28  P_Trace: {.  if(
26550 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
26560 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65    if( db->xTrace
26570 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78 54   ){.      db->xT
26580 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41  race(db->pTraceA
26590 72 67 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  rg, pOp->p4.z);.
265a0 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c      }.#ifdef SQL
265b0 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66  ITE_DEBUG.    if
265c0 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  ( (db->flags & S
265d0 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21  QLITE_SqlTrace)!
265e0 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
265f0 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 22  te3DebugPrintf("
26600 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22  SQL-trace: %s\n"
26610 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
26620 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
26630 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20  LITE_DEBUG */.  
26640 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
26650 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  dif.../* Opcode:
26660 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a   Noop * * * * *.
26670 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67  **.** Do nothing
26680 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  .  This instruct
26690 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65  ion is often use
266a0 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a  ful as a jump.**
266b0 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f   destination..*/
266c0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63  ./*.** The magic
266d0 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20   Explain opcode 
266e0 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65  are only inserte
266f0 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d  d when explain==
26700 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74  2 (which.** is t
26710 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65 20 45  o say when the E
26720 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
26730 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73 65 64  N syntax is used
26740 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  .).** This opcod
26750 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d  e records inform
26760 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f  ation from the o
26770 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73  ptimizer.  It is
26780 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65   the.** the same
26790 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68   as a no-op.  Th
267a0 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20  is opcodesnever 
267b0 61 70 70 65 61 72 73 20 69 6e 20 61 20 72 65 61  appears in a rea
267c0 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f  l VM program..*/
267d0 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20  .default: {     
267e0 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20       /* This is 
267f0 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61  really OP_Noop a
26800 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f  nd OP_Explain */
26810 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a  .  break;.}../**
26820 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26830 2a 2a 2a 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 0a 2a 2a 20 54  ***********.** T
26870 68 65 20 63 61 73 65 73 20 6f 66 20 74 68 65 20  he cases of the 
26880 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
26890 20 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65   above this line
268a0 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69   should all be i
268b0 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20  ndented.** by 6 
268c0 73 70 61 63 65 73 2e 20 20 42 75 74 20 74 68 65  spaces.  But the
268d0 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61   left-most 6 spa
268e0 63 65 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  ces have been re
268f0 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65  moved to improve
26900 20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c   the.** readabil
26910 69 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20  ity.  From this 
26920 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74  point on down, t
26930 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74  he normal indent
26940 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a  ation rules are.
26950 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a  ** restored..***
26960 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26970 2a 2a 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 2f 0a 20 20 20 20  **********/.    
269b0 7d 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  }..#ifdef VDBE_P
269c0 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20  ROFILE.    {.   
269d0 20 20 20 75 36 34 20 65 6c 61 70 73 65 64 20 3d     u64 elapsed =
269e0 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29   sqlite3Hwtime()
269f0 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20   - start;.      
26a00 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65  pOp->cycles += e
26a10 6c 61 70 73 65 64 3b 0a 20 20 20 20 20 20 70 4f  lapsed;.      pO
26a20 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20 30 0a  p->cnt++;.#if 0.
26a30 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28          fprintf(
26a40 73 74 64 6f 75 74 2c 20 22 25 31 30 6c 6c 75 20  stdout, "%10llu 
26a50 22 2c 20 65 6c 61 70 73 65 64 29 3b 0a 20 20 20  ", elapsed);.   
26a60 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
26a70 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20  PrintOp(stdout, 
26a80 6f 72 69 67 50 63 2c 20 26 70 2d 3e 61 4f 70 5b  origPc, &p->aOp[
26a90 6f 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64 69 66  origPc]);.#endif
26aa0 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  .    }.#endif.. 
26ab0 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77     /* The follow
26ac0 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e 6f  ing code adds no
26ad0 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63 74  thing to the act
26ae0 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  ual functionalit
26af0 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20  y.    ** of the 
26b00 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73 20  program.  It is 
26b10 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74 65  only here for te
26b20 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67  sting and debugg
26b30 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74  ing..    ** On t
26b40 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69  he other hand, i
26b50 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55 20  t does burn CPU 
26b60 63 79 63 6c 65 73 20 65 76 65 72 79 20 74 69 6d  cycles every tim
26b70 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a  e through.    **
26b80 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20 6c   the evaluator l
26b90 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e 20  oop.  So we can 
26ba0 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77 68 65  leave it out whe
26bb0 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65 66 69  n NDEBUG is defi
26bc0 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e  ned..    */.#ifn
26bd0 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20 61  def NDEBUG.    a
26be0 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26 26  ssert( pc>=-1 &&
26bf0 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23   pc<p->nOp );..#
26c00 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
26c10 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72  UG.    if( p->tr
26c20 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ace ){.      if(
26c30 20 72 63 21 3d 30 20 29 20 66 70 72 69 6e 74 66   rc!=0 ) fprintf
26c40 28 70 2d 3e 74 72 61 63 65 2c 22 72 63 3d 25 64  (p->trace,"rc=%d
26c50 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20 20 69  \n",rc);.      i
26c60 66 28 20 6f 70 50 72 6f 70 65 72 74 79 20 26 20  f( opProperty & 
26c70 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45  OPFLG_OUT2_PRERE
26c80 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
26c90 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70   registerTrace(p
26ca0 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 32  ->trace, pOp->p2
26cb0 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d  , pOut);.      }
26cc0 0a 20 20 20 20 20 20 69 66 28 20 6f 70 50 72 6f  .      if( opPro
26cd0 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55  perty & OPFLG_OU
26ce0 54 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  T3 ){.        re
26cf0 67 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74  gisterTrace(p->t
26d00 72 61 63 65 2c 20 70 4f 70 2d 3e 70 33 2c 20 70  race, pOp->p3, p
26d10 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Out);.      }.  
26d20 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53    }.#endif  /* S
26d30 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23  QLITE_DEBUG */.#
26d40 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47  endif  /* NDEBUG
26d50 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20   */.  }  /* The 
26d60 65 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b  end of the for(;
26d70 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70  ;) loop the loop
26d80 73 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65  s through opcode
26d90 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65  s */..  /* If we
26da0 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e   reach this poin
26db0 74 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  t, it means that
26dc0 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69   execution is fi
26dd0 6e 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a  nished with.  **
26de0 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d   an error of som
26df0 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62  e kind..  */.vdb
26e00 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20  e_error_halt:.  
26e10 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20  assert( rc );.  
26e20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71  p->rc = rc;.  sq
26e30 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
26e40 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
26e50 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29  TE_IOERR_NOMEM )
26e60 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
26e70 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53 51  d = 1;.  rc = SQ
26e80 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 0a 20 20 2f  LITE_ERROR;..  /
26e90 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * This is the on
26ea0 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68  ly way out of th
26eb0 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57  is procedure.  W
26ec0 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72  e have to.  ** r
26ed0 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65 78  elease the mutex
26ee0 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61  es on btrees tha
26ef0 74 20 77 65 72 65 20 61 63 71 75 69 72 65 64 20  t were acquired 
26f00 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e  at the.  ** top.
26f10 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a   */.vdbe_return:
26f20 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d  .  sqlite3BtreeM
26f30 75 74 65 78 41 72 72 61 79 4c 65 61 76 65 28 26  utexArrayLeave(&
26f40 70 2d 3e 61 4d 75 74 65 78 29 3b 0a 20 20 72 65  p->aMutex);.  re
26f50 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a  turn rc;..  /* J
26f60 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61  ump to here if a
26f70 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
26f80 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49  larger than SQLI
26f90 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20  TE_MAX_LENGTH.  
26fa0 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  ** is encountere
26fb0 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a  d..  */.too_big:
26fc0 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
26fd0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
26fe0 20 64 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20   db, "string or 
26ff0 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a  blob too big");.
27000 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f    rc = SQLITE_TO
27010 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OBIG;.  goto vdb
27020 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
27030 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
27040 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
27050 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65  ails..  */.no_me
27060 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  m:.  db->mallocF
27070 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c  ailed = 1;.  sql
27080 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
27090 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
270a0 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b  out of memory");
270b0 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e  .  rc = SQLITE_N
270c0 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OMEM;.  goto vdb
270d0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
270e0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
270f0 20 66 6f 72 20 61 6e 20 53 51 4c 49 54 45 5f 4d   for an SQLITE_M
27100 49 53 55 53 45 20 65 72 72 6f 72 2e 0a 20 20 2a  ISUSE error..  *
27110 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  /.abort_due_to_m
27120 69 73 75 73 65 3a 0a 20 20 72 63 20 3d 20 53 51  isuse:.  rc = SQ
27130 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 2f  LITE_MISUSE;.  /
27140 2a 20 46 61 6c 6c 20 74 68 72 75 20 69 6e 74 6f  * Fall thru into
27150 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
27160 72 6f 72 20 2a 2f 0a 0a 20 20 2f 2a 20 4a 75 6d  ror */..  /* Jum
27170 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e  p to here for an
27180 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20  y other kind of 
27190 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68  fatal error.  Th
271a0 65 20 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a  e "rc" variable.
271b0 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64    ** should hold
271c0 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65   the error numbe
271d0 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75  r..  */.abort_du
271e0 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73  e_to_error:.  as
271f0 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67  sert( p->zErrMsg
27200 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d  ==0 );.  if( db-
27210 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20  >mallocFailed ) 
27220 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
27230 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  M;.  if( rc!=SQL
27240 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20  ITE_IOERR_NOMEM 
27250 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
27260 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
27270 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
27280 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29  qlite3ErrStr(rc)
27290 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64  );.  }.  goto vd
272a0 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a  be_error_halt;..
272b0 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
272c0 65 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33  e if the sqlite3
272d0 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41 50 49  _interrupt() API
272e0 20 73 65 74 73 20 74 68 65 20 69 6e 74 65 72 72   sets the interr
272f0 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20  upt.  ** flag.. 
27300 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f   */.abort_due_to
27310 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73  _interrupt:.  as
27320 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49  sert( db->u1.isI
27330 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20  nterrupted );.  
27340 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
27350 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d  RRUPT;.  p->rc =
27360 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65   rc;.  sqlite3Se
27370 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
27380 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
27390 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29  qlite3ErrStr(rc)
273a0 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65  );.  goto vdbe_e
273b0 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a           rror_halt;.}.