/ Hex Artifact Content
Login

Artifact 7b74ce685d05c1123b0360ce6bc377df114b8533:


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 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 79   like that every
0520: 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66   happens..*/.#if
0530: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
0540: 0a 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f  .# define memAbo
0550: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20  utToChange(P,M) 
0560: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62  sqlite3VdbeMemAb
0570: 6f 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29  outToChange(P,M)
0580: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
0590: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
05a0: 28 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (P,M).#endif../*
05b0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
05c0: 67 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  g global variabl
05d0: 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  e is incremented
05e0: 20 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75   every time a cu
05f0: 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65  rsor.** moves, e
0600: 69 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f  ither by the OP_
0610: 53 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c  SeekXX, OP_Next,
0620: 20 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f   or OP_Prev opco
0630: 64 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a  des.  The test.*
0640: 2a 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  * procedures use
0650: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0660: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0670: 68 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a  hat indices are.
0680: 2a 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  ** working corre
0690: 63 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69  ctly.  This vari
06a0: 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63  able has no func
06b0: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
06c0: 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66  to.** help verif
06d0: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
06e0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c  eration of the l
06f0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0700: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0710: 74 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68  t sqlite3_search
0720: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0730: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74  if../*.** When t
0740: 68 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  his global varia
0750: 62 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c  ble is positive,
0760: 20 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65   it gets decreme
0770: 6e 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65  nted once before
0780: 0a 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63  .** each instruc
0790: 74 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45  tion in the VDBE
07a0: 2e 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68  .  When it reach
07b0: 65 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e  es zero, the u1.
07c0: 69 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a  isInterrupted.**
07d0: 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71   field of the sq
07e0: 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20  lite3 structure 
07f0: 69 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20  is set in order 
0800: 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69  to simulate an i
0810: 6e 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20  nterrupt..**.** 
0820: 54 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73  This facility is
0830: 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e   used for testin
0840: 67 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e  g purposes only.
0850: 20 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75    It does not fu
0860: 6e 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20  nction.** in an 
0870: 6f 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a  ordinary build..
0880: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
0890: 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65  _TEST.int sqlite
08a0: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
08b0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
08c0: 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c  *.** The next gl
08d0: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73  obal variable is
08e0: 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63   incremented eac
08f0: 68 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f  h type the OP_So
0900: 72 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  rt opcode.** is 
0910: 65 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74  executed.  The t
0920: 65 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75  est procedures u
0930: 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74  se this informat
0940: 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  ion to make sure
0950: 20 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67   that.** sorting
0960: 20 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72   is occurring or
0970: 20 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61   not occurring a
0980: 74 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69  t appropriate ti
0990: 6d 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69  mes.   This vari
09a0: 61 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66  able.** has no f
09b0: 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68  unction other th
09c0: 61 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66  an to help verif
09d0: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
09e0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  eration of the.*
09f0: 2a 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69  * library..*/.#i
0a00: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
0a10: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72  .int sqlite3_sor
0a20: 74 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e  t_count = 0;.#en
0a30: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e  dif../*.** The n
0a40: 65 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  ext global varia
0a50: 62 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20  ble records the 
0a60: 73 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67  size of the larg
0a70: 65 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20  est MEM_Blob.** 
0a80: 6f 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20  or MEM_Str that 
0a90: 68 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79  has been used by
0aa0: 20 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20   a VDBE opcode. 
0ab0: 20 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64   The test proced
0ac0: 75 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73  ures.** use this
0ad0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20   information to 
0ae0: 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74  make sure that t
0af0: 68 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e  he zero-blob fun
0b00: 63 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73  ctionality.** is
0b10: 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74   working correct
0b20: 6c 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  ly.   This varia
0b30: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
0b40: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
0b50: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
0b60: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
0b70: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
0b80: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0b90: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0ba0: 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f   sqlite3_max_blo
0bb0: 62 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69  bsize = 0;.stati
0bc0: 63 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78  c void updateMax
0bd0: 42 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29  Blobsize(Mem *p)
0be0: 7b 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67  {.  if( (p->flag
0bf0: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
0c00: 5f 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d  _Blob))!=0 && p-
0c10: 3e 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62  >n>sqlite3_max_b
0c20: 6c 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73  lobsize ){.    s
0c30: 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
0c40: 69 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a  ize = p->n;.  }.
0c50: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
0c60: 54 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20  The next global 
0c70: 76 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72  variable is incr
0c80: 65 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d  emented each tim
0c90: 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f  e the OP_Found o
0ca0: 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63  pcode.** is exec
0cb0: 75 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73  uted. This is us
0cc0: 65 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68  ed to test wheth
0cd0: 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f  er or not the fo
0ce0: 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65  reign key.** ope
0cf0: 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  ration implement
0d00: 65 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73  ed using OP_FkIs
0d10: 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e  Zero is working.
0d20: 20 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a   This variable.*
0d30: 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  * has no functio
0d40: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20  n other than to 
0d50: 68 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20  help verify the 
0d60: 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f  correct operatio
0d70: 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72  n of the.** libr
0d80: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0d90: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0da0: 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75  qlite3_found_cou
0db0: 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a  nt = 0;.#endif..
0dc0: 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67  /*.** Test a reg
0dd0: 69 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20  ister to see if 
0de0: 69 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63  it exceeds the c
0df0: 75 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62  urrent maximum b
0e00: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20  lob size..** If 
0e10: 69 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20  it does, record 
0e20: 74 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20  the new maximum 
0e30: 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69  blob size..*/.#i
0e40: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
0e50: 5f 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e  _TEST) && !defin
0e60: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ed(SQLITE_OMIT_B
0e70: 55 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64  UILTIN_TEST).# d
0e80: 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58  efine UPDATE_MAX
0e90: 5f 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70  _BLOBSIZE(P)  up
0ea0: 64 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28  dateMaxBlobsize(
0eb0: 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  P).#else.# defin
0ec0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0ed0: 42 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a  BSIZE(P).#endif.
0ee0: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74  ./*.** Convert t
0ef0: 68 65 20 67 69 76 65 6e 20 72 65 67 69 73 74 65  he given registe
0f00: 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20  r into a string 
0f10: 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a  if it isn't one.
0f20: 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75  ** already. Retu
0f30: 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61  rn non-zero if a
0f40: 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e   malloc() fails.
0f50: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69  .*/.#define Stri
0f60: 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a  ngify(P, enc) \.
0f70: 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67     if(((P)->flag
0f80: 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  s&(MEM_Str|MEM_B
0f90: 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69  lob))==0 && sqli
0fa0: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
0fb0: 69 66 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20  ify(P,enc)) \.  
0fc0: 20 20 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d     { goto no_mem
0fd0: 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70  ; }../*.** An ep
0fe0: 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76  hemeral string v
0ff0: 61 6c 75 65 20 28 73 69 67 6e 69 66 69 65 64 20  alue (signified 
1000: 62 79 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d  by the MEM_Ephem
1010: 20 66 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a   flag) contains.
1020: 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** a pointer to 
1030: 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  a dynamically al
1040: 6c 6f 63 61 74 65 64 20 73 74 72 69 6e 67 20 77  located string w
1050: 68 65 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20  here some other 
1060: 65 6e 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73  entity.** is res
1070: 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61  ponsible for dea
1080: 6c 6c 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73  llocating that s
1090: 74 72 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20  tring.  Because 
10a0: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
10b0: 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c  does not control
10c0: 20 74 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20   the string, it 
10d0: 6d 69 67 68 74 20 62 65 20 64 65 6c 65 74 65 64  might be deleted
10e0: 20 77 69 74 68 6f 75 74 20 74 68 65 20 72 65 67   without the reg
10f0: 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67  ister.** knowing
1100: 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   it..**.** This 
1110: 72 6f 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73  routine converts
1120: 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74   an ephemeral st
1130: 72 69 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61  ring into a dyna
1140: 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
1150: 64 0a 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74  d.** string that
1160: 20 74 68 65 20 72 65 67 69 73 74 65 72 20 69 74   the register it
1170: 73 65 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20  self controls.  
1180: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1190: 69 74 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61  it.** converts a
11a0: 6e 20 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69  n MEM_Ephem stri
11b0: 6e 67 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44  ng into an MEM_D
11c0: 79 6e 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64  yn string..*/.#d
11d0: 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61  efine Deephemera
11e0: 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28  lize(P) \.   if(
11f0: 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d   ((P)->flags&MEM
1200: 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20  _Ephem)!=0 \.   
1210: 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64      && sqlite3Vd
1220: 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62  beMemMakeWriteab
1230: 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f  le(P) ){ goto no
1240: 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72  _mem;}../* Retur
1250: 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75  n true if the cu
1260: 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20  rsor was opened 
1270: 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65  using the OP_Ope
1280: 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20  nSorter opcode. 
1290: 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72  */.#define isSor
12a0: 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70 53 6f  ter(x) ((x)->pSo
12b0: 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  rter!=0)../*.** 
12c0: 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72  Allocate VdbeCur
12d0: 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e  sor number iCur.
12e0: 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74    Return a point
12f0: 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72  er to it.  Retur
1300: 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20  n NULL.** if we 
1310: 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  run out of memor
1320: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62  y..*/.static Vdb
1330: 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74  eCursor *allocat
1340: 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20  eCursor(.  Vdbe 
1350: 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  *p,             
1360: 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20   /* The virtual 
1370: 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74  machine */.  int
1380: 20 69 43 75 72 2c 20 20 20 20 20 20 20 20 20 20   iCur,          
1390: 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74     /* Index of t
13a0: 68 65 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f  he new VdbeCurso
13b0: 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  r */.  int nFiel
13c0: 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d,           /* 
13d0: 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
13e0: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
13f0: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
1400: 69 44 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  iDb,            
1410: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74 68    /* Database th
1420: 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73  e cursor belongs
1430: 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20   to, or -1 */.  
1440: 69 6e 74 20 69 73 42 74 72 65 65 43 75 72 73 6f  int isBtreeCurso
1450: 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  r     /* True fo
1460: 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c 73 65  r B-Tree.  False
1470: 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61 62 6c   for pseudo-tabl
1480: 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29 7b 0a  e or vtab */.){.
1490: 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6d 65    /* Find the me
14a0: 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 77  mory cell that w
14b0: 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20 73  ill be used to s
14c0: 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20 6f 66  tore the blob of
14d0: 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72 65 71   memory.  ** req
14e0: 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 56  uired for this V
14f0: 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74  dbeCursor struct
1500: 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e 76 65  ure. It is conve
1510: 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61 20 0a  nient to use a .
1520: 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f 72 79    ** vdbe memory
1530: 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67 65 20   cell to manage 
1540: 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  the memory alloc
1550: 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64 20 66  ation required f
1560: 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65 43 75  or a.  ** VdbeCu
1570: 72 73 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  rsor structure f
1580: 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  or the following
1590: 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a 20   reasons:.  **. 
15a0: 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69 6d 65   **   * Sometime
15b0: 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 73  s cursor numbers
15c0: 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 61 20   are used for a 
15d0: 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66 65 72  couple of differ
15e0: 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70 75 72  ent.  **     pur
15f0: 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62 65 20  poses in a vdbe 
1600: 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64 69 66  program. The dif
1610: 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69 67 68  ferent uses migh
1620: 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a 20 20  t require.  **  
1630: 20 20 20 64 69 66 66 65 72 65 6e 74 20 73 69 7a     different siz
1640: 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 20  ed allocations. 
1650: 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70 72 6f  Memory cells pro
1660: 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a 20 20  vide growable.  
1670: 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74 69 6f  **     allocatio
1680: 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  ns..  **.  **   
1690: 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45 4e 41  * When using ENA
16a0: 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47  BLE_MEMORY_MANAG
16b0: 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20 63 65  EMENT, memory ce
16c0: 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e 0a 20  ll buffers can. 
16d0: 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65 65 64   **     be freed
16e0: 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68 65 20   lazily via the 
16f0: 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f  sqlite3_release_
1700: 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20 54 68  memory() API. Th
1710: 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69 6e 69  is.  **     mini
1720: 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62 65 72  mizes the number
1730: 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c 73   of malloc calls
1740: 20 6d 61 64 65 20 62 79 20 74 68 65 20 73 79 73   made by the sys
1750: 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4d  tem..  **.  ** M
1760: 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f 72 20  emory cells for 
1770: 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 6c 6f  cursors are allo
1780: 63 61 74 65 64 20 61 74 20 74 68 65 20 74 6f 70  cated at the top
1790: 20 6f 66 20 74 68 65 20 61 64 64 72 65 73 73 0a   of the address.
17a0: 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65 6d 6f    ** space. Memo
17b0: 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d  ry cell (p->nMem
17c0: 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  ) corresponds to
17d0: 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61 63 65   cursor 0. Space
17e0: 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73 6f 72   for.  ** cursor
17f0: 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20 62 79   1 is managed by
1800: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d   memory cell (p-
1810: 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e 0a 20  >nMem-1), etc.. 
1820: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20   */.  Mem *pMem 
1830: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d  = &p->aMem[p->nM
1840: 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69 6e 74  em-iCur];..  int
1850: 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43 75   nByte;.  VdbeCu
1860: 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a 20  rsor *pCx = 0;. 
1870: 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20 20   nByte = .      
1880: 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64  ROUND8(sizeof(Vd
1890: 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a 73  beCursor)) + 2*s
18a0: 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65 6c  izeof(u32)*nFiel
18b0: 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73 42 74  d + .      (isBt
18c0: 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69 74 65  reeCursor?sqlite
18d0: 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65  3BtreeCursorSize
18e0: 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65 72 74  ():0);..  assert
18f0: 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f  ( iCur<p->nCurso
1900: 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70  r );.  if( p->ap
1910: 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20  Csr[iCur] ){.   
1920: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1930: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
1940: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
1950: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
1960: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
1970: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
1980: 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c  dbeMemGrow(pMem,
1990: 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20   nByte, 0) ){.  
19a0: 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d    p->apCsr[iCur]
19b0: 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43 75   = pCx = (VdbeCu
19c0: 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20  rsor*)pMem->z;. 
19d0: 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30     memset(pCx, 0
19e0: 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  , sizeof(VdbeCur
19f0: 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e  sor));.    pCx->
1a00: 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70  iDb = iDb;.    p
1a10: 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69  Cx->nField = nFi
1a20: 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 69 73 42  eld;.    if( isB
1a30: 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20 20  treeCursor ){.  
1a40: 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f 72      pCx->pCursor
1a50: 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a 20   = (BtCursor*). 
1a60: 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d 3e           &pMem->
1a70: 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  z[ROUND8(sizeof(
1a80: 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a 73  VdbeCursor))+2*s
1a90: 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65 6c  izeof(u32)*nFiel
1aa0: 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  d];.      sqlite
1ab0: 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72 6f  3BtreeCursorZero
1ac0: 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  (pCx->pCursor);.
1ad0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
1ae0: 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  rn pCx;.}../*.**
1af0: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
1b00: 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e  a value into a n
1b10: 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e 74  umeric represent
1b20: 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a  ation if we can.
1b30: 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75 74  ** do so without
1b40: 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
1b50: 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20  tion.  In other 
1b60: 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73 74  words, if the st
1b70: 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69  ring.** looks li
1b80: 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e  ke a number, con
1b90: 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20 6e  vert it into a n
1ba0: 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64 6f  umber.  If it do
1bb0: 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c  es not.** look l
1bc0: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65  ike a number, le
1bd0: 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2f  ave it alone..*/
1be0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70  .static void app
1bf0: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
1c00: 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a 20 20  y(Mem *pRec){.  
1c10: 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73  if( (pRec->flags
1c20: 20 26 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d   & (MEM_Real|MEM
1c30: 5f 49 6e 74 29 29 3d 3d 30 20 29 7b 0a 20 20 20  _Int))==0 ){.   
1c40: 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a   double rValue;.
1c50: 20 20 20 20 69 36 34 20 69 56 61 6c 75 65 3b 0a      i64 iValue;.
1c60: 20 20 20 20 75 38 20 65 6e 63 20 3d 20 70 52 65      u8 enc = pRe
1c70: 63 2d 3e 65 6e 63 3b 0a 20 20 20 20 69 66 28 20  c->enc;.    if( 
1c80: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
1c90: 5f 53 74 72 29 3d 3d 30 20 29 20 72 65 74 75 72  _Str)==0 ) retur
1ca0: 6e 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  n;.    if( sqlit
1cb0: 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20  e3AtoF(pRec->z, 
1cc0: 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e  &rValue, pRec->n
1cd0: 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75  , enc)==0 ) retu
1ce0: 72 6e 3b 0a 20 20 20 20 69 66 28 20 30 3d 3d 73  rn;.    if( 0==s
1cf0: 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 52 65  qlite3Atoi64(pRe
1d00: 63 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c 20 70  c->z, &iValue, p
1d10: 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a  Rec->n, enc) ){.
1d20: 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e 69 20        pRec->u.i 
1d30: 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20 20 20 20  = iValue;.      
1d40: 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pRec->flags |= M
1d50: 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 65 6c 73  EM_Int;.    }els
1d60: 65 7b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 72  e{.      pRec->r
1d70: 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 20   = rValue;.     
1d80: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
1d90: 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 7d 0a  MEM_Real;.    }.
1da0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f    }.}../*.** Pro
1db0: 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65 72  cessing is deter
1dc0: 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66 69  mine by the affi
1dd0: 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a 0a  nity parameter:.
1de0: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
1df0: 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c  _INTEGER:.** SQL
1e00: 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a  ITE_AFF_REAL:.**
1e10: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
1e20: 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74  RIC:.**    Try t
1e30: 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20 74  o convert pRec t
1e40: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70  o an integer rep
1e50: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61  resentation or a
1e60: 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67   .**    floating
1e70: 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e 74  -point represent
1e80: 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65  ation if an inte
1e90: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
1ea0: 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20  on.**    is not 
1eb0: 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20  possible.  Note 
1ec0: 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65 72  that the integer
1ed0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
1ee0: 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73 20  is.**    always 
1ef0: 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e 20  preferred, even 
1f00: 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  if the affinity 
1f10: 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73 65  is REAL, because
1f20: 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67 65  .**    an intege
1f30: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
1f40: 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20 65   is more space e
1f50: 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b  fficient on disk
1f60: 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  ..**.** SQLITE_A
1f70: 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43  FF_TEXT:.**    C
1f80: 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61  onvert pRec to a
1f90: 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74 61   text representa
1fa0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49  tion..**.** SQLI
1fb0: 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20  TE_AFF_NONE:.** 
1fc0: 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20     No-op.  pRec 
1fd0: 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f  is unchanged..*/
1fe0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70  .static void app
1ff0: 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 4d 65  lyAffinity(.  Me
2000: 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20 20 20  m *pRec,        
2010: 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 20 74    /* The value t
2020: 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79  o apply affinity
2030: 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61 66   to */.  char af
2040: 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a 20  finity,      /* 
2050: 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20  The affinity to 
2060: 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20  be applied */.  
2070: 75 38 20 65 6e 63 20 20 20 20 20 20 20 20 20 20  u8 enc          
2080: 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20      /* Use this 
2090: 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f  text encoding */
20a0: 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69  .){.  if( affini
20b0: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
20c0: 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  EXT ){.    /* On
20d0: 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20 63  ly attempt the c
20e0: 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58  onversion to TEX
20f0: 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  T if there is an
2100: 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c   integer or real
2110: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
2120: 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64  tation (blob and
2130: 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74   NULL do not get
2140: 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20   converted) but 
2150: 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a  no string.    **
2160: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2170: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
2180: 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73 26  0==(pRec->flags&
2190: 4d 45 4d 5f 53 74 72 29 20 26 26 20 28 70 52 65  MEM_Str) && (pRe
21a0: 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65  c->flags&(MEM_Re
21b0: 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a  al|MEM_Int)) ){.
21c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
21d0: 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 52  eMemStringify(pR
21e0: 65 63 2c 20 65 6e 63 29 3b 0a 20 20 20 20 7d 0a  ec, enc);.    }.
21f0: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
2200: 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45  &= ~(MEM_Real|ME
2210: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20  M_Int);.  }else 
2220: 69 66 28 20 61 66 66 69 6e 69 74 79 21 3d 53 51  if( affinity!=SQ
2230: 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b  LITE_AFF_NONE ){
2240: 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 66 66  .    assert( aff
2250: 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
2260: 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66  F_INTEGER || aff
2270: 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
2280: 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20  F_REAL.         
2290: 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d      || affinity=
22a0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
22b0: 52 49 43 20 29 3b 0a 20 20 20 20 61 70 70 6c 79  RIC );.    apply
22c0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
22d0: 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28 20 70  pRec);.    if( p
22e0: 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
22f0: 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20 20 73  _Real ){.      s
2300: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65  qlite3VdbeIntege
2310: 72 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b  rAffinity(pRec);
2320: 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a  .    }.  }.}../*
2330: 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65  .** Try to conve
2340: 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20 61  rt the type of a
2350: 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   function argume
2360: 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20 63  nt or a result c
2370: 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20  olumn.** into a 
2380: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
2390: 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69 74  tation.  Use eit
23a0: 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20 52  her INTEGER or R
23b0: 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a 2a  EAL whichever.**
23c0: 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65 2e   is appropriate.
23d0: 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68    But only do th
23e0: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20  e conversion if 
23f0: 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 77  it is possible w
2400: 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f  ithout.** loss o
2410: 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e  f information an
2420: 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65 76  d return the rev
2430: 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68 65  ised type of the
2440: 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e   argument..*/.in
2450: 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  t sqlite3_value_
2460: 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71 6c  numeric_type(sql
2470: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
2480: 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65 20 3d  ){.  int eType =
2490: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
24a0: 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69 66 28  ype(pVal);.  if(
24b0: 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54   eType==SQLITE_T
24c0: 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a  EXT ){.    Mem *
24d0: 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61  pMem = (Mem*)pVa
24e0: 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d 65  l;.    applyNume
24f0: 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65 6d  ricAffinity(pMem
2500: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
2510: 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70  beMemStoreType(p
2520: 4d 65 6d 29 3b 0a 20 20 20 20 65 54 79 70 65 20  Mem);.    eType 
2530: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
2540: 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a  type(pVal);.  }.
2550: 20 20 72 65 74 75 72 6e 20 65 54 79 70 65 3b 0a    return eType;.
2560: 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65  }../*.** Exporte
2570: 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70 70  d version of app
2580: 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54 68  lyAffinity(). Th
2590: 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20  is one works on 
25a0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
25b0: 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74 65  .** not the inte
25c0: 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a  rnal Mem* type..
25d0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
25e0: 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74  alueApplyAffinit
25f0: 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  y(.  sqlite3_val
2600: 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20  ue *pVal, .  u8 
2610: 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38 20  affinity, .  u8 
2620: 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66  enc.){.  applyAf
2630: 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70 56  finity((Mem *)pV
2640: 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e  al, affinity, en
2650: 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51  c);.}..#ifdef SQ
2660: 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
2670: 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73 74   Write a nice st
2680: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
2690: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  ion of the conte
26a0: 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d  nts of cell pMem
26b0: 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20  .** into buffer 
26c0: 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75  zBuf, length nBu
26d0: 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  f..*/.void sqlit
26e0: 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  e3VdbeMemPrettyP
26f0: 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20  rint(Mem *pMem, 
2700: 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63  char *zBuf){.  c
2710: 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66  har *zCsr = zBuf
2720: 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d  ;.  int f = pMem
2730: 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74  ->flags;..  stat
2740: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63  ic const char *c
2750: 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20  onst encnames[] 
2760: 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c  = {"(X)", "(8)",
2770: 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42   "(16LE)", "(16B
2780: 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d  E)"};..  if( f&M
2790: 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69  EM_Blob ){.    i
27a0: 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63  nt i;.    char c
27b0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
27c0: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63  M_Dyn ){.      c
27d0: 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73   = 'z';.      as
27e0: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
27f0: 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d  Static|MEM_Ephem
2800: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
2810: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
2820: 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63  tatic ){.      c
2830: 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73   = 't';.      as
2840: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
2850: 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  Dyn|MEM_Ephem))=
2860: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
2870: 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65  if( f & MEM_Ephe
2880: 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  m ){.      c = '
2890: 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e';.      assert
28a0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
28b0: 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20  ic|MEM_Dyn))==0 
28c0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
28d0: 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20      c = 's';.   
28e0: 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   }..    sqlite3_
28f0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
2900: 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20  sr, "%c", c);.  
2910: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
2920: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
2930: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
2940: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
2950: 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29   "%d[", pMem->n)
2960: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
2970: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
2980: 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  sr);.    for(i=0
2990: 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d  ; i<16 && i<pMem
29a0: 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ->n; i++){.     
29b0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
29c0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30  f(100, zCsr, "%0
29d0: 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d  2X", ((int)pMem-
29e0: 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a  >z[i] & 0xFF));.
29f0: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71        zCsr += sq
2a00: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
2a10: 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66  sr);.    }.    f
2a20: 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20  or(i=0; i<16 && 
2a30: 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b  i<pMem->n; i++){
2a40: 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20  .      char z = 
2a50: 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20  pMem->z[i];.    
2a60: 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e    if( z<32 || z>
2a70: 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20  126 ) *zCsr++ = 
2a80: 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20  '.';.      else 
2a90: 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20  *zCsr++ = z;.   
2aa0: 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   }..    sqlite3_
2ab0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
2ac0: 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61  sr, "]%s", encna
2ad0: 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b  mes[pMem->enc]);
2ae0: 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c  .    zCsr += sql
2af0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
2b00: 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20  r);.    if( f & 
2b10: 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
2b20: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
2b30: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25  tf(100, zCsr,"+%
2b40: 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72  dz",pMem->u.nZer
2b50: 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b  o);.      zCsr +
2b60: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
2b70: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20  0(zCsr);.    }. 
2b80: 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b     *zCsr = '\0';
2b90: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26  .  }else if( f &
2ba0: 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20   MEM_Str ){.    
2bb0: 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42  int j, k;.    zB
2bc0: 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20  uf[0] = ' ';.   
2bd0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e   if( f & MEM_Dyn
2be0: 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31   ){.      zBuf[1
2bf0: 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  ] = 'z';.      a
2c00: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
2c10: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
2c20: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
2c30: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
2c40: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
2c50: 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20  zBuf[1] = 't';. 
2c60: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
2c70: 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45  & (MEM_Dyn|MEM_E
2c80: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
2c90: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
2ca0: 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20  EM_Ephem ){.    
2cb0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b    zBuf[1] = 'e';
2cc0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
2cd0: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
2ce0: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
2cf0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2d00: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a   zBuf[1] = 's';.
2d10: 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b      }.    k = 2;
2d20: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
2d30: 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66  rintf(100, &zBuf
2d40: 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d  [k], "%d", pMem-
2d50: 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71  >n);.    k += sq
2d60: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a  lite3Strlen30(&z
2d70: 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75  Buf[k]);.    zBu
2d80: 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20  f[k++] = '[';.  
2d90: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20    for(j=0; j<15 
2da0: 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b  && j<pMem->n; j+
2db0: 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d  +){.      u8 c =
2dc0: 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20   pMem->z[j];.   
2dd0: 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26     if( c>=0x20 &
2de0: 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20  & c<0x7f ){.    
2df0: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
2e00: 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
2e10: 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b          zBuf[k++
2e20: 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d  ] = '.';.      }
2e30: 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b  .    }.    zBuf[
2e40: 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20  k++] = ']';.    
2e50: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
2e60: 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65  (100,&zBuf[k], e
2e70: 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e  ncnames[pMem->en
2e80: 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71  c]);.    k += sq
2e90: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a  lite3Strlen30(&z
2ea0: 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75  Buf[k]);.    zBu
2eb0: 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a  f[k++] = 0;.  }.
2ec0: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
2ed0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
2ee0: 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61  .** Print the va
2ef0: 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74 65  lue of a registe
2f00: 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75  r for tracing pu
2f10: 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69  rposes:.*/.stati
2f20: 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50  c void memTraceP
2f30: 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20 20  rint(Mem *p){.  
2f40: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
2f50: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b 0a  EM_Undefined ){.
2f60: 20 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e 64      printf(" und
2f70: 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73  efined");.  }els
2f80: 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26  e if( p->flags &
2f90: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
2fa0: 20 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29   printf(" NULL")
2fb0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70  ;.  }else if( (p
2fc0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
2fd0: 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d  nt|MEM_Str))==(M
2fe0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20  EM_Int|MEM_Str) 
2ff0: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3000: 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69  si:%lld", p->u.i
3010: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  );.  }else if( p
3020: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
3030: 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  t ){.    printf(
3040: 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e  " i:%lld", p->u.
3050: 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  i);.#ifndef SQLI
3060: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
3070: 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69  _POINT.  }else i
3080: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3090: 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72  M_Real ){.    pr
30a0: 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d  intf(" r:%g", p-
30b0: 3e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65  >r);.#endif.  }e
30c0: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
30d0: 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b   & MEM_RowSet ){
30e0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 28 72  .    printf(" (r
30f0: 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73  owset)");.  }els
3100: 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66  e{.    char zBuf
3110: 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74  [200];.    sqlit
3120: 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  e3VdbeMemPrettyP
3130: 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20  rint(p, zBuf);. 
3140: 20 20 20 70 72 69 6e 74 66 28 22 20 25 73 22 2c     printf(" %s",
3150: 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74   zBuf);.  }.}.st
3160: 61 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74  atic void regist
3170: 65 72 54 72 61 63 65 28 69 6e 74 20 69 52 65 67  erTrace(int iReg
3180: 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69  , Mem *p){.  pri
3190: 6e 74 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22  ntf("REG[%d] = "
31a0: 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72  , iReg);.  memTr
31b0: 61 63 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70  acePrint(p);.  p
31c0: 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a 23  rintf("\n");.}.#
31d0: 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
31e0: 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65  LITE_DEBUG.#  de
31f0: 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52  fine REGISTER_TR
3200: 41 43 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e  ACE(R,M) if(db->
3210: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62  flags&SQLITE_Vdb
3220: 65 54 72 61 63 65 29 72 65 67 69 73 74 65 72 54  eTrace)registerT
3230: 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a  race(R,M).#else.
3240: 23 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54  #  define REGIST
3250: 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65  ER_TRACE(R,M).#e
3260: 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44  ndif...#ifdef VD
3270: 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a  BE_PROFILE../* .
3280: 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74  ** hwtime.h cont
3290: 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65  ains inline asse
32a0: 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69  mbler code for i
32b0: 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20  mplementing .** 
32c0: 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65  high-performance
32d0: 20 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73   timing routines
32e0: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68  ..*/.#include "h
32f0: 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66  wtime.h"..#endif
3300: 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47  ..#ifndef NDEBUG
3310: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63  ./*.** This func
3320: 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c  tion is only cal
3330: 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  led from within 
3340: 61 6e 20 61 73 73 65 72 74 28 29 20 65 78 70 72  an assert() expr
3350: 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68  ession. It.** ch
3360: 65 63 6b 73 20 74 68 61 74 20 74 68 65 20 73 71  ecks that the sq
3370: 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69  lite3.nTransacti
3380: 6f 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20 63  on variable is c
3390: 6f 72 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a  orrectly set to.
33a0: 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
33b0: 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e   non-transaction
33c0: 20 73 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72   savepoints curr
33d0: 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a  ently in the .**
33e0: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61   linked list sta
33f0: 72 74 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33  rting at sqlite3
3400: 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20  .pSavepoint..** 
3410: 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a  .** Usage:.**.**
3420: 20 20 20 20 20 61 73 73 65 72 74 28 20 63 68 65       assert( che
3430: 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
3440: 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69  (db) );.*/.stati
3450: 63 20 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70  c int checkSavep
3460: 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65  ointCount(sqlite
3470: 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20  3 *db){.  int n 
3480: 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  = 0;.  Savepoint
3490: 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d   *p;.  for(p=db-
34a0: 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20  >pSavepoint; p; 
34b0: 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b  p=p->pNext) n++;
34c0: 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64  .  assert( n==(d
34d0: 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20  b->nSavepoint + 
34e0: 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
34f0: 6e 53 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20  nSavepoint) );. 
3500: 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e   return 1;.}.#en
3510: 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  dif.../*.** Exec
3520: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
3530: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
3540: 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73   we can..** This
3550: 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20   is the core of 
3560: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20  sqlite3_step(). 
3570: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
3580: 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65  VdbeExec(.  Vdbe
3590: 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20   *p             
35a0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
35b0: 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 70  BE */.){.  int p
35c0: 63 3d 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  c=0;            
35d0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f        /* The pro
35e0: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  gram counter */.
35f0: 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61    Op *aOp = p->a
3600: 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  Op;          /* 
3610: 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a  Copy of p->aOp *
3620: 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20 20  /.  Op *pOp;    
3630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3640: 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74  * Current operat
3650: 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20  ion */.  int rc 
3660: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20  = SQLITE_OK;    
3670: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
3680: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69  return */.  sqli
3690: 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b  te3 *db = p->db;
36a0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
36b0: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72  tabase */.  u8 r
36c0: 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
36d0: 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20  t = 0; /* Reset 
36e0: 73 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20  schema after an 
36f0: 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76  error if positiv
3700: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69  e */.  u8 encodi
3710: 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20  ng = ENC(db);   
3720: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
3730: 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  e encoding */.  
3740: 69 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30  int iCompare = 0
3750: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
3760: 73 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f  sult of last OP_
3770: 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 69 6f  Compare operatio
3780: 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  n */.  unsigned 
3790: 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20 20  nVmStep = 0;    
37a0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
37b0: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 73  irtual machine s
37c0: 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20  teps */.#ifndef 
37d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
37e0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
37f0: 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65  unsigned nProgre
3800: 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a 20 49  ssLimit = 0;/* I
3810: 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73 28  nvoke xProgress(
3820: 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20 72  ) when nVmStep r
3830: 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a 23  eaches this */.#
3840: 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65  endif.  Mem *aMe
3850: 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20  m = p->aMem;    
3860: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d     /* Copy of p-
3870: 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a  >aMem */.  Mem *
3880: 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20  pIn1 = 0;       
3890: 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70        /* 1st inp
38a0: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ut operand */.  
38b0: 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20  Mem *pIn2 = 0;  
38c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e             /* 2n
38d0: 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  d input operand 
38e0: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d  */.  Mem *pIn3 =
38f0: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
3900: 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65  /* 3rd input ope
3910: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
3920: 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20  Out = 0;        
3930: 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f       /* Output o
3940: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  perand */.  int 
3950: 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20 20  *aPermute = 0;  
3960: 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75 74         /* Permut
3970: 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73  ation of columns
3980: 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20   for OP_Compare 
3990: 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77  */.  i64 lastRow
39a0: 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
39b0: 69 64 3b 20 20 2f 2a 20 53 61 76 65 64 20 76 61  id;  /* Saved va
39c0: 6c 75 65 20 6f 66 20 74 68 65 20 6c 61 73 74 20  lue of the last 
39d0: 69 6e 73 65 72 74 20 52 4f 57 49 44 20 2a 2f 0a  insert ROWID */.
39e0: 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
39f0: 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b  ILE.  u64 start;
3a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a10: 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f   /* CPU clock co
3a20: 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66 20  unt at start of 
3a30: 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  opcode */.  int 
3a40: 6f 72 69 67 50 63 3b 20 20 20 20 20 20 20 20 20  origPc;         
3a50: 20 20 20 20 20 20 20 2f 2a 20 50 72 6f 67 72 61         /* Progra
3a60: 6d 20 63 6f 75 6e 74 65 72 20 61 74 20 73 74 61  m counter at sta
3a70: 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a  rt of opcode */.
3a80: 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e  #endif.  /*** IN
3a90: 53 45 52 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e  SERT STACK UNION
3aa0: 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73   HERE ***/..  as
3ab0: 73 65 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d  sert( p->magic==
3ac0: 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29  VDBE_MAGIC_RUN )
3ad0: 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74  ;  /* sqlite3_st
3ae0: 65 70 28 29 20 76 65 72 69 66 69 65 73 20 74 68  ep() verifies th
3af0: 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  is */.  sqlite3V
3b00: 64 62 65 45 6e 74 65 72 28 70 29 3b 0a 20 20 69  dbeEnter(p);.  i
3b10: 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  f( p->rc==SQLITE
3b20: 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a  _NOMEM ){.    /*
3b30: 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 66   This happens if
3b40: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69   a malloc() insi
3b50: 64 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c  de a call to sql
3b60: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
3b70: 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c  () or.    ** sql
3b80: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
3b90: 31 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f  16() failed.  */
3ba0: 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
3bb0: 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
3bc0: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->rc==SQLITE_OK
3bd0: 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54   || p->rc==SQLIT
3be0: 45 5f 42 55 53 59 20 29 3b 0a 20 20 61 73 73 65  E_BUSY );.  asse
3bf0: 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
3c00: 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21   || p->readOnly!
3c10: 3d 30 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  =0 );.  p->rc = 
3c20: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e  SQLITE_OK;.  p->
3c30: 69 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30  iCurrentTime = 0
3c40: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65  ;.  assert( p->e
3c50: 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70  xplain==0 );.  p
3c60: 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30  ->pResultSet = 0
3c70: 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64  ;.  db->busyHand
3c80: 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20  ler.nBusy = 0;. 
3c90: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
3ca0: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
3cb0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
3cc0: 74 65 72 72 75 70 74 3b 0a 20 20 73 71 6c 69 74  terrupt;.  sqlit
3cd0: 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
3ce0: 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  (p);.#ifndef SQL
3cf0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
3d00: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28  S_CALLBACK.  if(
3d10: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29   db->xProgress )
3d20: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 20  {.    assert( 0 
3d30: 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  < db->nProgressO
3d40: 70 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72  ps );.    nProgr
3d50: 65 73 73 4c 69 6d 69 74 20 3d 20 28 75 6e 73 69  essLimit = (unsi
3d60: 67 6e 65 64 29 70 2d 3e 61 43 6f 75 6e 74 65 72  gned)p->aCounter
3d70: 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
3d80: 55 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20  US_VM_STEP];.   
3d90: 20 69 66 28 20 6e 50 72 6f 67 72 65 73 73 4c 69   if( nProgressLi
3da0: 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  mit==0 ){.      
3db0: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d  nProgressLimit =
3dc0: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
3dd0: 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  s;.    }else{.  
3de0: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d      nProgressLim
3df0: 69 74 20 25 3d 20 28 75 6e 73 69 67 6e 65 64 29  it %= (unsigned)
3e00: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
3e10: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
3e20: 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
3e30: 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33  _DEBUG.  sqlite3
3e40: 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
3e50: 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63  c();.  if( p->pc
3e60: 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62  ==0.   && (p->db
3e70: 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54  ->flags & (SQLIT
3e80: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51  E_VdbeListing|SQ
3e90: 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c  LITE_VdbeEQP|SQL
3ea0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 29 21  ITE_VdbeTrace))!
3eb0: 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20  =0.  ){.    int 
3ec0: 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20  i;.    int once 
3ed0: 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 1;.    sqlite3
3ee0: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
3ef0: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
3f00: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
3f10: 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20  dbeListing ){.  
3f20: 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45      printf("VDBE
3f30: 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67   Program Listing
3f40: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72  :\n");.      for
3f50: 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20  (i=0; i<p->nOp; 
3f60: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71  i++){.        sq
3f70: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
3f80: 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70  (stdout, i, &aOp
3f90: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  [i]);.      }.  
3fa0: 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64    }.    if( p->d
3fb0: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
3fc0: 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20  E_VdbeEQP ){.   
3fd0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d     for(i=0; i<p-
3fe0: 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nOp; i++){.    
3ff0: 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f      if( aOp[i].o
4000: 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69  pcode==OP_Explai
4010: 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  n ){.          i
4020: 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66  f( once ) printf
4030: 28 22 56 44 42 45 20 51 75 65 72 79 20 50 6c 61  ("VDBE Query Pla
4040: 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  n:\n");.        
4050: 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c    printf("%s\n",
4060: 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20   aOp[i].p4.z);. 
4070: 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20           once = 
4080: 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
4090: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
40a0: 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  f( p->db->flags 
40b0: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
40c0: 63 65 20 29 20 20 70 72 69 6e 74 66 28 22 56 44  ce )  printf("VD
40d0: 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20  BE Trace:\n");. 
40e0: 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42   }.  sqlite3EndB
40f0: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23  enignMalloc();.#
4100: 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 63 3d 70  endif.  for(pc=p
4110: 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45  ->pc; rc==SQLITE
4120: 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20  _OK; pc++){.    
4130: 61 73 73 65 72 74 28 20 70 63 3e 3d 30 20 26 26  assert( pc>=0 &&
4140: 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20   pc<p->nOp );.  
4150: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
4160: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
4170: 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56 44 42  _mem;.#ifdef VDB
4180: 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 6f 72  E_PROFILE.    or
4190: 69 67 50 63 20 3d 20 70 63 3b 0a 20 20 20 20 73  igPc = pc;.    s
41a0: 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33 48 77  tart = sqlite3Hw
41b0: 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20  time();.#endif. 
41c0: 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 20 20     nVmStep++;.  
41d0: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 5d    pOp = &aOp[pc]
41e0: 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61  ;..    /* Only a
41f0: 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20  llow tracing if 
4200: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20  SQLITE_DEBUG is 
4210: 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a  defined..    */.
4220: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
4230: 42 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  BUG.    if( db->
4240: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4250: 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20  dbeTrace ){.    
4260: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4270: 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 70 63 2c  ntOp(stdout, pc,
4280: 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e   pOp);.    }.#en
4290: 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20  dif.      ..    
42a0: 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  /* Check to see 
42b0: 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69  if we need to si
42c0: 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72  mulate an interr
42d0: 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20  upt.  This only 
42e0: 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69  happens.    ** i
42f0: 66 20 77 65 20 68 61 76 65 20 61 20 73 70 65 63  f we have a spec
4300: 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a  ial test build..
4310: 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51      */.#ifdef SQ
4320: 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66  LITE_TEST.    if
4330: 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ( sqlite3_interr
4340: 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20  upt_count>0 ){. 
4350: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74       sqlite3_int
4360: 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a  errupt_count--;.
4370: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
4380: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
4390: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  t==0 ){.        
43a0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
43b0: 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20  t(db);.      }. 
43c0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
43d0: 20 2f 2a 20 4f 6e 20 61 6e 79 20 6f 70 63 6f 64   /* On any opcod
43e0: 65 20 77 69 74 68 20 74 68 65 20 22 6f 75 74 32  e with the "out2
43f0: 2d 70 72 65 72 65 6c 65 61 73 65 22 20 74 61 67  -prerelease" tag
4400: 2c 20 66 72 65 65 20 61 6e 79 0a 20 20 20 20 2a  , free any.    *
4410: 2a 20 65 78 74 65 72 6e 61 6c 20 61 6c 6c 6f 63  * external alloc
4420: 61 74 69 6f 6e 73 20 6f 75 74 20 6f 66 20 6d 65  ations out of me
4430: 6d 5b 70 32 5d 20 61 6e 64 20 73 65 74 20 6d 65  m[p2] and set me
4440: 6d 5b 70 32 5d 20 74 6f 20 62 65 0a 20 20 20 20  m[p2] to be.    
4450: 2a 2a 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20  ** an undefined 
4460: 69 6e 74 65 67 65 72 2e 20 20 4f 70 63 6f 64 65  integer.  Opcode
4470: 73 20 77 69 6c 6c 20 65 69 74 68 65 72 20 66 69  s will either fi
4480: 6c 6c 20 69 6e 20 74 68 65 20 69 6e 74 65 67 65  ll in the intege
4490: 72 0a 20 20 20 20 2a 2a 20 76 61 6c 75 65 20 6f  r.    ** value o
44a0: 72 20 63 6f 6e 76 65 72 74 20 6d 65 6d 5b 70 32  r convert mem[p2
44b0: 5d 20 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74  ] to a different
44c0: 20 74 79 70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20   type..    */.  
44d0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
44e0: 70 66 6c 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f  pflags==sqlite3O
44f0: 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f  pcodeProperty[pO
4500: 70 2d 3e 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20  p->opcode] );.  
4510: 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61    if( pOp->opfla
4520: 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f  gs & OPFLG_OUT2_
4530: 50 52 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  PRERELEASE ){.  
4540: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
4550: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
4560: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
4570: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
4580: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 70 4f  sor) );.      pO
4590: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
45a0: 70 32 5d 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  p2];.      memAb
45b0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
45c0: 4f 75 74 29 3b 0a 20 20 20 20 20 20 56 64 62 65  Out);.      Vdbe
45d0: 4d 65 6d 52 65 6c 65 61 73 65 28 70 4f 75 74 29  MemRelease(pOut)
45e0: 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ;.      pOut->fl
45f0: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
4600: 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 53 61 6e     }..    /* San
4610: 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20  ity checking on 
4620: 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a  other operands *
4630: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4640: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 28 70  DEBUG.    if( (p
4650: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
4660: 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20  FLG_IN1)!=0 ){. 
4670: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
4680: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p1>0 );.      
4690: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c  assert( pOp->p1<
46a0: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
46b0: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61  rsor) );.      a
46c0: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
46d0: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  d(&aMem[pOp->p1]
46e0: 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53  ) );.      REGIS
46f0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
4700: 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  1, &aMem[pOp->p1
4710: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
4720: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
4730: 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20  & OPFLG_IN2)!=0 
4740: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
4750: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
4760: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
4770: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p2<=(p->nMem-p-
4780: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
4790: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
47a0: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
47b0: 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52  >p2]) );.      R
47c0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
47d0: 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p2, &aMem[pOp
47e0: 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p2]);.    }.  
47f0: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
4800: 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29  ags & OPFLG_IN3)
4810: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
4820: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
4830: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
4840: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
4850: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
4860: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
4870: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
4880: 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
4890: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
48a0: 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d  E(pOp->p3, &aMem
48b0: 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
48c0: 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  }.    if( (pOp->
48d0: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
48e0: 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20  OUT2)!=0 ){.    
48f0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
4900: 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  2>0 );.      ass
4910: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70  ert( pOp->p2<=(p
4920: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
4930: 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41  r) );.      memA
4940: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
4950: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
4960: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28  .    }.    if( (
4970: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
4980: 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b  PFLG_OUT3)!=0 ){
4990: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
49a0: 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
49b0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
49c0: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
49d0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
49e0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
49f0: 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  e(p, &aMem[pOp->
4a00: 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  p3]);.    }.#end
4a10: 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68  if.  .    switch
4a20: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
4a30: 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
4a40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4a50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4a60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4a70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4a80: 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73  .** What follows
4a90: 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77   is a massive sw
4aa0: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
4ab0: 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69  here each case i
4ac0: 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73  mplements a.** s
4ad0: 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74  eparate instruct
4ae0: 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75  ion in the virtu
4af0: 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20  al machine.  If 
4b00: 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73  we follow the us
4b10: 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69  ual.** indentati
4b20: 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20  on conventions, 
4b30: 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64  each case should
4b40: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20   be indented by 
4b50: 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a  6 spaces.  But.*
4b60: 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20  * that is a lot 
4b70: 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20  of wasted space 
4b80: 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67  on the left marg
4b90: 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65  in.  So the code
4ba0: 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73   within.** the s
4bb0: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
4bc0: 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20  will break with 
4bd0: 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62  convention and b
4be0: 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e  e flush-left. An
4bf0: 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d  other.** big com
4c00: 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f  ment (similar to
4c10: 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20   this one) will 
4c20: 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69  mark the point i
4c30: 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65  n the code where
4c40: 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f  .** we transitio
4c50: 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c  n back to normal
4c60: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a   indentation..**
4c70: 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69  .** The formatti
4c80: 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20  ng of each case 
4c90: 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54  is important.  T
4ca0: 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20  he makefile for 
4cb0: 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61  SQLite.** genera
4cc0: 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20  tes two C files 
4cd0: 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20  "opcodes.h" and 
4ce0: 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73  "opcodes.c" by s
4cf0: 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20  canning this.** 
4d00: 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  file looking for
4d10: 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69   lines that begi
4d20: 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f  n with "case OP_
4d30: 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e  ".  The opcodes.
4d40: 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20  h files.** will 
4d50: 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23  be filled with #
4d60: 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76  defines that giv
4d70: 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  e unique integer
4d80: 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a   values to each.
4d90: 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68  ** opcode and th
4da0: 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65  e opcodes.c file
4db0: 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20   is filled with 
4dc0: 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  an array of stri
4dd0: 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63  ngs where.** eac
4de0: 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20  h string is the 
4df0: 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f  symbolic name fo
4e00: 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  r the correspond
4e10: 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20  ing opcode.  If 
4e20: 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74  the.** case stat
4e30: 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65  ement is followe
4e40: 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f  d by a comment o
4e50: 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73  f the form "/# s
4e60: 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a  ame as ... #/".*
4e70: 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69  * that comment i
4e80: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
4e90: 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c  ine the particul
4ea0: 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ar value of the 
4eb0: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74  opcode..**.** Ot
4ec0: 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  her keywords in 
4ed0: 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74  the comment that
4ee0: 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61   follows each ca
4ef0: 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  se are used to.*
4f00: 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  * construct the 
4f10: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
4f20: 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69  R value that ini
4f30: 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50  tializes opcodeP
4f40: 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65  roperty[]..** Ke
4f50: 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20  ywords include: 
4f60: 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f  in1, in2, in3, o
4f70: 75 74 32 5f 70 72 65 72 65 6c 65 61 73 65 2c 20  ut2_prerelease, 
4f80: 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65  out2, out3.  See
4f90: 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65  .** the mkopcode
4fa0: 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72  h.awk script for
4fb0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
4fc0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44  rmation..**.** D
4fd0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f  ocumentation abo
4fe0: 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20  ut VDBE opcodes 
4ff0: 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  is generated by 
5000: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69  scanning this fi
5010: 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20  le.** for lines 
5020: 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20  of that contain 
5030: 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74  "Opcode:".  That
5040: 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75   line and all su
5050: 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d  bsequent.** comm
5060: 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73  ent lines are us
5070: 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
5080: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f  tion of the opco
5090: 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74  de.html document
50a0: 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  ation.** file..*
50b0: 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a  *.** SUMMARY:.**
50c0: 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69  .**     Formatti
50d0: 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  ng is important 
50e0: 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20  to scripts that 
50f0: 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a  scan this file..
5100: 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65  **     Do not de
5110: 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66  viate from the f
5120: 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20  ormatting style 
5130: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
5140: 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**.***********
5150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5190: 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  **/../* Opcode: 
51a0: 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a   Goto * P2 * * *
51b0: 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64  .**.** An uncond
51c0: 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20  itional jump to 
51d0: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54  address P2..** T
51e0: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
51f0: 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c  ion executed wil
5200: 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65  l be .** the one
5210: 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f   at index P2 fro
5220: 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
5230: 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61  of.** the progra
5240: 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  m..*/.case OP_Go
5250: 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  to: {           
5260: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 70    /* jump */.  p
5270: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
5280: 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74  ..  /* Opcodes t
5290: 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
52a0: 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20  the bottom of a 
52b0: 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f  loop (OP_Next, O
52c0: 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f  P_Prev,.  ** OP_
52d0: 56 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53 65 74  VNext, OP_RowSet
52e0: 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74  Next, or OP_Sort
52f0: 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70  erNext) all jump
5300: 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20   here upon.  ** 
5310: 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65  completion.  Che
5320: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c  ck to see if sql
5330: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29  ite3_interrupt()
5340: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
5350: 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20  .  ** or if the 
5360: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
5370: 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e  k needs to be in
5380: 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a  voked. .  **.  *
5390: 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73 65 73  * This code uses
53a0: 20 75 6e 73 74 72 75 63 74 75 72 65 64 20 22 67   unstructured "g
53b0: 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20  oto" statements 
53c0: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f  and does not loo
53d0: 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75  k clean..  ** Bu
53e0: 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75  t that is not du
53f0: 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69  e to sloppy codi
5400: 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65 20 63  ng habits. The c
5410: 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e 20 74  ode is written t
5420: 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72  his.  ** way for
5430: 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f   performance, to
5440: 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f   avoid having to
5450: 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75   run the interru
5460: 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a  pt and progress.
5470: 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65    ** checks on e
5480: 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68  very opcode.  Th
5490: 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33  is helps sqlite3
54a0: 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61  _step() to run a
54b0: 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66  bout 1.5%.  ** f
54c0: 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20  aster according 
54d0: 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74  to "valgrind --t
54e0: 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20  ool=cachegrind" 
54f0: 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  */.check_for_int
5500: 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20 64 62  errupt:.  if( db
5510: 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74  ->u1.isInterrupt
5520: 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  ed ) goto abort_
5530: 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74  due_to_interrupt
5540: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
5550: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
5560: 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c  ALLBACK.  /* Cal
5570: 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  l the progress c
5580: 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73  allback if it is
5590: 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20   configured and 
55a0: 74 68 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d  the required num
55b0: 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45  ber.  ** of VDBE
55c0: 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20 65   ops have been e
55d0: 78 65 63 75 74 65 64 20 28 65 69 74 68 65 72 20  xecuted (either 
55e0: 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63  since this invoc
55f0: 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71  ation of.  ** sq
5600: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 29 20  lite3VdbeExec() 
5610: 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69  or since last ti
5620: 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  me the progress 
5630: 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c  callback was cal
5640: 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68  led)..  ** If th
5650: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
5660: 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ack returns non-
5670: 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76  zero, exit the v
5680: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77  irtual machine w
5690: 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74 75 72  ith.  ** a retur
56a0: 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42  n code SQLITE_AB
56b0: 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ORT..  */.  if( 
56c0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30  db->xProgress!=0
56d0: 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72   && nVmStep>=nPr
56e0: 6f 67 72 65 73 73 4c 69 6d 69 74 20 29 7b 0a 20  ogressLimit ){. 
56f0: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
5700: 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29  ProgressOps!=0 )
5710: 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c  ;.    nProgressL
5720: 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b  imit = nVmStep +
5730: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
5740: 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d  s - (nVmStep%db-
5750: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a  >nProgressOps);.
5760: 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f      if( db->xPro
5770: 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72  gress(db->pProgr
5780: 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20 20 20  essArg) ){.     
5790: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
57a0: 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 67 6f  ERRUPT;.      go
57b0: 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
57c0: 6c 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  lt;.    }.  }.#e
57d0: 6e 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b  ndif.  .  break;
57e0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
57f0: 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20  Gosub P1 P2 * * 
5800: 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
5810: 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73  e current addres
5820: 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20  s onto register 
5830: 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a  P1.** and then j
5840: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
5850: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  2..*/.case OP_Go
5860: 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  sub: {          
5870: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
5880: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
5890: 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
58a0: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
58b0: 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  ) );.  pIn1 = &a
58c0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
58d0: 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66  assert( (pIn1->f
58e0: 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d  lags & MEM_Dyn)=
58f0: 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  =0 );.  memAbout
5900: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
5910: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
5920: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49   = MEM_Int;.  pI
5930: 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20  n1->u.i = pc;.  
5940: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
5950: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20  Op->p1, pIn1);. 
5960: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
5970: 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
5980: 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72  * Opcode:  Retur
5990: 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  n P1 * * * *.**.
59a0: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e  ** Jump to the n
59b0: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
59c0: 61 66 74 65 72 20 74 68 65 20 61 64 64 72 65 73  after the addres
59d0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
59e0: 2e 20 20 41 66 74 65 72 0a 2a 2a 20 74 68 65 20  .  After.** the 
59f0: 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50  jump, register P
5a00: 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69  1 becomes undefi
5a10: 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ned..*/.case OP_
5a20: 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20  Return: {       
5a30: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
5a40: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
5a50: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
5a60: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45   pIn1->flags==ME
5a70: 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20 3d 20  M_Int );.  pc = 
5a80: 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a  (int)pIn1->u.i;.
5a90: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
5aa0: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
5ab0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
5ac0: 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74  code: InitCorout
5ad0: 69 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ine P1 P2 P3 * *
5ae0: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65  .**.** Set up re
5af0: 67 69 73 74 65 72 20 50 31 20 73 6f 20 74 68 61  gister P1 so tha
5b00: 74 20 69 74 20 77 69 6c 6c 20 4f 50 5f 59 69 65  t it will OP_Yie
5b10: 6c 64 20 74 6f 20 74 68 65 20 63 6f 2d 72 6f 75  ld to the co-rou
5b20: 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20  tine.** located 
5b30: 61 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a 2a  at address P3..*
5b40: 2a 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74 68  *.** If P2!=0 th
5b50: 65 6e 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e  en the co-routin
5b60: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
5b70: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
5b80: 6c 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63  lows.** this opc
5b90: 6f 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76  ode.  So jump ov
5ba0: 65 72 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e  er the co-routin
5bb0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
5bc0: 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20 50   to.** address P
5bd0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  2..*/.case OP_In
5be0: 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20  itCoroutine: {  
5bf0: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
5c00: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
5c10: 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28  0 &&  pOp->p1<=(
5c20: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
5c30: 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  or) );.  assert(
5c40: 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70   pOp->p2>=0 && p
5c50: 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
5c60: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
5c70: 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33  p3>=0 && pOp->p3
5c80: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75  <p->nOp );.  pOu
5c90: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
5ca0: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 21 56  1];.  assert( !V
5cb0: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f  dbeMemDynamic(pO
5cc0: 75 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  ut) );.  pOut->u
5cd0: 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31  .i = pOp->p3 - 1
5ce0: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
5cf0: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28  = MEM_Int;.  if(
5d00: 20 70 4f 70 2d 3e 70 32 20 29 20 70 63 20 3d 20   pOp->p2 ) pc = 
5d10: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62  pOp->p2 - 1;.  b
5d20: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
5d30: 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e  de:  EndCoroutin
5d40: 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
5d50: 2a 2a 20 54 68 65 20 69 6e 73 74 72 75 63 74 69  ** The instructi
5d60: 6f 6e 20 61 74 20 74 68 65 20 61 64 64 72 65 73  on at the addres
5d70: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
5d80: 20 69 73 20 61 6e 20 4f 50 5f 59 69 65 6c 64 2e   is an OP_Yield.
5d90: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
5da0: 50 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20  P2 parameter of 
5db0: 74 68 61 74 20 4f 50 5f 59 69 65 6c 64 2e 0a 2a  that OP_Yield..*
5dc0: 2a 20 41 66 74 65 72 20 74 68 65 20 6a 75 6d 70  * After the jump
5dd0: 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65  , register P1 be
5de0: 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e  comes undefined.
5df0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43  .*/.case OP_EndC
5e00: 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20  oroutine: {     
5e10: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
5e20: 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65    VdbeOp *pCalle
5e30: 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  r;.  pIn1 = &aMe
5e40: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
5e50: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
5e60: 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
5e70: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e  assert( pIn1->u.
5e80: 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e  i>=0 && pIn1->u.
5e90: 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43  i<p->nOp );.  pC
5ea0: 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e  aller = &aOp[pIn
5eb0: 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72  1->u.i];.  asser
5ec0: 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f  t( pCaller->opco
5ed0: 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a  de==OP_Yield );.
5ee0: 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65    assert( pCalle
5ef0: 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c  r->p2>=0 && pCal
5f00: 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29  ler->p2<p->nOp )
5f10: 3b 0a 20 20 70 63 20 3d 20 70 43 61 6c 6c 65 72  ;.  pc = pCaller
5f20: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 70 49 6e 31  ->p2 - 1;.  pIn1
5f30: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
5f40: 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b  defined;.  break
5f50: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
5f60: 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20 2a   Yield P1 P2 * *
5f70: 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68   *.**.** Swap th
5f80: 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  e program counte
5f90: 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65  r with the value
5fa0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
5fb0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f  .**.** If the co
5fc0: 2d 72 6f 75 74 69 6e 65 20 65 6e 64 73 20 77 69  -routine ends wi
5fd0: 74 68 20 4f 50 5f 59 69 65 6c 64 20 6f 72 20 4f  th OP_Yield or O
5fe0: 50 5f 52 65 74 75 72 6e 20 74 68 65 6e 20 63 6f  P_Return then co
5ff0: 6e 74 69 6e 75 65 0a 2a 2a 20 74 6f 20 74 68 65  ntinue.** to the
6000: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
6010: 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
6020: 6f 2d 72 6f 75 74 69 6e 65 20 65 6e 64 73 20 77  o-routine ends w
6030: 69 74 68 0a 2a 2a 20 4f 50 5f 45 6e 64 43 6f 72  ith.** OP_EndCor
6040: 6f 75 74 69 6e 65 2c 20 6a 75 6d 70 20 69 6d 6d  outine, jump imm
6050: 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
6060: 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64  */.case OP_Yield
6070: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
6080: 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20  * in1, jump */. 
6090: 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70   int pcDest;.  p
60a0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
60b0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
60c0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
60d0: 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20  EM_Dyn)==0 );.  
60e0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
60f0: 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74 20  M_Int;.  pcDest 
6100: 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69  = (int)pIn1->u.i
6110: 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20  ;.  pIn1->u.i = 
6120: 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  pc;.  REGISTER_T
6130: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
6140: 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 63 44 65  n1);.  pc = pcDe
6150: 73 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  st;.  break;.}..
6160: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74  /* Opcode:  Halt
6170: 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50 33  IfNull  P1 P2 P3
6180: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
6190: 69 73 3a 20 20 69 66 20 72 5b 50 33 5d 3d 6e 75  is:  if r[P3]=nu
61a0: 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68  ll halt.**.** Ch
61b0: 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e  eck the value in
61c0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49   register P3.  I
61d0: 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65  f it is NULL the
61e0: 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20  n Halt using.** 
61f0: 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32  parameter P1, P2
6200: 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74  , and P4 as if t
6210: 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20  his were a Halt 
6220: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
6230: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e   the.** value in
6240: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
6250: 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
6260: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61  his routine is a
6270: 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50   no-op..** The P
6280: 35 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f 75  5 parameter shou
6290: 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65  ld be 1..*/.case
62a0: 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20   OP_HaltIfNull: 
62b0: 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f  {      /* in3 */
62c0: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
62d0: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
62e0: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
62f0: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72  EM_Null)==0 ) br
6300: 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  eak;.  /* Fall t
6310: 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48  hrough into OP_H
6320: 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63  alt */.}../* Opc
6330: 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32  ode:  Halt P1 P2
6340: 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45   * P4 P5.**.** E
6350: 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  xit immediately.
6360: 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f    All open curso
6370: 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73  rs, etc are clos
6380: 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61  ed.** automatica
6390: 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  lly..**.** P1 is
63a0: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65   the result code
63b0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
63c0: 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c  ite3_exec(), sql
63d0: 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a  ite3_reset(),.**
63e0: 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61   or sqlite3_fina
63f0: 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e  lize().  For a n
6400: 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73  ormal halt, this
6410: 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54   should be SQLIT
6420: 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72  E_OK (0)..** For
6430: 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20   errors, it can 
6440: 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61  be some other va
6450: 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74  lue.  If P1!=0 t
6460: 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65  hen P2 will dete
6470: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
6480: 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62   or not to rollb
6490: 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20  ack the current 
64a0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f  transaction.  Do
64b0: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a   not rollback.**
64c0: 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e   if P2==OE_Fail.
64d0: 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b   Do the rollback
64e0: 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62   if P2==OE_Rollb
64f0: 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f  ack.  If P2==OE_
6500: 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62  Abort,.** then b
6510: 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e  ack out all chan
6520: 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63  ges that have oc
6530: 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68  curred during th
6540: 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20  is execution of 
6550: 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74  the.** VDBE, but
6560: 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   do not rollback
6570: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
6580: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  . .**.** If P4 i
6590: 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20  s not null then 
65a0: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d  it is an error m
65b0: 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a  essage string..*
65c0: 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76 61 6c  *.** P5 is a val
65d0: 75 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64  ue between 0 and
65e0: 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20 74   4, inclusive, t
65f0: 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65  hat modifies the
6600: 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a   P4 string..**.*
6610: 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63 68 61  *    0:  (no cha
6620: 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e  nge).**    1:  N
6630: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e  OT NULL contrain
6640: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20  t failed: P4.** 
6650: 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20 63 6f     2:  UNIQUE co
6660: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
6670: 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48   P4.**    3:  CH
6680: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  ECK constraint f
6690: 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20  ailed: P4.**    
66a0: 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20  4:  FOREIGN KEY 
66b0: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
66c0: 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50  d: P4.**.** If P
66d0: 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e  5 is not zero an
66e0: 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68  d P4 is NULL, th
66f0: 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20 61 66  en everything af
6700: 74 65 72 20 74 68 65 20 22 3a 22 20 69 73 0a 2a  ter the ":" is.*
6710: 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a  * omitted..**.**
6720: 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70   There is an imp
6730: 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20 30  lied "Halt 0 0 0
6740: 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  " instruction in
6750: 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65  serted at the ve
6760: 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65  ry end of.** eve
6770: 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20  ry program.  So 
6780: 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20  a jump past the 
6790: 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  last instruction
67a0: 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a   of the program.
67b0: 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  ** is the same a
67c0: 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74  s executing Halt
67d0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c  ..*/.case OP_Hal
67e0: 74 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  t: {.  const cha
67f0: 72 20 2a 7a 54 79 70 65 3b 0a 20 20 63 6f 6e 73  r *zType;.  cons
6800: 74 20 63 68 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b  t char *zLogFmt;
6810: 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d  ..  if( pOp->p1=
6820: 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d  =SQLITE_OK && p-
6830: 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f  >pFrame ){.    /
6840: 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70  * Halt the sub-p
6850: 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63  rogram. Return c
6860: 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61  ontrol to the pa
6870: 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20  rent frame. */. 
6880: 20 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46     VdbeFrame *pF
6890: 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rame = p->pFrame
68a0: 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20  ;.    p->pFrame 
68b0: 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  = pFrame->pParen
68c0: 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65  t;.    p->nFrame
68d0: 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  --;.    sqlite3V
68e0: 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62  dbeSetChanges(db
68f0: 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20  , p->nChange);. 
6900: 20 20 20 70 63 20 3d 20 73 71 6c 69 74 65 33 56     pc = sqlite3V
6910: 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28  dbeFrameRestore(
6920: 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73  pFrame);.    las
6930: 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
6940: 74 52 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20  tRowid;.    if( 
6950: 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p2==OE_Igno
6960: 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  re ){.      /* I
6970: 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 20 69 73  nstruction pc is
6980: 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20   the OP_Program 
6990: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65  that invoked the
69a0: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20   sub-program .  
69b0: 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79      ** currently
69c0: 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49   being halted. I
69d0: 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75 63  f the p2 instruc
69e0: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f  tion of this OP_
69f0: 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e  Halt.      ** in
6a00: 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74  struction is set
6a10: 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74   to OE_Ignore, t
6a20: 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67  hen the sub-prog
6a30: 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a  ram is throwing.
6a40: 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f        ** an IGNO
6a50: 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e  RE exception. In
6a60: 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20   this case jump 
6a70: 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 73  to the address s
6a80: 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a  pecified.      *
6a90: 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20 74  * as the p2 of t
6aa0: 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72  he calling OP_Pr
6ab0: 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20  ogram.  */.     
6ac0: 20 70 63 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d   pc = p->aOp[pc]
6ad0: 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20  .p2-1;.    }.   
6ae0: 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20   aOp = p->aOp;. 
6af0: 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65     aMem = p->aMe
6b00: 6d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  m;.    break;.  
6b10: 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d  }.  p->rc = pOp-
6b20: 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41  >p1;.  p->errorA
6b30: 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d  ction = (u8)pOp-
6b40: 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70  >p2;.  p->pc = p
6b50: 63 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29  c;.  if( p->rc )
6b60: 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  {.    if( pOp->p
6b70: 35 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69  5 ){.      stati
6b80: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63  c const char * c
6b90: 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20  onst azType[] = 
6ba0: 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55  { "NOT NULL", "U
6bb0: 4e 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c  NIQUE", "CHECK",
6bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
6bf0: 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20  OREIGN KEY" };. 
6c00: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
6c10: 2d 3e 70 35 3e 3d 31 20 26 26 20 70 4f 70 2d 3e  ->p5>=1 && pOp->
6c20: 70 35 3c 3d 34 20 29 3b 0a 20 20 20 20 20 20 74  p5<=4 );.      t
6c30: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
6c40: 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73  ==1 );.      tes
6c50: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d  tcase( pOp->p5==
6c60: 32 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  2 );.      testc
6c70: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20  ase( pOp->p5==3 
6c80: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
6c90: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b  e( pOp->p5==4 );
6ca0: 0a 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20 61  .      zType = a
6cb0: 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d  zType[pOp->p5-1]
6cc0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
6cd0: 20 20 20 7a 54 79 70 65 20 3d 20 30 3b 0a 20 20     zType = 0;.  
6ce0: 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
6cf0: 7a 54 79 70 65 21 3d 30 20 7c 7c 20 70 4f 70 2d  zType!=0 || pOp-
6d00: 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 20 20  >p4.z!=0 );.    
6d10: 7a 4c 6f 67 46 6d 74 20 3d 20 22 61 62 6f 72 74  zLogFmt = "abort
6d20: 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20   at %d in [%s]: 
6d30: 25 73 22 3b 0a 20 20 20 20 69 66 28 20 7a 54 79  %s";.    if( zTy
6d40: 70 65 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  pe && pOp->p4.z 
6d50: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
6d60: 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
6d70: 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 20 63  rrMsg, db, "%s c
6d80: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
6d90: 3a 20 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20  : %s", .        
6da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a                 z
6db0: 54 79 70 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  Type, pOp->p4.z)
6dc0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
6dd0: 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
6de0: 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
6df0: 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
6e00: 20 64 62 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e   db, "%s", pOp->
6e10: 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65  p4.z);.    }else
6e20: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  {.      sqlite3S
6e30: 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
6e40: 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 20 63 6f  rMsg, db, "%s co
6e50: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22  nstraint failed"
6e60: 2c 20 7a 54 79 70 65 29 3b 0a 20 20 20 20 7d 0a  , zType);.    }.
6e70: 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28      sqlite3_log(
6e80: 70 4f 70 2d 3e 70 31 2c 20 7a 4c 6f 67 46 6d 74  pOp->p1, zLogFmt
6e90: 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70  , pc, p->zSql, p
6ea0: 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a  ->zErrMsg);.  }.
6eb0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
6ec0: 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73  beHalt(p);.  ass
6ed0: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
6ee0: 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  BUSY || rc==SQLI
6ef0: 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
6f00: 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69  ITE_ERROR );.  i
6f10: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
6f20: 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20  SY ){.    p->rc 
6f30: 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
6f40: 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  SY;.  }else{.   
6f50: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
6f60: 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63  ITE_OK || (p->rc
6f70: 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43  &0xff)==SQLITE_C
6f80: 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20  ONSTRAINT );.   
6f90: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
6fa0: 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44  ITE_OK || db->nD
6fb0: 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c  eferredCons>0 ||
6fc0: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
6fd0: 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72  mCons>0 );.    r
6fe0: 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49  c = p->rc ? SQLI
6ff0: 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54  TE_ERROR : SQLIT
7000: 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f  E_DONE;.  }.  go
7010: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
7020: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
7030: 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20  teger P1 P2 * * 
7040: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
7050: 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68  [P2]=P1.**.** Th
7060: 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  e 32-bit integer
7070: 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69   value P1 is wri
7080: 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tten into regist
7090: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
70a0: 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20  P_Integer: {    
70b0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
70c0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75  release */.  pOu
70d0: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31  t->u.i = pOp->p1
70e0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
70f0: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a   Opcode: Int64 *
7100: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
7110: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
7120: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
7130: 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62  ointer to a 64-b
7140: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
7150: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
7160: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
7170: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
7180: 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20  OP_Int64: {     
7190: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
71a0: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
71b0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49  sert( pOp->p4.pI
71c0: 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  64!=0 );.  pOut-
71d0: 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e  >u.i = *pOp->p4.
71e0: 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pI64;.  break;.}
71f0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
7200: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
7210: 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  OINT./* Opcode: 
7220: 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a  Real * P2 * P4 *
7230: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
7240: 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  P2]=P4.**.** P4 
7250: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
7260: 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e  a 64-bit floatin
7270: 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a  g point value..*
7280: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
7290: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
72a0: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
72b0: 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Real: {         
72c0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
72d0: 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65  _FLOAT, out2-pre
72e0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75  release */.  pOu
72f0: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52  t->flags = MEM_R
7300: 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21  eal;.  assert( !
7310: 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f  sqlite3IsNaN(*pO
7320: 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a  p->p4.pReal) );.
7330: 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70    pOut->r = *pOp
7340: 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72  ->p4.pReal;.  br
7350: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
7360: 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67  * Opcode: String
7370: 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  8 * P2 * P4 *.**
7380: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
7390: 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70  ='P4'.**.** P4 p
73a0: 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74  oints to a nul t
73b0: 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
73c0: 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63  string. This opc
73d0: 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d  ode is transform
73e0: 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f  ed .** into an O
73f0: 50 5f 53 74 72 69 6e 67 20 62 65 66 6f 72 65 20  P_String before 
7400: 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20 66  it is executed f
7410: 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69 6d  or the first tim
7420: 65 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68  e.  During.** th
7430: 69 73 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f  is transformatio
7440: 6e 2c 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66  n, the length of
7450: 20 73 74 72 69 6e 67 20 50 34 20 69 73 20 63 6f   string P4 is co
7460: 6d 70 75 74 65 64 20 61 6e 64 20 73 74 6f 72 65  mputed and store
7470: 64 0a 2a 2a 20 61 73 20 74 68 65 20 50 31 20 70  d.** as the P1 p
7480: 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73  arameter..*/.cas
7490: 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20  e OP_String8: { 
74a0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
74b0: 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75  as TK_STRING, ou
74c0: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
74d0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
74e0: 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70  p4.z!=0 );.  pOp
74f0: 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74  ->opcode = OP_St
7500: 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20  ring;.  pOp->p1 
7510: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
7520: 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23  0(pOp->p4.z);..#
7530: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
7540: 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65  IT_UTF16.  if( e
7550: 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f  ncoding!=SQLITE_
7560: 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d  UTF8 ){.    rc =
7570: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
7580: 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d  etStr(pOut, pOp-
7590: 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54  >p4.z, -1, SQLIT
75a0: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53  E_UTF8, SQLITE_S
75b0: 54 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20  TATIC);.    if( 
75c0: 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49  rc==SQLITE_TOOBI
75d0: 47 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67  G ) goto too_big
75e0: 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45  ;.    if( SQLITE
75f0: 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65  _OK!=sqlite3Vdbe
7600: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
7610: 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29  Out, encoding) )
7620: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
7630: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e    assert( pOut->
7640: 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a  zMalloc==pOut->z
7650: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
7660: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pOut->flags & ME
7670: 4d 5f 44 79 6e 20 29 3b 0a 20 20 20 20 70 4f 75  M_Dyn );.    pOu
7680: 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  t->zMalloc = 0;.
7690: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
76a0: 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20  |= MEM_Static;. 
76b0: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26     pOut->flags &
76c0: 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20  = ~MEM_Dyn;.    
76d0: 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
76e0: 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20  =P4_DYNAMIC ){. 
76f0: 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
7700: 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a  ee(db, pOp->p4.z
7710: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70  );.    }.    pOp
7720: 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59  ->p4type = P4_DY
7730: 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e  NAMIC;.    pOp->
7740: 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a  p4.z = pOut->z;.
7750: 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f      pOp->p1 = pO
7760: 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69  ut->n;.  }.#endi
7770: 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e  f.  if( pOp->p1>
7780: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
7790: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
77a0: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
77b0: 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61  big;.  }.  /* Fa
77c0: 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
77d0: 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f  e next case, OP_
77e0: 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f  String */.}.  ./
77f0: 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67  * Opcode: String
7800: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
7810: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
7820: 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a  ='P4' (len=P1).*
7830: 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20  *.** The string 
7840: 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67  value P4 of leng
7850: 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69 73  th P1 (bytes) is
7860: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
7870: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
7880: 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20  OP_String: {    
7890: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
78a0: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
78b0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21  sert( pOp->p4.z!
78c0: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  =0 );.  pOut->fl
78d0: 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
78e0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
78f0: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70  m;.  pOut->z = p
7900: 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74  Op->p4.z;.  pOut
7910: 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  ->n = pOp->p1;. 
7920: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
7930: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
7940: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
7950: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
7960: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20  /* Opcode: Null 
7970: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
7980: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 2e  Synopsis:  r[P2.
7990: 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20  .P3]=NULL.**.** 
79a0: 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74  Write a NULL int
79b0: 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 20  o registers P2. 
79c0: 20 49 66 20 50 33 20 67 72 65 61 74 65 72 20 74   If P3 greater t
79d0: 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73  han P2, then als
79e0: 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20  o write.** NULL 
79f0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
7a00: 20 61 6e 64 20 65 76 65 72 79 20 72 65 67 69 73   and every regis
7a10: 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50  ter in between P
7a20: 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33  2 and P3.  If P3
7a30: 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
7a40: 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50   P2 (typically P
7a50: 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20  3 is zero) then 
7a60: 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50 32  only register P2
7a70: 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55   is.** set to NU
7a80: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  LL..**.** If the
7a90: 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e   P1 value is non
7aa0: 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f  -zero, then also
7ab0: 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65   set the MEM_Cle
7ac0: 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61  ared flag so tha
7ad0: 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73  t.** NULL values
7ae0: 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72   will not compar
7af0: 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20  e equal even if 
7b00: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
7b10: 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65   set on.** OP_Ne
7b20: 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61   or OP_Eq..*/.ca
7b30: 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20  se OP_Null: {   
7b40: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7b50: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7b60: 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e  int cnt;.  u16 n
7b70: 75 6c 6c 46 6c 61 67 3b 0a 20 20 63 6e 74 20 3d  ullFlag;.  cnt =
7b80: 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32   pOp->p3-pOp->p2
7b90: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
7ba0: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
7bb0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
7bc0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c  Out->flags = nul
7bd0: 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20  lFlag = pOp->p1 
7be0: 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f  ? (MEM_Null|MEM_
7bf0: 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e  Cleared) : MEM_N
7c00: 75 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e  ull;.  while( cn
7c10: 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b  t>0 ){.    pOut+
7c20: 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  +;.    memAboutT
7c30: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
7c40: 3b 0a 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c  ;.    VdbeMemRel
7c50: 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20 20  ease(pOut);.    
7c60: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75  pOut->flags = nu
7c70: 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74 2d  llFlag;.    cnt-
7c80: 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  -;.  }.  break;.
7c90: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  }../* Opcode: So
7ca0: 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20  ftNull P1 * * * 
7cb0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
7cc0: 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a  r[P1]=NULL.**.**
7cd0: 20 53 65 74 20 72 65 67 69 73 74 65 72 20 50 31   Set register P1
7ce0: 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c   to have the val
7cf0: 75 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20  ue NULL as seen 
7d00: 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  by the OP_MakeRe
7d10: 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74  cord.** instruct
7d20: 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  ion, but do not 
7d30: 66 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20  free any string 
7d40: 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61  or blob memory a
7d50: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a  ssociated with.*
7d60: 2a 20 74 68 65 20 72 65 67 69 73 74 65 72 2c 20  * the register, 
7d70: 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 20 76  so that if the v
7d80: 61 6c 75 65 20 77 61 73 20 61 20 73 74 72 69 6e  alue was a strin
7d90: 67 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77  g or blob that w
7da0: 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79  as.** previously
7db0: 20 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50   copied using OP
7dc0: 5f 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69  _SCopy, the copi
7dd0: 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65  es will continue
7de0: 20 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f   to be valid..*/
7df0: 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c  .case OP_SoftNul
7e00: 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  l: {.  assert( p
7e10: 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
7e20: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p1<=(p->nMem-p-
7e30: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
7e40: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
7e50: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  >p1];.  pOut->fl
7e60: 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61  ags = (pOut->fla
7e70: 67 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e 4d 45  gs|MEM_Null)&~ME
7e80: 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62  M_Undefined;.  b
7e90: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
7ea0: 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a  de: Blob P1 P2 *
7eb0: 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
7ec0: 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e  s: r[P2]=P4 (len
7ed0: 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f  =P1).**.** P4 po
7ee0: 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f  ints to a blob o
7ef0: 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20  f data P1 bytes 
7f00: 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69  long.  Store thi
7f10: 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67  s.** blob in reg
7f20: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
7f30: 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20  e OP_Blob: {    
7f40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
7f50: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7f60: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
7f70: 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41  >p1 <= SQLITE_MA
7f80: 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71  X_LENGTH );.  sq
7f90: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
7fa0: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
7fb0: 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20  .z, pOp->p1, 0, 
7fc0: 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  0);.  pOut->enc 
7fd0: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
7fe0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
7ff0: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
8000: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8010: 56 61 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a  Variable P1 P2 *
8020: 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
8030: 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74  s: r[P2]=paramet
8040: 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20  er(P1,P4).**.** 
8050: 54 72 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c  Transfer the val
8060: 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72  ues of bound par
8070: 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72  ameter P1 into r
8080: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a  egister P2.**.**
8090: 20 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65   If the paramete
80a0: 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e  r is named, then
80b0: 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72   its name appear
80c0: 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20  s in P4..** The 
80d0: 50 34 20 76 61 6c 75 65 20 69 73 20 75 73 65 64  P4 value is used
80e0: 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e 64   by sqlite3_bind
80f0: 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28  _parameter_name(
8100: 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61  )..*/.case OP_Va
8110: 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20  riable: {       
8120: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
8130: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d 65 6d  release */.  Mem
8140: 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a   *pVar;       /*
8150: 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61   Value being tra
8160: 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61  nsferred */..  a
8170: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
8180: 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e   && pOp->p1<=p->
8190: 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74  nVar );.  assert
81a0: 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c  ( pOp->p4.z==0 |
81b0: 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e  | pOp->p4.z==p->
81c0: 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d  azVar[pOp->p1-1]
81d0: 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d   );.  pVar = &p-
81e0: 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20  >aVar[pOp->p1 - 
81f0: 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  1];.  if( sqlite
8200: 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
8210: 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Var) ){.    goto
8220: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
8230: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
8240: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
8250: 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63  pVar, MEM_Static
8260: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
8270: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
8280: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
8290: 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50  pcode: Move P1 P
82a0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
82b0: 70 73 69 73 3a 20 20 72 5b 50 32 40 50 33 5d 3d  psis:  r[P2@P3]=
82c0: 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d  r[P1@P3].**.** M
82d0: 6f 76 65 20 74 68 65 20 76 61 6c 75 65 73 20 69  ove the values i
82e0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50  n register P1..P
82f0: 31 2b 50 33 20 6f 76 65 72 20 69 6e 74 6f 0a 2a  1+P3 over into.*
8300: 2a 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e  * registers P2..
8310: 50 32 2b 50 33 2e 20 20 52 65 67 69 73 74 65 72  P2+P3.  Register
8320: 73 20 50 31 2e 2e 50 31 2b 50 33 20 61 72 65 0a  s P1..P1+P3 are.
8330: 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20  ** left holding 
8340: 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61  a NULL.  It is a
8350: 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69  n error for regi
8360: 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50  ster ranges.** P
8370: 31 2e 2e 50 31 2b 50 33 20 61 6e 64 20 50 32 2e  1..P1+P3 and P2.
8380: 2e 50 32 2b 50 33 20 74 6f 20 6f 76 65 72 6c 61  .P2+P3 to overla
8390: 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f  p..*/.case OP_Mo
83a0: 76 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4d  ve: {.  char *zM
83b0: 61 6c 6c 6f 63 3b 20 20 20 2f 2a 20 48 6f 6c 64  alloc;   /* Hold
83c0: 69 6e 67 20 76 61 72 69 61 62 6c 65 20 66 6f 72  ing variable for
83d0: 20 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f 72   allocated memor
83e0: 79 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20  y */.  int n;   
83f0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
8400: 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c  r of registers l
8410: 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20  eft to copy */. 
8420: 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
8430: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
8440: 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20   copy from */.  
8450: 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20  int p2;         
8460: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
8470: 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20  copy to */..  n 
8480: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20  = pOp->p3;.  p1 
8490: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20  = pOp->p1;.  p2 
84a0: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
84b0: 65 72 74 28 20 6e 3e 3d 30 20 26 26 20 70 31 3e  ert( n>=0 && p1>
84c0: 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61  0 && p2>0 );.  a
84d0: 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20  ssert( p1+n<=p2 
84e0: 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a  || p2+n<=p1 );..
84f0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
8500: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
8510: 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20  em[p2];.  do{.  
8520: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d    assert( pOut<=
8530: 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70  &aMem[(p->nMem-p
8540: 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
8550: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c     assert( pIn1<
8560: 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d  =&aMem[(p->nMem-
8570: 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
8580: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
8590: 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
85a0: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
85b0: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
85c0: 20 20 20 7a 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75     zMalloc = pOu
85d0: 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20  t->zMalloc;.    
85e0: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  pOut->zMalloc = 
85f0: 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  0;.    sqlite3Vd
8600: 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20  beMemMove(pOut, 
8610: 70 49 6e 31 29 3b 0a 23 69 66 64 65 66 20 53 51  pIn1);.#ifdef SQ
8620: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
8630: 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46  f( pOut->pScopyF
8640: 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26  rom>=&aMem[p1] &
8650: 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  & pOut->pScopyFr
8660: 6f 6d 3c 26 61 4d 65 6d 5b 70 31 2b 70 4f 70 2d  om<&aMem[p1+pOp-
8670: 3e 70 33 5d 20 29 7b 0a 20 20 20 20 20 20 70 4f  >p3] ){.      pO
8680: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b  ut->pScopyFrom +
8690: 3d 20 70 31 20 2d 20 70 4f 70 2d 3e 70 32 3b 0a  = p1 - pOp->p2;.
86a0: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
86b0: 20 70 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d   pIn1->zMalloc =
86c0: 20 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 52 45   zMalloc;.    RE
86d0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
86e0: 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49  +, pOut);.    pI
86f0: 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b  n1++;.    pOut++
8700: 3b 0a 20 20 7d 77 68 69 6c 65 28 20 6e 2d 2d 20  ;.  }while( n-- 
8710: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
8720: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50  * Opcode: Copy P
8730: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
8740: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33  ynopsis: r[P2@P3
8750: 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a  +1]=r[P1@P3+1].*
8760: 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79  *.** Make a copy
8770: 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 50 31   of registers P1
8780: 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20 72 65 67  ..P1+P3 into reg
8790: 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33  isters P2..P2+P3
87a0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
87b0: 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61  truction makes a
87c0: 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68   deep copy of th
87d0: 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c  e value.  A dupl
87e0: 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65  icate.** is made
87f0: 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f   of any string o
8800: 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e  r blob constant.
8810: 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43    See also OP_SC
8820: 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  opy..*/.case OP_
8830: 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  Copy: {.  int n;
8840: 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b  ..  n = pOp->p3;
8850: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
8860: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
8870: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
8880: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  ];.  assert( pOu
8890: 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68 69  t!=pIn1 );.  whi
88a0: 6c 65 28 20 31 20 29 7b 0a 20 20 20 20 73 71 6c  le( 1 ){.    sql
88b0: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
88c0: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
88d0: 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  1, MEM_Ephem);. 
88e0: 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a     Deephemeraliz
88f0: 65 28 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20  e(pOut);.#ifdef 
8900: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
8910: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
8920: 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20  m = 0;.#endif.  
8930: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
8940: 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33  (pOp->p2+pOp->p3
8950: 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69  -n, pOut);.    i
8960: 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72  f( (n--)==0 ) br
8970: 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  eak;.    pOut++;
8980: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d  .    pIn1++;.  }
8990: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
89a0: 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31  Opcode: SCopy P1
89b0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
89c0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50  opsis: r[P2]=r[P
89d0: 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20  1].**.** Make a 
89e0: 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20  shallow copy of 
89f0: 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f  register P1 into
8a00: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
8a10: 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
8a20: 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61  tion makes a sha
8a30: 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65  llow copy of the
8a40: 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20   value.  If the 
8a50: 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74  value.** is a st
8a60: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68  ring or blob, th
8a70: 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f  en the copy is o
8a80: 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  nly a pointer to
8a90: 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
8aa0: 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68   and hence if th
8ab0: 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67  e original chang
8ac0: 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63  es so will the c
8ad0: 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69  opy..** Worse, i
8ae0: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69  f the original i
8af0: 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74  s deallocated, t
8b00: 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20  he copy becomes 
8b10: 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73  invalid..** Thus
8b20: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73   the program mus
8b30: 74 20 67 75 61 72 61 6e 74 65 65 20 74 68 61 74  t guarantee that
8b40: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69   the original wi
8b50: 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a  ll not change.**
8b60: 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65   during the life
8b70: 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79  time of the copy
8b80: 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74  .  Use OP_Copy t
8b90: 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74  o make a complet
8ba0: 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61  e.** copy..*/.ca
8bb0: 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20  se OP_SCopy: {  
8bc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
8bd0: 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
8be0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
8bf0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
8c00: 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
8c10: 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20   pOut!=pIn1 );. 
8c20: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
8c30: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
8c40: 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d   pIn1, MEM_Ephem
8c50: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
8c60: 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75  _DEBUG.  if( pOu
8c70: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30  t->pScopyFrom==0
8c80: 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46   ) pOut->pScopyF
8c90: 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64  rom = pIn1;.#end
8ca0: 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  if.  break;.}../
8cb0: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74  * Opcode: Result
8cc0: 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Row P1 P2 * * *.
8cd0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 6f 75  ** Synopsis:  ou
8ce0: 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a  tput=r[P1@P2].**
8cf0: 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
8d00: 73 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b  s P1 through P1+
8d10: 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73  P2-1 contain a s
8d20: 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20  ingle row of.** 
8d30: 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70  results. This op
8d40: 63 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20  code causes the 
8d50: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63  sqlite3_step() c
8d60: 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65  all to terminate
8d70: 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49  .** with an SQLI
8d80: 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f  TE_ROW return co
8d90: 64 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75  de and it sets u
8da0: 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  p the sqlite3_st
8db0: 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  mt.** structure 
8dc0: 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73  to provide acces
8dd0: 73 20 74 6f 20 74 68 65 20 72 5b 50 31 5d 2e 2e  s to the r[P1]..
8de0: 72 5b 50 31 2b 50 32 2d 31 5d 20 76 61 6c 75 65  r[P1+P2-1] value
8df0: 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75  s as.** the resu
8e00: 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20  lt row..*/.case 
8e10: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a  OP_ResultRow: {.
8e20: 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69    Mem *pMem;.  i
8e30: 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20  nt i;.  assert( 
8e40: 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70  p->nResColumn==p
8e50: 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65  Op->p2 );.  asse
8e60: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b  rt( pOp->p1>0 );
8e70: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8e80: 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  p1+pOp->p2<=(p->
8e90: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
8ea0: 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  +1 );..#ifndef S
8eb0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
8ec0: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f  ESS_CALLBACK.  /
8ed0: 2a 20 52 75 6e 20 74 68 65 20 70 72 6f 67 72 65  * Run the progre
8ee0: 73 73 20 63 6f 75 6e 74 65 72 20 6a 75 73 74 20  ss counter just 
8ef0: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
8f00: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ..  */.  if( db-
8f10: 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 0a 20 20  >xProgress!=0.  
8f20: 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72   && nVmStep>=nPr
8f30: 6f 67 72 65 73 73 4c 69 6d 69 74 0a 20 20 20 26  ogressLimit.   &
8f40: 26 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28  & db->xProgress(
8f50: 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67  db->pProgressArg
8f60: 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72 63  )!=0.  ){.    rc
8f70: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
8f80: 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 76 64  UPT;.    goto vd
8f90: 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20  be_error_halt;. 
8fa0: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20   }.#endif..  /* 
8fb0: 49 66 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e  If this statemen
8fc0: 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20 69  t has violated i
8fd0: 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
8fe0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
8ff0: 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65  , do.  ** not re
9000: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
9010: 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65 64  of rows modified
9020: 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c  . And do not REL
9030: 45 41 53 45 20 74 68 65 20 73 74 61 74 65 6d 65  EASE the stateme
9040: 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74  nt.  ** transact
9050: 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74 6f  ion. It needs to
9060: 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
9070: 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49 54    */.  if( SQLIT
9080: 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69  E_OK!=(rc = sqli
9090: 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
90a0: 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73 73  , 0)) ){.    ass
90b0: 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26 53  ert( db->flags&S
90c0: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
90d0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
90e0: 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  ->usesStmtJourna
90f0: 6c 20 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  l );.    break;.
9100: 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65    }..  /* If the
9110: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
9120: 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  s flag is set in
9130: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d   sqlite3.flags m
9140: 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20  ask, then .  ** 
9150: 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  DML statements i
9160: 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64  nvoke this opcod
9170: 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20  e to return the 
9180: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a  number of rows .
9190: 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f    ** modified to
91a0: 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20   the user. This 
91b0: 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20  is the only way 
91c0: 74 68 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20  that a VM that. 
91d0: 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74   ** opens a stat
91e0: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
91f0: 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69  n may invoke thi
9200: 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20  s opcode..  **. 
9210: 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73   ** In case this
9220: 20 69 73 20 73 75 63 68 20 61 20 73 74 61 74 65   is such a state
9230: 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20  ment, close any 
9240: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
9250: 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65  ction.  ** opene
9260: 64 20 62 79 20 74 68 69 73 20 56 4d 20 62 65 66  d by this VM bef
9270: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f  ore returning co
9280: 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65  ntrol to the use
9290: 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20  r. This is to.  
92a0: 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74 20 73  ** ensure that s
92b0: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
92c0: 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73  tions are always
92d0: 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65   nested, not ove
92e0: 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49  rlapping..  ** I
92f0: 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65  f the open state
9300: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
9310: 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68   is not closed h
9320: 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73  ere, then the us
9330: 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70  er.  ** may step
9340: 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74   another VM that
9350: 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73   opens its own s
9360: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
9370: 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20  tion. This.  ** 
9380: 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72  may lead to over
9390: 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e  lapping statemen
93a0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a  t transactions..
93b0: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74    **.  ** The st
93c0: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
93d0: 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74  ion is never a t
93e0: 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63  op-level transac
93f0: 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a  tion.  Hence.  *
9400: 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 61  * the RELEASE ca
9410: 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76  ll below can nev
9420: 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20  er fail..  */.  
9430: 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74  assert( p->iStat
9440: 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ement==0 || db->
9450: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
9460: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d  ntRows );.  rc =
9470: 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73   sqlite3VdbeClos
9480: 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41  eStatement(p, SA
9490: 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29  VEPOINT_RELEASE)
94a0: 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
94b0: 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a  !=SQLITE_OK) ){.
94c0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
94d0: 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
94e0: 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75  all ephemeral cu
94f0: 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20  rsor row caches 
9500: 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72  */.  p->cacheCtr
9510: 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20   = (p->cacheCtr 
9520: 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61  + 2)|1;..  /* Ma
9530: 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73 75  ke sure the resu
9540: 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  lts of the curre
9550: 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20  nt row are \000 
9560: 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20  terminated.  ** 
9570: 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73 69  and have an assi
9580: 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65 20  gned type.  The 
9590: 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65  results are de-e
95a0: 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a  phemeralized as.
95b0: 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66 66 65    ** a side effe
95c0: 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20  ct..  */.  pMem 
95d0: 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20  = p->pResultSet 
95e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
95f0: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70  ;.  for(i=0; i<p
9600: 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20  Op->p2; i++){.  
9610: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
9620: 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29  alid(&pMem[i]) )
9630: 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61  ;.    Deephemera
9640: 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  lize(&pMem[i]);.
9650: 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65      assert( (pMe
9660: 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  m[i].flags & MEM
9670: 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20  _Ephem)==0.     
9680: 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b         || (pMem[
9690: 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  i].flags & (MEM_
96a0: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
96b0: 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
96c0: 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e  VdbeMemNulTermin
96d0: 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  ate(&pMem[i]);. 
96e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
96f0: 6d 53 74 6f 72 65 54 79 70 65 28 26 70 4d 65 6d  mStoreType(&pMem
9700: 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  [i]);.    REGIST
9710: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
9720: 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  +i, &pMem[i]);. 
9730: 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c   }.  if( db->mal
9740: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
9750: 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52   no_mem;..  /* R
9760: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57  eturn SQLITE_ROW
9770: 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20  .  */.  p->pc = 
9780: 70 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53  pc + 1;.  rc = S
9790: 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74  QLITE_ROW;.  got
97a0: 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d  o vdbe_return;.}
97b0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e  ../* Opcode: Con
97c0: 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  cat P1 P2 P3 * *
97d0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
97e0: 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a  P3]=r[P2]+r[P1].
97f0: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65  **.** Add the te
9800: 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  xt in register P
9810: 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f  1 onto the end o
9820: 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a  f the text in.**
9830: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
9840: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
9850: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
9860: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74  ..** If either t
9870: 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78 74  he P1 or P2 text
9880: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73   are NULL then s
9890: 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e  tore NULL in P3.
98a0: 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32  .**.**   P3 = P2
98b0: 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20   || P1.**.** It 
98c0: 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50  is illegal for P
98d0: 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74  1 and P3 to be t
98e0: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
98f0: 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20  . Sometimes,.** 
9900: 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61 6d  if P3 is the sam
9910: 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50 32  e register as P2
9920: 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
9930: 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20  tion is able.** 
9940: 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70  to avoid a memcp
9950: 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  y()..*/.case OP_
9960: 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20  Concat: {       
9970: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
9980: 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69  K_CONCAT, in1, i
9990: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n2, out3 */.  i6
99a0: 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31  4 nByte;..  pIn1
99b0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
99c0: 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
99d0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f  m[pOp->p2];.  pO
99e0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
99f0: 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
9a00: 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69  In1!=pOut );.  i
9a10: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
9a20: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26  | pIn2->flags) &
9a30: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
9a40: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
9a50: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
9a60: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69    break;.  }.  i
9a70: 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  f( ExpandBlob(pI
9a80: 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f  n1) || ExpandBlo
9a90: 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e  b(pIn2) ) goto n
9aa0: 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69  o_mem;.  Stringi
9ab0: 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  fy(pIn1, encodin
9ac0: 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28  g);.  Stringify(
9ad0: 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn2, encoding);
9ae0: 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d  .  nByte = pIn1-
9af0: 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20  >n + pIn2->n;.  
9b00: 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c  if( nByte>db->aL
9b10: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
9b20: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
9b30: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
9b40: 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46   }.  MemSetTypeF
9b50: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74  lag(pOut, MEM_St
9b60: 72 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  r);.  if( sqlite
9b70: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
9b80: 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c  t, (int)nByte+2,
9b90: 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a   pOut==pIn2) ){.
9ba0: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
9bb0: 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 75 74 21  .  }.  if( pOut!
9bc0: 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d  =pIn2 ){.    mem
9bd0: 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e  cpy(pOut->z, pIn
9be0: 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a  2->z, pIn2->n);.
9bf0: 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f    }.  memcpy(&pO
9c00: 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20  ut->z[pIn2->n], 
9c10: 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e  pIn1->z, pIn1->n
9c20: 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  );.  pOut->z[nBy
9c30: 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a  te]=0;.  pOut->z
9c40: 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20  [nByte+1] = 0;. 
9c50: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
9c60: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
9c70: 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65  ->n = (int)nByte
9c80: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
9c90: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
9ca0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
9cb0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
9cc0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
9cd0: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
9ce0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
9cf0: 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a  3]=r[P1]+r[P2].*
9d00: 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c  *.** Add the val
9d10: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9d20: 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
9d30: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
9d40: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
9d50: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
9d60: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
9d70: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
9d80: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
9d90: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
9da0: 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20  de: Multiply P1 
9db0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
9dc0: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
9dd0: 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a  P1]*r[P2].**.**.
9de0: 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20  ** Multiply the 
9df0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
9e00: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
9e10: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
9e20: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
9e30: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
9e40: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
9e50: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
9e60: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
9e70: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
9e80: 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20  pcode: Subtract 
9e90: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
9ea0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
9eb0: 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]-r[P1].**.
9ec0: 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65 20  ** Subtract the 
9ed0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
9ee0: 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61  r P1 from the va
9ef0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9f00: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
9f10: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
9f20: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
9f30: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
9f40: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
9f50: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
9f60: 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20   Opcode: Divide 
9f70: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
9f80: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
9f90: 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]/r[P1].**.
9fa0: 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61  ** Divide the va
9fb0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9fc0: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
9fd0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
9fe0: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
9ff0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
a000: 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29  er P3 (P3=P2/P1)
a010: 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  . If the value i
a020: 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  n .** register P
a030: 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  1 is zero, then 
a040: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
a050: 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e  LL. If either in
a060: 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c  put is .** NULL,
a070: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
a080: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
a090: 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20  e: Remainder P1 
a0a0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
a0b0: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
a0c0: 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]%r[P1].**.** 
a0d0: 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61  Compute the rema
a0e0: 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65  inder after inte
a0f0: 67 65 72 20 72 65 67 69 73 74 65 72 20 50 32 20  ger register P2 
a100: 69 73 20 64 69 76 69 64 65 64 20 62 79 20 0a 2a  is divided by .*
a110: 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  * register P1 an
a120: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
a130: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
a140: 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  3. .** If the va
a150: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
a160: 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72  P1 is zero the r
a170: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
a180: 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72  * If either oper
a190: 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  and is NULL, the
a1a0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
a1b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a  .*/.case OP_Add:
a1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1d0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
a1e0: 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  _PLUS, in1, in2,
a1f0: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
a200: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20  _Subtract:      
a210: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
a220: 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31  as TK_MINUS, in1
a230: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
a240: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
a250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a260: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52   same as TK_STAR
a270: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
a280: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69   */.case OP_Divi
a290: 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  de:             
a2a0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
a2b0: 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32  _SLASH, in1, in2
a2c0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
a2d0: 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20  P_Remainder: {  
a2e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
a2f0: 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c   as TK_REM, in1,
a300: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
a310: 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20  char bIntint;   
a320: 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20 61  /* Started out a
a330: 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70  s two integer op
a340: 65 72 61 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20  erands */.  int 
a350: 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43  flags;      /* C
a360: 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c  ombined MEM_* fl
a370: 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e  ags from both in
a380: 70 75 74 73 20 2a 2f 0a 20 20 69 36 34 20 69 41  puts */.  i64 iA
a390: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74  ;         /* Int
a3a0: 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65  eger value of le
a3b0: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
a3c0: 69 36 34 20 69 42 3b 20 20 20 20 20 20 20 20 20  i64 iB;         
a3d0: 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
a3e0: 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e   of right operan
a3f0: 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41  d */.  double rA
a400: 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76  ;      /* Real v
a410: 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  alue of left ope
a420: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
a430: 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rB;      /* Rea
a440: 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74  l value of right
a450: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70   operand */..  p
a460: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
a470: 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79 4e 75 6d  >p1];.  applyNum
a480: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
a490: 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1);.  pIn2 = &aM
a4a0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
a4b0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
a4c0: 69 74 79 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75  ity(pIn2);.  pOu
a4d0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
a4e0: 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49  3];.  flags = pI
a4f0: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
a500: 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28  ->flags;.  if( (
a510: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
a520: 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  )!=0 ) goto arit
a530: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
a540: 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 70 49  _null;.  if( (pI
a550: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 32  n1->flags & pIn2
a560: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
a570: 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20  t)==MEM_Int ){. 
a580: 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e     iA = pIn1->u.
a590: 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32  i;.    iB = pIn2
a5a0: 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69  ->u.i;.    bInti
a5b0: 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74  nt = 1;.    swit
a5c0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
a5d0: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
a5e0: 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20  _Add:       if( 
a5f0: 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
a600: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
a610: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
a620: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75        case OP_Su
a630: 62 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c  btract:  if( sql
a640: 69 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42  ite3SubInt64(&iB
a650: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
a660: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
a670: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
a680: 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65  ply:  if( sqlite
a690: 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41  3MulInt64(&iB,iA
a6a0: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
a6b0: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
a6c0: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
a6d0: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  {.        if( iA
a6e0: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
a6f0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
a700: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
a710: 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d  ( iA==-1 && iB==
a720: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29  SMALLEST_INT64 )
a730: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20   goto fp_math;. 
a740: 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b         iB /= iA;
a750: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
a760: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
a770: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
a780: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
a790: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
a7a0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
a7b0: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
a7c0: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
a7d0: 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20    iB %= iA;.    
a7e0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
a7f0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75   }.    }.    pOu
a800: 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20  t->u.i = iB;.   
a810: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
a820: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
a830: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e    }else{.    bIn
a840: 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74  tint = 0;.fp_mat
a850: 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69  h:.    rA = sqli
a860: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
a870: 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d  (pIn1);.    rB =
a880: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
a890: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20  Value(pIn2);.   
a8a0: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
a8b0: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
a8c0: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
a8d0: 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20     rB += rA;    
a8e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
a8f0: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
a900: 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20  :    rB -= rA;  
a910: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a920: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
a930: 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b  ly:    rB *= rA;
a940: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a950: 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69      case OP_Divi
a960: 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a  de: {.        /*
a970: 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61   (double)0 In ca
a980: 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49  se of SQLITE_OMI
a990: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
a9a0: 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ... */.        i
a9b0: 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30  f( rA==(double)0
a9c0: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
a9d0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
a9e0: 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d  l;.        rB /=
a9f0: 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   rA;.        bre
aa00: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
aa10: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
aa20: 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29 72       iA = (i64)r
aa30: 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20  A;.        iB = 
aa40: 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20  (i64)rB;.       
aa50: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
aa60: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
aa70: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
aa80: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
aa90: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
aaa0: 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28    rB = (double)(
aab0: 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20  iB % iA);.      
aac0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
aad0: 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51  .    }.#ifdef SQ
aae0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
aaf0: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75  NG_POINT.    pOu
ab00: 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20  t->u.i = rB;.   
ab10: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
ab20: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
ab30: 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71  #else.    if( sq
ab40: 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29  lite3IsNaN(rB) )
ab50: 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69  {.      goto ari
ab60: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
ab70: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20  s_null;.    }.  
ab80: 20 20 70 4f 75 74 2d 3e 72 20 3d 20 72 42 3b 0a    pOut->r = rB;.
ab90: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
aba0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61  ag(pOut, MEM_Rea
abb0: 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 66 6c 61  l);.    if( (fla
abc0: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d  gs & MEM_Real)==
abd0: 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b  0 && !bIntint ){
abe0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
abf0: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
ac00: 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23  y(pOut);.    }.#
ac10: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
ac20: 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72  k;..arithmetic_r
ac30: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20  esult_is_null:. 
ac40: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
ac50: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
ac60: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
ac70: 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20  ode: CollSeq P1 
ac80: 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  * * P4.**.** P4 
ac90: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
aca0: 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74  a CollSeq struct
acb0: 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61  . If the next ca
acc0: 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e  ll to a user fun
acd0: 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72  ction.** or aggr
ace0: 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69  egate calls sqli
acf0: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
ad00: 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74  q(), this collat
ad10: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c  ion sequence wil
ad20: 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64  l.** be returned
ad30: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
ad40: 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d  y the built-in m
ad50: 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20  in(), max() and 
ad60: 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63  nullif().** func
ad70: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
ad80: 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P1 is not zero, 
ad90: 74 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67  then it is a reg
ada0: 69 73 74 65 72 20 74 68 61 74 20 61 20 73 75 62  ister that a sub
adb0: 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72  sequent min() or
adc0: 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67  .** max() aggreg
add0: 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20  ate will set to 
ade0: 31 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74  1 if the current
adf0: 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20   row is not the 
ae00: 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61  minimum or.** ma
ae10: 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72  ximum.  The P1 r
ae20: 65 67 69 73 74 65 72 20 69 73 20 69 6e 69 74 69  egister is initi
ae30: 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74  alized to 0 by t
ae40: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
ae50: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  .**.** The inter
ae60: 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65  face used by the
ae70: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
ae80: 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74  of the aforement
ae90: 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a  ioned functions.
aea0: 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74  ** to retrieve t
aeb0: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
aec0: 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69  uence set by thi
aed0: 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20  s opcode is not 
aee0: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62  available.** pub
aef0: 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75  licly, only to u
af00: 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 64 65  ser functions de
af10: 66 69 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e  fined in func.c.
af20: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c  .*/.case OP_Coll
af30: 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  Seq: {.  assert(
af40: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
af50: 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66  _COLLSEQ );.  if
af60: 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
af70: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
af80: 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f  etInt64(&aMem[pO
af90: 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a  p->p1], 0);.  }.
afa0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
afb0: 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20  pcode: Function 
afc0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
afd0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
afe0: 5d 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29  ]=func(r[P2@P5])
aff0: 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20  .**.** Invoke a 
b000: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50  user function (P
b010: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
b020: 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72  o a Function str
b030: 75 63 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64  ucture that.** d
b040: 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74  efines the funct
b050: 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72 67  ion) with P5 arg
b060: 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f  uments taken fro
b070: 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
b080: 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  d.** successors.
b090: 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20    The result of 
b0a0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  the function is 
b0b0: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
b0c0: 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74  er P3..** Regist
b0d0: 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62  er P3 must not b
b0e0: 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e  e one of the fun
b0f0: 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a  ction inputs..**
b100: 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62  .** P1 is a 32-b
b110: 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63  it bitmask indic
b120: 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
b130: 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65   not each argume
b140: 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75  nt to the .** fu
b150: 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72  nction was deter
b160: 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73  mined to be cons
b170: 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20  tant at compile 
b180: 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72  time. If the fir
b190: 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77  st.** argument w
b1a0: 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e  as constant then
b1b0: 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20   bit 0 of P1 is 
b1c0: 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65  set. This is use
b1d0: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a  d to determine.*
b1e0: 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64  * whether meta d
b1f0: 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77  ata associated w
b200: 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74  ith a user funct
b210: 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69  ion argument usi
b220: 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  ng the.** sqlite
b230: 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20  3_set_auxdata() 
b240: 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c  API may be safel
b250: 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c  y retained until
b260: 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76   the next.** inv
b270: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  ocation of this 
b280: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
b290: 65 20 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20  e also: AggStep 
b2a0: 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a  and AggFinal.*/.
b2b0: 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  case OP_Function
b2c0: 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d  : {.  int i;.  M
b2d0: 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69  em *pArg;.  sqli
b2e0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b  te3_context ctx;
b2f0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
b300: 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20   **apVal;.  int 
b310: 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  n;..  n = pOp->p
b320: 35 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e  5;.  apVal = p->
b330: 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28  apArg;.  assert(
b340: 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29   apVal || n==0 )
b350: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
b360: 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
b370: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
b380: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
b390: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
b3a0: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
b3b0: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
b3c0: 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20  .  assert( n==0 
b3d0: 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26  || (pOp->p2>0 &&
b3e0: 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e   pOp->p2+n<=(p->
b3f0: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
b400: 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  +1) );.  assert(
b410: 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32   pOp->p3<pOp->p2
b420: 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
b430: 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67  ->p2+n );.  pArg
b440: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
b450: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
b460: 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b  n; i++, pArg++){
b470: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
b480: 49 73 56 61 6c 69 64 28 70 41 72 67 29 20 29 3b  IsValid(pArg) );
b490: 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20  .    apVal[i] = 
b4a0: 70 41 72 67 3b 0a 20 20 20 20 44 65 65 70 68 65  pArg;.    Deephe
b4b0: 6d 65 72 61 6c 69 7a 65 28 70 41 72 67 29 3b 0a  meralize(pArg);.
b4c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
b4d0: 65 6d 53 74 6f 72 65 54 79 70 65 28 70 41 72 67  emStoreType(pArg
b4e0: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
b4f0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c  TRACE(pOp->p2+i,
b500: 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61   pArg);.  }..  a
b510: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
b520: 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29  pe==P4_FUNCDEF )
b530: 3b 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20  ;.  ctx.pFunc = 
b540: 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20  pOp->p4.pFunc;. 
b550: 20 63 74 78 2e 69 4f 70 20 3d 20 70 63 3b 0a 20   ctx.iOp = pc;. 
b560: 20 63 74 78 2e 70 56 64 62 65 20 3d 20 70 3b 0a   ctx.pVdbe = p;.
b570: 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74  .  /* The output
b580: 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64   cell may alread
b590: 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20  y have a buffer 
b5a0: 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a  allocated. Move.
b5b0: 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65 72    ** the pointer
b5c0: 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e 20   to ctx.s so in 
b5d0: 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75  case the user-fu
b5e0: 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a 20  nction can use. 
b5f0: 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79 20   ** the already 
b600: 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72  allocated buffer
b610: 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f   instead of allo
b620: 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e 65  cating a new one
b630: 2e 0a 20 20 2a 2f 0a 20 20 6d 65 6d 63 70 79 28  ..  */.  memcpy(
b640: 26 63 74 78 2e 73 2c 20 70 4f 75 74 2c 20 73 69  &ctx.s, pOut, si
b650: 7a 65 6f 66 28 4d 65 6d 29 29 3b 0a 20 20 70 4f  zeof(Mem));.  pO
b660: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
b670: 4e 75 6c 6c 3b 0a 20 20 70 4f 75 74 2d 3e 78 44  Null;.  pOut->xD
b680: 65 6c 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e  el = 0;.  pOut->
b690: 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 4d  zMalloc = 0;.  M
b6a0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 63  emSetTypeFlag(&c
b6b0: 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  tx.s, MEM_Null);
b6c0: 0a 0a 20 20 63 74 78 2e 66 45 72 72 6f 72 4f 72  ..  ctx.fErrorOr
b6d0: 41 75 78 20 3d 20 30 3b 0a 20 20 69 66 28 20 63  Aux = 0;.  if( c
b6e0: 74 78 2e 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c  tx.pFunc->funcFl
b6f0: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e  ags & SQLITE_FUN
b700: 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20  C_NEEDCOLL ){.  
b710: 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f    assert( pOp>aO
b720: 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p );.    assert(
b730: 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d   pOp[-1].p4type=
b740: 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20  =P4_COLLSEQ );. 
b750: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
b760: 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f  1].opcode==OP_Co
b770: 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78  llSeq );.    ctx
b780: 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d  .pColl = pOp[-1]
b790: 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20  .p4.pColl;.  }. 
b7a0: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
b7b0: 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 28 2a   lastRowid;.  (*
b7c0: 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63  ctx.pFunc->xFunc
b7d0: 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c  )(&ctx, n, apVal
b7e0: 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35  ); /* IMP: R-245
b7f0: 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 6c 61  05-23230 */.  la
b800: 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
b810: 73 74 52 6f 77 69 64 3b 0a 0a 20 20 69 66 28 20  stRowid;..  if( 
b820: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
b830: 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20   ){.    /* Even 
b840: 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28  though a malloc(
b850: 29 20 68 61 73 20 66 61 69 6c 65 64 2c 20 74 68  ) has failed, th
b860: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
b870: 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 75   of the.    ** u
b880: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79  ser function may
b890: 20 68 61 76 65 20 63 61 6c 6c 65 64 20 61 6e 20   have called an 
b8a0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 58  sqlite3_result_X
b8b0: 58 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  XX() function.  
b8c0: 20 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20 61    ** to return a
b8d0: 20 76 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c   value. The foll
b8e0: 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61  owing call relea
b8f0: 73 65 73 20 61 6e 79 20 72 65 73 6f 75 72 63 65  ses any resource
b900: 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63 69 61  s.    ** associa
b910: 74 65 64 20 77 69 74 68 20 73 75 63 68 20 61 20  ted with such a 
b920: 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  value..    */.  
b930: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
b940: 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b  Release(&ctx.s);
b950: 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
b960: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74  ;.  }..  /* If t
b970: 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  he function retu
b980: 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74  rned an error, t
b990: 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f  hrow an exceptio
b9a0: 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 66  n */.  if( ctx.f
b9b0: 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20  ErrorOrAux ){.  
b9c0: 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f    if( ctx.isErro
b9d0: 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  r ){.      sqlit
b9e0: 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
b9f0: 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
ba00: 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
ba10: 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a  _text(&ctx.s));.
ba20: 20 20 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69        rc = ctx.i
ba30: 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  sError;.    }.  
ba40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c    sqlite3VdbeDel
ba50: 65 74 65 41 75 78 44 61 74 61 28 70 2c 20 70 63  eteAuxData(p, pc
ba60: 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 7d 0a  , pOp->p1);.  }.
ba70: 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72  .  /* Copy the r
ba80: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
ba90: 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73  ction into regis
baa0: 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69  ter P3 */.  sqli
bab0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
bac0: 6f 64 69 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e  oding(&ctx.s, en
bad0: 63 6f 64 69 6e 67 29 3b 0a 20 20 61 73 73 65 72  coding);.  asser
bae0: 74 28 20 70 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d  t( pOut->flags==
baf0: 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 6d 65  MEM_Null );.  me
bb00: 6d 63 70 79 28 70 4f 75 74 2c 20 26 63 74 78 2e  mcpy(pOut, &ctx.
bb10: 73 2c 20 73 69 7a 65 6f 66 28 4d 65 6d 29 29 3b  s, sizeof(Mem));
bb20: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
bb30: 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4f 75 74  beMemTooBig(pOut
bb40: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
bb50: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 23 69 66 20  o_big;.  }..#if 
bb60: 30 0a 20 20 2f 2a 20 54 68 65 20 61 70 70 2d 64  0.  /* The app-d
bb70: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20  efined function 
bb80: 68 61 73 20 64 6f 6e 65 20 73 6f 6d 65 74 68 69  has done somethi
bb90: 6e 67 20 74 68 61 74 20 61 73 20 63 61 75 73 65  ng that as cause
bba0: 64 20 74 68 69 73 0a 20 20 2a 2a 20 73 74 61 74  d this.  ** stat
bbb0: 65 6d 65 6e 74 20 74 6f 20 65 78 70 69 72 65 2e  ement to expire.
bbc0: 20 20 28 50 65 72 68 61 70 73 20 74 68 65 20 66    (Perhaps the f
bbd0: 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 65 64 20 73  unction called s
bbe0: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 0a 20 20  qlite3_exec().  
bbf0: 2a 2a 20 77 69 74 68 20 61 20 43 52 45 41 54 45  ** with a CREATE
bc00: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
bc10: 2e 29 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 2d  .).  */.  if( p-
bc20: 3e 65 78 70 69 72 65 64 20 29 20 72 63 20 3d 20  >expired ) rc = 
bc30: 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 23 65  SQLITE_ABORT;.#e
bc40: 6e 64 69 66 0a 0a 20 20 52 45 47 49 53 54 45 52  ndif..  REGISTER
bc50: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
bc60: 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f  pOut);.  UPDATE_
bc70: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
bc80: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
bc90: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e  /* Opcode: BitAn
bca0: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
bcb0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
bcc0: 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a  3]=r[P1]&r[P2].*
bcd0: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69  *.** Take the bi
bce0: 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68  t-wise AND of th
bcf0: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
bd00: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
bd10: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
bd20: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
bd30: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
bd40: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
bd50: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
bd60: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
bd70: 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32  ode: BitOr P1 P2
bd80: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
bd90: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31  sis:  r[P3]=r[P1
bda0: 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61  ]|r[P2].**.** Ta
bdb0: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
bdc0: 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
bdd0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
bde0: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
bdf0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
be00: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
be10: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
be20: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
be30: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
be40: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
be50: 66 74 4c 65 66 74 20 50 31 20 50 32 20 50 33 20  ftLeft P1 P2 P3 
be60: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
be70: 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72    r[P3]=r[P2]<<r
be80: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74  [P1].**.** Shift
be90: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
bea0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
beb0: 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79  2 to the left by
bec0: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
bed0: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
bee0: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
bef0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
bf00: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
bf10: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
bf20: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
bf30: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
bf40: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
bf50: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
bf60: 3a 20 53 68 69 66 74 52 69 67 68 74 20 50 31 20  : ShiftRight P1 
bf70: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
bf80: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
bf90: 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  P2]>>r[P1].**.**
bfa0: 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67   Shift the integ
bfb0: 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  er value in regi
bfc0: 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 72  ster P2 to the r
bfd0: 69 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e  ight by the.** n
bfe0: 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70  umber of bits sp
bff0: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69  ecified by the i
c000: 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74  nteger in regist
c010: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
c020: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
c030: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
c040: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
c050: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
c060: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  t is NULL..*/.ca
c070: 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20  se OP_BitAnd:   
c080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c090: 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41   same as TK_BITA
c0a0: 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  ND, in1, in2, ou
c0b0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  t3 */.case OP_Bi
c0c0: 74 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20 20  tOr:            
c0d0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
c0e0: 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20   TK_BITOR, in1, 
c0f0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
c100: 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20  e OP_ShiftLeft: 
c110: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c120: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46  same as TK_LSHIF
c130: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
c140: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69  3 */.case OP_Shi
c150: 66 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20  ftRight: {      
c160: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
c170: 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20  TK_RSHIFT, in1, 
c180: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
c190: 36 34 20 69 41 3b 0a 20 20 75 36 34 20 75 41 3b  64 iA;.  u64 uA;
c1a0: 0a 20 20 69 36 34 20 69 42 3b 0a 20 20 75 38 20  .  i64 iB;.  u8 
c1b0: 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  op;..  pIn1 = &a
c1c0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
c1d0: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
c1e0: 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p2];.  pOut = 
c1f0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
c200: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
c210: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
c220: 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  ) & MEM_Null ){.
c230: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
c240: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
c250: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
c260: 20 20 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64    iA = sqlite3Vd
c270: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29  beIntValue(pIn2)
c280: 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33  ;.  iB = sqlite3
c290: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
c2a0: 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e  1);.  op = pOp->
c2b0: 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70  opcode;.  if( op
c2c0: 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20  ==OP_BitAnd ){. 
c2d0: 20 20 20 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d     iA &= iB;.  }
c2e0: 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f  else if( op==OP_
c2f0: 42 69 74 4f 72 20 29 7b 0a 20 20 20 20 69 41 20  BitOr ){.    iA 
c300: 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69  |= iB;.  }else i
c310: 66 28 20 69 42 21 3d 30 20 29 7b 0a 20 20 20 20  f( iB!=0 ){.    
c320: 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53  assert( op==OP_S
c330: 68 69 66 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d  hiftRight || op=
c340: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 3b  =OP_ShiftLeft );
c350: 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73 68 69 66  ..    /* If shif
c360: 74 69 6e 67 20 62 79 20 61 20 6e 65 67 61 74 69  ting by a negati
c370: 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74  ve amount, shift
c380: 20 69 6e 20 74 68 65 20 6f 74 68 65 72 20 64 69   in the other di
c390: 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  rection */.    i
c3a0: 66 28 20 69 42 3c 30 20 29 7b 0a 20 20 20 20 20  f( iB<0 ){.     
c3b0: 20 61 73 73 65 72 74 28 20 4f 50 5f 53 68 69 66   assert( OP_Shif
c3c0: 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74  tRight==OP_Shift
c3d0: 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20 20 20 20  Left+1 );.      
c3e0: 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c  op = 2*OP_ShiftL
c3f0: 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20  eft + 1 - op;.  
c400: 20 20 20 20 69 42 20 3d 20 69 42 3e 28 2d 36 34      iB = iB>(-64
c410: 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20  ) ? -iB : 64;.  
c420: 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 69 42 3e    }..    if( iB>
c430: 3d 36 34 20 29 7b 0a 20 20 20 20 20 20 69 41 20  =64 ){.      iA 
c440: 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d  = (iA>=0 || op==
c450: 4f 50 5f 53 68 69 66 74 4c 65 66 74 29 20 3f 20  OP_ShiftLeft) ? 
c460: 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73  0 : -1;.    }els
c470: 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28  e{.      memcpy(
c480: 26 75 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66  &uA, &iA, sizeof
c490: 28 75 41 29 29 3b 0a 20 20 20 20 20 20 69 66 28  (uA));.      if(
c4a0: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
c4b0: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 75 41 20  t ){.        uA 
c4c0: 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d 65  <<= iB;.      }e
c4d0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 75 41 20  lse{.        uA 
c4e0: 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20 20 20 20  >>= iB;.        
c4f0: 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f  /* Sign-extend o
c500: 6e 20 61 20 72 69 67 68 74 20 73 68 69 66 74 20  n a right shift 
c510: 6f 66 20 61 20 6e 65 67 61 74 69 76 65 20 6e 75  of a negative nu
c520: 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20  mber */.        
c530: 69 66 28 20 69 41 3c 30 20 29 20 75 41 20 7c 3d  if( iA<0 ) uA |=
c540: 20 28 28 28 28 75 36 34 29 30 78 66 66 66 66 66   ((((u64)0xfffff
c550: 66 66 66 29 3c 3c 33 32 29 7c 30 78 66 66 66 66  fff)<<32)|0xffff
c560: 66 66 66 66 29 20 3c 3c 20 28 36 34 2d 69 42 29  ffff) << (64-iB)
c570: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
c580: 6d 65 6d 63 70 79 28 26 69 41 2c 20 26 75 41 2c  memcpy(&iA, &uA,
c590: 20 73 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20   sizeof(iA));.  
c5a0: 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e    }.  }.  pOut->
c5b0: 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53  u.i = iA;.  MemS
c5c0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
c5d0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65   MEM_Int);.  bre
c5e0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
c5f0: 3a 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20  : AddImm  P1 P2 
c600: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
c610: 73 3a 20 20 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b  s:  r[P1]=r[P1]+
c620: 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68  P2.** .** Add th
c630: 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f  e constant P2 to
c640: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
c650: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68  gister P1..** Th
c660: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61  e result is alwa
c670: 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ys an integer..*
c680: 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e  *.** To force an
c690: 79 20 72 65 67 69 73 74 65 72 20 74 6f 20 62 65  y register to be
c6a0: 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73   an integer, jus
c6b0: 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65  t add 0..*/.case
c6c0: 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20   OP_AddImm: {   
c6d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
c6e0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
c6f0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65  m[pOp->p1];.  me
c700: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
c710: 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  , pIn1);.  sqlit
c720: 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
c730: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e  ify(pIn1);.  pIn
c740: 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70  1->u.i += pOp->p
c750: 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
c760: 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65  * Opcode: MustBe
c770: 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Int P1 P2 * * *.
c780: 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  ** .** Force the
c790: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
c7a0: 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69  er P1 to be an i
c7b0: 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20  nteger.  If the 
c7c0: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
c7d0: 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
c7e0: 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63   and cannot be c
c7f0: 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
c800: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68   integer.** with
c810: 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74  out data loss, t
c820: 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
c830: 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69  tely to P2, or i
c840: 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65  f P2==0.** raise
c850: 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41   an SQLITE_MISMA
c860: 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a  TCH exception..*
c870: 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65  /.case OP_MustBe
c880: 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Int: {          
c890: 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
c8a0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
c8b0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
c8c0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c8d0: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
c8e0: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
c8f0: 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn1, SQLITE_AF
c900: 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64  F_NUMERIC, encod
c910: 69 6e 67 29 3b 0a 20 20 20 20 69 66 28 20 28 70  ing);.    if( (p
c920: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
c930: 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
c940: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30    if( pOp->p2==0
c950: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
c960: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
c970: 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  ;.        goto a
c980: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
c990: 72 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  r;.      }else{.
c9a0: 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
c9b0: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
c9c0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
c9d0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d  .    }.  }.  Mem
c9e0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31  SetTypeFlag(pIn1
c9f0: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72  , MEM_Int);.  br
ca00: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
ca10: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
ca20: 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70  TING_POINT./* Op
ca30: 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69  code: RealAffini
ca40: 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ty P1 * * * *.**
ca50: 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20  .** If register 
ca60: 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  P1 holds an inte
ca70: 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74  ger convert it t
ca80: 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a  o a real value..
ca90: 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
caa0: 65 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 65  e is used when e
cab0: 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d  xtracting inform
cac0: 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c  ation from a col
cad0: 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20  umn that.** has 
cae0: 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20  REAL affinity.  
caf0: 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75  Such column valu
cb00: 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20  es may still be 
cb10: 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74  stored as.** int
cb20: 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65  egers, for space
cb30: 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74   efficiency, but
cb40: 20 61 66 74 65 72 20 65 78 74 72 61 63 74 69 6f   after extractio
cb50: 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a  n we want them.*
cb60: 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61  * to have only a
cb70: 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a   real value..*/.
cb80: 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69  case OP_RealAffi
cb90: 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20  nity: {         
cba0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
cbb0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
cbc0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
cbd0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
cbe0: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73  MEM_Int ){.    s
cbf0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61  qlite3VdbeMemRea
cc00: 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  lify(pIn1);.  }.
cc10: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
cc20: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
cc30: 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f  E_OMIT_CAST./* O
cc40: 70 63 6f 64 65 3a 20 54 6f 54 65 78 74 20 50 31  pcode: ToText P1
cc50: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46   * * * *.**.** F
cc60: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
cc70: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
cc80: 20 62 65 20 74 65 78 74 2e 0a 2a 2a 20 49 66 20   be text..** If 
cc90: 74 68 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d  the value is num
cca0: 65 72 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74  eric, convert it
ccb0: 20 74 6f 20 61 20 73 74 72 69 6e 67 20 75 73 69   to a string usi
ccc0: 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61  ng the.** equiva
ccd0: 6c 65 6e 74 20 6f 66 20 73 70 72 69 6e 74 66 28  lent of sprintf(
cce0: 29 2e 20 20 42 6c 6f 62 20 76 61 6c 75 65 73 20  ).  Blob values 
ccf0: 61 72 65 20 75 6e 63 68 61 6e 67 65 64 20 61 6e  are unchanged an
cd00: 64 0a 2a 2a 20 61 72 65 20 61 66 74 65 72 77 61  d.** are afterwa
cd10: 72 64 73 20 73 69 6d 70 6c 79 20 69 6e 74 65 72  rds simply inter
cd20: 70 72 65 74 65 64 20 61 73 20 74 65 78 74 2e 0a  preted as text..
cd30: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
cd40: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
cd50: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
cd60: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
cd70: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
cd80: 54 6f 54 65 78 74 3a 20 7b 20 20 20 20 20 20 20  ToText: {       
cd90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
cda0: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 54 45 58 54  me as TK_TO_TEXT
cdb0: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
cdc0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
cdd0: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
cde0: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
cdf0: 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
ce00: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72   & MEM_Null ) br
ce10: 65 61 6b 3b 0a 20 20 61 73 73 65 72 74 28 20 4d  eak;.  assert( M
ce20: 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f  EM_Str==(MEM_Blo
ce30: 62 3e 3e 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d  b>>3) );.  pIn1-
ce40: 3e 66 6c 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d  >flags |= (pIn1-
ce50: 3e 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29  >flags&MEM_Blob)
ce60: 3e 3e 33 3b 0a 20 20 61 70 70 6c 79 41 66 66 69  >>3;.  applyAffi
ce70: 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54  nity(pIn1, SQLIT
ce80: 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f  E_AFF_TEXT, enco
ce90: 64 69 6e 67 29 3b 0a 20 20 72 63 20 3d 20 45 78  ding);.  rc = Ex
cea0: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a  pandBlob(pIn1);.
ceb0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
cec0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
ced0: 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  || db->mallocFai
cee0: 6c 65 64 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  led );.  pIn1->f
cef0: 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e  lags &= ~(MEM_In
cf00: 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42  t|MEM_Real|MEM_B
cf10: 6c 6f 62 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20  lob|MEM_Zero);. 
cf20: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
cf30: 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72  SIZE(pIn1);.  br
cf40: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
cf50: 65 3a 20 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a  e: ToBlob P1 * *
cf60: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65   * *.**.** Force
cf70: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
cf80: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
cf90: 61 20 42 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68  a BLOB..** If th
cfa0: 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72  e value is numer
cfb0: 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74  ic, convert it t
cfc0: 6f 20 61 20 73 74 72 69 6e 67 20 66 69 72 73 74  o a string first
cfd0: 2e 0a 2a 2a 20 53 74 72 69 6e 67 73 20 61 72 65  ..** Strings are
cfe0: 20 73 69 6d 70 6c 79 20 72 65 69 6e 74 65 72 70   simply reinterp
cff0: 72 65 74 65 64 20 61 73 20 62 6c 6f 62 73 20 77  reted as blobs w
d000: 69 74 68 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a  ith no change.**
d010: 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69   to the underlyi
d020: 6e 67 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41  ng data..**.** A
d030: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
d040: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
d050: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
d060: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
d070: 0a 63 61 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a  .case OP_ToBlob:
d080: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
d090: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
d0a0: 4b 5f 54 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a  K_TO_BLOB, in1 *
d0b0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
d0c0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
d0d0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
d0e0: 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b  EM_Null ) break;
d0f0: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
d100: 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d  ags & MEM_Blob)=
d110: 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41  =0 ){.    applyA
d120: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51  ffinity(pIn1, SQ
d130: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65  LITE_AFF_TEXT, e
d140: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 61 73  ncoding);.    as
d150: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
d160: 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64  s & MEM_Str || d
d170: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
d180: 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  );.    MemSetTyp
d190: 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f  eFlag(pIn1, MEM_
d1a0: 42 6c 6f 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Blob);.  }else{.
d1b0: 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20      pIn1->flags 
d1c0: 26 3d 20 7e 28 4d 45 4d 5f 54 79 70 65 4d 61 73  &= ~(MEM_TypeMas
d1d0: 6b 26 7e 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20  k&~MEM_Blob);.  
d1e0: 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  }.  UPDATE_MAX_B
d1f0: 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20  LOBSIZE(pIn1);. 
d200: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
d210: 63 6f 64 65 3a 20 54 6f 4e 75 6d 65 72 69 63 20  code: ToNumeric 
d220: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
d230: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
d240: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
d250: 74 6f 20 62 65 20 6e 75 6d 65 72 69 63 20 28 65  to be numeric (e
d260: 69 74 68 65 72 20 61 6e 0a 2a 2a 20 69 6e 74 65  ither an.** inte
d270: 67 65 72 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e  ger or a floatin
d280: 67 2d 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 29  g-point number.)
d290: 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
d2a0: 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62   is text or blob
d2b0: 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  , try to convert
d2c0: 20 69 74 20 74 6f 20 61 6e 20 75 73 69 6e 67 20   it to an using 
d2d0: 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e  the.** equivalen
d2e0: 74 20 6f 66 20 61 74 6f 69 28 29 20 6f 72 20 61  t of atoi() or a
d2f0: 74 6f 66 28 29 20 61 6e 64 20 73 74 6f 72 65 20  tof() and store 
d300: 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e  0 if no such con
d310: 76 65 72 73 69 6f 6e 20 0a 2a 2a 20 69 73 20 70  version .** is p
d320: 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  ossible..**.** A
d330: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
d340: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
d350: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
d360: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
d370: 0a 63 61 73 65 20 4f 50 5f 54 6f 4e 75 6d 65 72  .case OP_ToNumer
d380: 69 63 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ic: {           
d390: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
d3a0: 73 20 54 4b 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c  s TK_TO_NUMERIC,
d3b0: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
d3c0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d3d0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
d3e0: 6d 4e 75 6d 65 72 69 66 79 28 70 49 6e 31 29 3b  mNumerify(pIn1);
d3f0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
d400: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
d410: 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  T_CAST */../* Op
d420: 63 6f 64 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a  code: ToInt P1 *
d430: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
d440: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
d450: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
d460: 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  e an integer.  I
d470: 66 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 69  f.** The value i
d480: 73 20 63 75 72 72 65 6e 74 6c 79 20 61 20 72 65  s currently a re
d490: 61 6c 20 6e 75 6d 62 65 72 2c 20 64 72 6f 70 20  al number, drop 
d4a0: 69 74 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70  its fractional p
d4b0: 61 72 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  art..** If the v
d4c0: 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20  alue is text or 
d4d0: 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e  blob, try to con
d4e0: 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e  vert it to an in
d4f0: 74 65 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a  teger using the.
d500: 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66  ** equivalent of
d510: 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72   atoi() and stor
d520: 65 20 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63  e 0 if no such c
d530: 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73  onversion is pos
d540: 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e  sible..**.** A N
d550: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
d560: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
d570: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
d580: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
d590: 61 73 65 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20  ase OP_ToInt: { 
d5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5b0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
d5c0: 4f 5f 49 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20 20  O_INT, in1 */.  
d5d0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
d5e0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
d5f0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
d600: 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
d610: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
d620: 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
d630: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
d640: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
d650: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26  ITE_OMIT_CAST) &
d660: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
d670: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
d680: 50 4f 49 4e 54 29 0a 2f 2a 20 4f 70 63 6f 64 65  POINT)./* Opcode
d690: 3a 20 54 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20  : ToReal P1 * * 
d6a0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
d6b0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
d6c0: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
d6d0: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
d6e0: 6e 75 6d 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68  number..** If Th
d6f0: 65 20 76 61 6c 75 65 20 69 73 20 63 75 72 72 65  e value is curre
d700: 6e 74 6c 79 20 61 6e 20 69 6e 74 65 67 65 72 2c  ntly an integer,
d710: 20 63 6f 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20   convert it..** 
d720: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
d730: 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72  text or blob, tr
d740: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20  y to convert it 
d750: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73  to an integer us
d760: 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76  ing the.** equiv
d770: 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20  alent of atoi() 
d780: 61 6e 64 20 73 74 6f 72 65 20 30 2e 30 20 69 66  and store 0.0 if
d790: 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73   no such convers
d7a0: 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  ion is possible.
d7b0: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
d7c0: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
d7d0: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
d7e0: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
d7f0: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
d800: 5f 54 6f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20  _ToReal: {      
d810: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
d820: 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41  ame as TK_TO_REA
d830: 4c 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  L, in1 */.  pIn1
d840: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
d850: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
d860: 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a  hange(p, pIn1);.
d870: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
d880: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
d890: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
d8a0: 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70  VdbeMemRealify(p
d8b0: 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
d8c0: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21  k;.}.#endif /* !
d8d0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
d8e0: 4d 49 54 5f 43 41 53 54 29 20 26 26 20 21 64 65  MIT_CAST) && !de
d8f0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
d900: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
d910: 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ) */../* Opcode:
d920: 20 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20   Lt P1 P2 P3 P4 
d930: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
d940: 69 66 20 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67  if r[P1]<r[P3] g
d950: 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d  oto P2.**.** Com
d960: 70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20  pare the values 
d970: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
d980: 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50  nd P3.  If reg(P
d990: 33 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a  3)<reg(P1) then.
d9a0: 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  ** jump to addre
d9b0: 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49  ss P2.  .**.** I
d9c0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
d9d0: 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50  PIFNULL bit of P
d9e0: 35 20 69 73 20 73 65 74 20 61 6e 64 20 65 69 74  5 is set and eit
d9f0: 68 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a  her reg(P1) or.*
da00: 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c  * reg(P3) is NUL
da10: 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
da20: 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51  jump.  If the SQ
da30: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
da40: 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72  .** bit is clear
da50: 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
da60: 67 68 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  gh if either ope
da70: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  rand is NULL..**
da80: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
da90: 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20  FF_MASK portion 
daa0: 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e  of P5 must be an
dab0: 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63   affinity charac
dac0: 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f  ter -.** SQLITE_
dad0: 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45  AFF_TEXT, SQLITE
dae0: 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e  _AFF_INTEGER, an
daf0: 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61  d so forth. An a
db00: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a  ttempt is made .
db10: 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74  ** to coerce bot
db20: 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69  h inputs accordi
db30: 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e  ng to this affin
db40: 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a  ity before the.*
db50: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  * comparison is 
db60: 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c  made. If the SQL
db70: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20  ITE_AFF_MASK is 
db80: 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72  0x00, then numer
db90: 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69  ic.** affinity i
dba0: 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61  s used. Note tha
dbb0: 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63  t the affinity c
dbc0: 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73  onversions are s
dbd0: 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e  tored.** back in
dbe0: 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  to the input reg
dbf0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
dc00: 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64  .  So this opcod
dc10: 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70  e can cause.** p
dc20: 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65  ersistent change
dc30: 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  s to registers P
dc40: 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  1 and P3..**.** 
dc50: 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73  Once any convers
dc60: 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20  ions have taken 
dc70: 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68  place, and neith
dc80: 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c  er value is NULL
dc90: 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73  , .** the values
dca0: 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49   are compared. I
dcb0: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
dcc0: 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d  e blobs then mem
dcd0: 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64  cmp() is.** used
dce0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
dcf0: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
dd00: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
dd10: 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20   both values.** 
dd20: 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74  are text, then t
dd30: 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63  he appropriate c
dd40: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
dd50: 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a  n specified in.*
dd60: 2a 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f  * P4 is  used to
dd70: 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   do the comparis
dd80: 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f  on.  If P4 is no
dd90: 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e  t specified then
dda0: 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20  .** memcmp() is 
ddb0: 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20  used to compare 
ddc0: 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66  text string.  If
ddd0: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
dde0: 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65  .** numeric, the
ddf0: 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70  n a numeric comp
de00: 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20  arison is used. 
de10: 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65  If the two value
de20: 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66  s.** are of diff
de30: 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65  erent types, the
de40: 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f  n numbers are co
de50: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
de60: 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e  an.** strings an
de70: 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f  d strings are co
de80: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
de90: 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20  an blobs..**.** 
dea0: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54  If the SQLITE_ST
deb0: 4f 52 45 50 32 20 62 69 74 20 6f 66 20 50 35 20  OREP2 bit of P5 
dec0: 69 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20  is set, then do 
ded0: 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65  not jump.  Inste
dee0: 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62  ad,.** store a b
def0: 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65  oolean result (e
df00: 69 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f  ither 0, or 1, o
df10: 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73  r NULL) in regis
df20: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P2..**.** If
df30: 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c   the SQLITE_NULL
df40: 45 51 20 62 69 74 20 69 73 20 73 65 74 20 69 6e  EQ bit is set in
df50: 20 50 35 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76   P5, then NULL v
df60: 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64  alues are consid
df70: 65 72 65 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f  ered.** equal to
df80: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2c 20 70 72   one another, pr
df90: 6f 76 69 64 65 64 20 74 68 61 74 20 74 68 65 79  ovided that they
dfa0: 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 68 65   do not have the
dfb0: 69 72 20 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a  ir MEM_Cleared.*
dfc0: 2a 20 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a  * bit set..*/./*
dfd0: 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50   Opcode: Ne P1 P
dfe0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
dff0: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
e000: 21 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  !=r[P3] goto P2.
e010: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
e020: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
e030: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
e040: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
e050: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
e060: 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67   operands in reg
e070: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
e080: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20   are not equal. 
e090: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
e0a0: 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69  de for.** additi
e0b0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
e0c0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54  ..**.** If SQLIT
e0d0: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
e0e0: 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72  in P5 then the r
e0f0: 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69  esult of compari
e100: 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69  son is always ei
e110: 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20  ther.** true or 
e120: 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76  false and is nev
e130: 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74  er NULL.  If bot
e140: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
e150: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
e160: 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72  ult.** of compar
e170: 69 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20 20  ison is false.  
e180: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
e190: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  d is NULL then t
e1a0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 72 75  he result is tru
e1b0: 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72  e..** If neither
e1c0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
e1d0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74   the result is t
e1e0: 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f  he same as it wo
e1f0: 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65  uld be if.** the
e200: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66   SQLITE_NULLEQ f
e210: 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64  lag were omitted
e220: 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20   from P5..*/./* 
e230: 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32  Opcode: Eq P1 P2
e240: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
e250: 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d  opsis: if r[P1]=
e260: 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a  =r[P3] goto P2.*
e270: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
e280: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
e290: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
e2a0: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
e2b0: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
e2c0: 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69  operands in regi
e2d0: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20  sters P1 and P3 
e2e0: 61 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65  are equal..** Se
e2f0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
e300: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
e310: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nformation..**.*
e320: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
e330: 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20  EQ is set in P5 
e340: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
e350: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
e360: 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a   always either.*
e370: 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20  * true or false 
e380: 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c  and is never NUL
e390: 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72  L.  If both oper
e3a0: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68  ands are NULL th
e3b0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  en the result.**
e3c0: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
e3d0: 73 20 74 72 75 65 2e 20 20 49 66 20 65 69 74 68  s true.  If eith
e3e0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
e3f0: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
e400: 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20  lt is false..** 
e410: 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61  If neither opera
e420: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72  nd is NULL the r
e430: 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d  esult is the sam
e440: 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65  e as it would be
e450: 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54   if.** the SQLIT
e460: 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65  E_NULLEQ flag we
e470: 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re omitted from 
e480: 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  P5..*/./* Opcode
e490: 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20 50 34  : Le P1 P2 P3 P4
e4a0: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
e4b0: 20 69 66 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d   if r[P1]<=r[P3]
e4c0: 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
e4d0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
e4e0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
e4f0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
e500: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
e510: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
e520: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
e530: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
e540: 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f   equal to the co
e550: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
e560: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
e570: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
e580: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
e590: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
e5a0: 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20 50  code: Gt P1 P2 P
e5b0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
e5c0: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b  sis: if r[P1]>r[
e5d0: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
e5e0: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
e5f0: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
e600: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
e610: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
e620: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
e630: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
e640: 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
e650: 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  han the content 
e660: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
e670: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
e680: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
e690: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
e6a0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
e6b0: 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Ge P1 P2 P3 P4 P
e6c0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
e6d0: 66 20 72 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67  f r[P1]>=r[P3] g
e6e0: 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  oto P2.**.** Thi
e6f0: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
e700: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
e710: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
e720: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
e730: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
e740: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
e750: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
e760: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
e770: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
e780: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
e790: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
e7a0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
e7b0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  rmation..*/.case
e7c0: 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20   OP_Eq:         
e7d0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
e7e0: 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e   TK_EQ, jump, in
e7f0: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
e800: 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Ne:           
e810: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
e820: 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_NE, jump, in1,
e830: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
e840: 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Lt:             
e850: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
e860: 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  LT, jump, in1, i
e870: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65  n3 */.case OP_Le
e880: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
e890: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45  /* same as TK_LE
e8a0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
e8b0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20   */.case OP_Gt: 
e8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e8d0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20   same as TK_GT, 
e8e0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
e8f0: 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20  /.case OP_Ge: { 
e900: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
e910: 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75  ame as TK_GE, ju
e920: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
e930: 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
e940: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
e950: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
e960: 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73  n of pIn1 agains
e970: 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72  t pIn3 */.  char
e980: 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
e990: 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75  /* Affinity to u
e9a0: 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f  se for compariso
e9b0: 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  n */.  u16 flags
e9c0: 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  1;         /* Co
e9d0: 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61  py of initial va
e9e0: 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61  lue of pIn1->fla
e9f0: 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  gs */.  u16 flag
ea00: 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  s3;         /* C
ea10: 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76  opy of initial v
ea20: 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c  alue of pIn3->fl
ea30: 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  ags */..  pIn1 =
ea40: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
ea50: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
ea60: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67  pOp->p3];.  flag
ea70: 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73  s1 = pIn1->flags
ea80: 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e  ;.  flags3 = pIn
ea90: 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  3->flags;.  if( 
eaa0: 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33  (flags1 | flags3
eab0: 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  )&MEM_Null ){.  
eac0: 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68    /* One or both
ead0: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
eae0: 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f  LL */.    if( pO
eaf0: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e  p->p5 & SQLITE_N
eb00: 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f  ULLEQ ){.      /
eb10: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
eb20: 45 51 20 69 73 20 73 65 74 20 28 77 68 69 63 68  EQ is set (which
eb30: 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65   will only happe
eb40: 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f  n if the operato
eb50: 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50  r is.      ** OP
eb60: 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68  _Eq or OP_Ne) th
eb70: 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
eb80: 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e   or not dependin
eb90: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20  g on whether.   
eba0: 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74     ** or not bot
ebb0: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e  h operands are n
ebc0: 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ull..      */.  
ebd0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
ebe0: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c  >opcode==OP_Eq |
ebf0: 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
ec00: 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73  P_Ne );.      as
ec10: 73 65 72 74 28 20 28 66 6c 61 67 73 31 20 26 20  sert( (flags1 & 
ec20: 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20  MEM_Cleared)==0 
ec30: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c  );.      if( (fl
ec40: 61 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  ags1&MEM_Null)!=
ec50: 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61  0.       && (fla
ec60: 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs3&MEM_Null)!=0
ec70: 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
ec80: 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d  s3&MEM_Cleared)=
ec90: 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  =0.      ){.    
eca0: 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a      res = 0;  /*
ecb0: 20 52 65 73 75 6c 74 73 20 61 72 65 20 65 71 75   Results are equ
ecc0: 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73  al */.      }els
ecd0: 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  e{.        res =
ece0: 20 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20   1;  /* Results 
ecf0: 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f  are not equal */
ed00: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
ed10: 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c  se{.      /* SQL
ed20: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c  ITE_NULLEQ is cl
ed30: 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74  ear and at least
ed40: 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20   one operand is 
ed50: 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74  NULL,.      ** t
ed60: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
ed70: 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20  s always NULL.. 
ed80: 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70       ** The jump
ed90: 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
eda0: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
edb0: 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20  LL bit is set.. 
edc0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
edd0: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
ede0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b  TE_JUMPIFNULL ){
edf0: 0a 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f  .        pc = pO
ee00: 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 20 20 7d  p->p2-1;.      }
ee10: 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 35  else if( pOp->p5
ee20: 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
ee30: 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75  2 ){.        pOu
ee40: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
ee50: 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53  2];.        MemS
ee60: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
ee70: 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20   MEM_Null);.    
ee80: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
ee90: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
eea0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
eeb0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
eec0: 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65  }else{.    /* Ne
eed0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
eee0: 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d   NULL.  Do a com
eef0: 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20  parison. */.    
ef00: 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  affinity = pOp->
ef10: 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f  p5 & SQLITE_AFF_
ef20: 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66  MASK;.    if( af
ef30: 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 20 20  finity ){.      
ef40: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
ef50: 6e 31 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e  n1, affinity, en
ef60: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 61  coding);.      a
ef70: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
ef80: 33 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63  3, affinity, enc
ef90: 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 69 66  oding);.      if
efa0: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
efb0: 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ed ) goto no_mem
efc0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73  ;.    }..    ass
efd0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
efe0: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20  ==P4_COLLSEQ || 
eff0: 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30  pOp->p4.pColl==0
f000: 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c   );.    ExpandBl
f010: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 45 78  ob(pIn1);.    Ex
f020: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a  pandBlob(pIn3);.
f030: 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65      res = sqlite
f040: 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33  3MemCompare(pIn3
f050: 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e  , pIn1, pOp->p4.
f060: 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77  pColl);.  }.  sw
f070: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
f080: 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50  e ){.    case OP
f090: 5f 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Eq:    res = re
f0a0: 73 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s==0;     break;
f0b0: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a  .    case OP_Ne:
f0c0: 20 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30      res = res!=0
f0d0: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
f0e0: 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20   case OP_Lt:    
f0f0: 72 65 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20  res = res<0;    
f100: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
f110: 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20  e OP_Le:    res 
f120: 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72  = res<=0;     br
f130: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
f140: 5f 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Gt:    res = re
f150: 73 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  s>0;      break;
f160: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20  .    default:   
f170: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30      res = res>=0
f180: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;     break;.  }
f190: 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ..  if( pOp->p5 
f1a0: 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  & SQLITE_STOREP2
f1b0: 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26   ){.    pOut = &
f1c0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
f1d0: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
f1e0: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
f1f0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
f200: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
f210: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
f220: 20 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54   res;.    REGIST
f230: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
f240: 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  , pOut);.  }else
f250: 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
f260: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
f270: 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61    }..  /* Undo a
f280: 6e 79 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20  ny changes made 
f290: 62 79 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  by applyAffinity
f2a0: 28 29 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20  () to the input 
f2b0: 72 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20  registers. */.  
f2c0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 28 70  pIn1->flags = (p
f2d0: 49 6e 31 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f  In1->flags&~MEM_
f2e0: 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61  TypeMask) | (fla
f2f0: 67 73 31 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  gs1&MEM_TypeMask
f300: 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73  );.  pIn3->flags
f310: 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26   = (pIn3->flags&
f320: 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
f330: 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 54 79 70   (flags3&MEM_Typ
f340: 65 4d 61 73 6b 29 3b 0a 20 20 62 72 65 61 6b 3b  eMask);.  break;
f350: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
f360: 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a  ermutation * * *
f370: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20   P4 *.**.** Set 
f380: 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  the permutation 
f390: 75 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43  used by the OP_C
f3a0: 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20  ompare operator 
f3b0: 74 6f 20 62 65 20 74 68 65 20 61 72 72 61 79 0a  to be the array.
f3c0: 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69  ** of integers i
f3d0: 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n P4..**.** The 
f3e0: 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f  permutation is o
f3f0: 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20  nly valid until 
f400: 74 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70  the next OP_Comp
f410: 61 72 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20  are that has.** 
f420: 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  the OPFLAG_PERMU
f430: 54 45 20 62 69 74 20 73 65 74 20 69 6e 20 50 35  TE bit set in P5
f440: 2e 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20  . Typically the 
f450: 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73  OP_Permutation s
f460: 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20  hould .** occur 
f470: 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f  immediately prio
f480: 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70  r to the OP_Comp
f490: 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  are..*/.case OP_
f4a0: 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20  Permutation: {. 
f4b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
f4c0: 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
f4d0: 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
f4e0: 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61  Op->p4.ai );.  a
f4f0: 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70  Permute = pOp->p
f500: 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.ai;.  break;.}
f510: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d  ../* Opcode: Com
f520: 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
f530: 20 50 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72   P5.**.** Compar
f540: 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66  e two vectors of
f550: 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65   registers in re
f560: 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33  g(P1)..reg(P1+P3
f570: 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a  -1) (call this.*
f580: 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e  * vector "A") an
f590: 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65  d in reg(P2)..re
f5a0: 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29  g(P2+P3-1) ("B")
f5b0: 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75  .  Save the resu
f5c0: 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d  lt of.** the com
f5d0: 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20  parison for use 
f5e0: 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a  by the next OP_J
f5f0: 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a  ump instruct..**
f600: 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
f610: 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
f620: 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
f630: 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70  he order of comp
f640: 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74  arison is.** det
f650: 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d  ermined by the m
f660: 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65  ost recent OP_Pe
f670: 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74  rmutation operat
f680: 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f  or.  If the.** O
f690: 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
f6a0: 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  t is clear, then
f6b0: 20 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f   register are co
f6c0: 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e  mpared in sequen
f6d0: 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a  tial.** order..*
f6e0: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79  *.** P4 is a Key
f6f0: 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74  Info structure t
f700: 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c  hat defines coll
f710: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
f720: 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65  and sort.** orde
f730: 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61  rs for the compa
f740: 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d  rison.  The perm
f750: 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20  utation applies 
f760: 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  to registers.** 
f770: 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e  only.  The KeyIn
f780: 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  fo elements are 
f790: 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c  used sequentiall
f7a0: 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  y..**.** The com
f7b0: 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72  parison is a sor
f7c0: 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f  t comparison, so
f7d0: 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65   NULLs compare e
f7e0: 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61  qual,.** NULLs a
f7f0: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d  re less than num
f800: 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72  bers, numbers ar
f810: 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69  e less than stri
f820: 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69  ngs,.** and stri
f830: 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ngs are less tha
f840: 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65  n blobs..*/.case
f850: 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20   OP_Compare: {. 
f860: 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
f870: 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74  .  int p1;.  int
f880: 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79   p2;.  const Key
f890: 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
f8a0: 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c    int idx;.  Col
f8b0: 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20  lSeq *pColl;    
f8c0: 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
f8d0: 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20  uence to use on 
f8e0: 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69  this term */.  i
f8f0: 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20  nt bRev;        
f900: 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45    /* True for DE
f910: 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72  SCENDING sort or
f920: 64 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70  der */..  if( (p
f930: 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
f940: 50 45 52 4d 55 54 45 29 3d 3d 30 20 29 20 61 50  PERMUTE)==0 ) aP
f950: 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20  ermute = 0;.  n 
f960: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65  = pOp->p3;.  pKe
f970: 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
f980: 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
f990: 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73  rt( n>0 );.  ass
f9a0: 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30  ert( pKeyInfo!=0
f9b0: 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e   );.  p1 = pOp->
f9c0: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
f9d0: 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  p2;.#if SQLITE_D
f9e0: 45 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d  EBUG.  if( aPerm
f9f0: 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b  ute ){.    int k
fa00: 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f  , mx = 0;.    fo
fa10: 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29  r(k=0; k<n; k++)
fa20: 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d   if( aPermute[k]
fa30: 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d  >mx ) mx = aPerm
fa40: 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65  ute[k];.    asse
fa50: 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d  rt( p1>0 && p1+m
fa60: 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  x<=(p->nMem-p->n
fa70: 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20  Cursor)+1 );.   
fa80: 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26   assert( p2>0 &&
fa90: 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d   p2+mx<=(p->nMem
faa0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
fab0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
fac0: 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70  ssert( p1>0 && p
fad0: 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  1+n<=(p->nMem-p-
fae0: 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
faf0: 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
fb00: 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65  && p2+n<=(p->nMe
fb10: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  m-p->nCursor)+1 
fb20: 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
fb30: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
fb40: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
fb50: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d   i++){.    idx =
fb60: 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72   aPermute ? aPer
fb70: 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20  mute[i] : i;.   
fb80: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
fb90: 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  lid(&aMem[p1+idx
fba0: 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ]) );.    assert
fbb0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
fbc0: 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p2+idx]) );. 
fbd0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
fbe0: 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p1+idx, &aMem[
fbf0: 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
fc00: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
fc10: 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  idx, &aMem[p2+id
fc20: 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  x]);.    assert(
fc30: 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69   i<pKeyInfo->nFi
fc40: 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c  eld );.    pColl
fc50: 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f   = pKeyInfo->aCo
fc60: 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20  ll[i];.    bRev 
fc70: 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72  = pKeyInfo->aSor
fc80: 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69  tOrder[i];.    i
fc90: 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65  Compare = sqlite
fca0: 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65  3MemCompare(&aMe
fcb0: 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d  m[p1+idx], &aMem
fcc0: 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29  [p2+idx], pColl)
fcd0: 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61  ;.    if( iCompa
fce0: 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  re ){.      if( 
fcf0: 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20  bRev ) iCompare 
fd00: 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20  = -iCompare;.   
fd10: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
fd20: 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d    }.  aPermute =
fd30: 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
fd40: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20  /* Opcode: Jump 
fd50: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
fd60: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69  ** Jump to the i
fd70: 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64  nstruction at ad
fd80: 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72  dress P1, P2, or
fd90: 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   P3 depending on
fda0: 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74   whether.** in t
fdb0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
fdc0: 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75  P_Compare instru
fdd0: 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63  ction the P1 vec
fde0: 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61  tor was less tha
fdf0: 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f  n.** equal to, o
fe00: 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  r greater than t
fe10: 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65  he P2 vector, re
fe20: 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63  spectively..*/.c
fe30: 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20  ase OP_Jump: {  
fe40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
fe50: 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d  mp */.  if( iCom
fe60: 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 70 63  pare<0 ){.    pc
fe70: 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a   = pOp->p1 - 1;.
fe80: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d    }else if( iCom
fe90: 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70  pare==0 ){.    p
fea0: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
feb0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63  .  }else{.    pc
fec0: 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a   = pOp->p3 - 1;.
fed0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
fee0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50  /* Opcode: And P
fef0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
ff00: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
ff10: 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a  r[P1] && r[P2]).
ff20: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
ff30: 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68  ogical AND of th
ff40: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
ff50: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32 20  sters P1 and P2 
ff60: 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65  and.** write the
ff70: 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67   result into reg
ff80: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
ff90: 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
ffa0: 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29 20  P2 is 0 (false) 
ffb0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
ffc0: 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20  is 0 even if.** 
ffd0: 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
ffe0: 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
fff0: 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f   and true or two
10000 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61   NULLs give.** a
10010 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
10020 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50  ./* Opcode: Or P
10030 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
10040 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
10050 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a  r[P1] || r[P2]).
10060 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
10070 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65  ogical OR of the
10080 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
10090 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
100a0 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61  d.** store the a
100b0 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74 65  nswer in registe
100c0 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
100d0 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
100e0 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29  s nonzero (true)
100f0 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
10100 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20   is 1 (true).** 
10110 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65  even if the othe
10120 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  r input is NULL.
10130 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c    A NULL and fal
10140 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a  se or two NULLs.
10150 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f  ** give a NULL o
10160 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  utput..*/.case O
10170 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  P_And:          
10180 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
10190 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_AND, in1, in2,
101a0 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
101b0 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20  _Or: {          
101c0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
101d0 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  _OR, in1, in2, o
101e0 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b  ut3 */.  int v1;
101f0 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72      /* Left oper
10200 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20  and:  0==FALSE, 
10210 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
10220 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  OWN or NULL */. 
10230 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52   int v2;    /* R
10240 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d  ight operand: 0=
10250 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
10260 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
10270 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  ULL */..  pIn1 =
10280 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
10290 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
102a0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
102b0 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d  .    v1 = 2;.  }
102c0 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73  else{.    v1 = s
102d0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
102e0 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d  ue(pIn1)!=0;.  }
102f0 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
10300 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20  pOp->p2];.  if( 
10310 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
10320 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32  M_Null ){.    v2
10330 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
10340 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56     v2 = sqlite3V
10350 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
10360 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  )!=0;.  }.  if( 
10370 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
10380 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69  And ){.    stati
10390 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  c const unsigned
103a0 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b   char and_logic[
103b0 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30  ] = { 0, 0, 0, 0
103c0 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20  , 1, 2, 0, 2, 2 
103d0 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f  };.    v1 = and_
103e0 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
103f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61    }else{.    sta
10400 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
10410 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63  ed char or_logic
10420 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20  [] = { 0, 1, 2, 
10430 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32  1, 1, 1, 2, 1, 2
10440 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f   };.    v1 = or_
10450 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
10460 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d    }.  pOut = &aM
10470 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
10480 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20  f( v1==2 ){.    
10490 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
104a0 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
104b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75    }else{.    pOu
104c0 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20  t->u.i = v1;.   
104d0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
104e0 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
104f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
10500 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50  /* Opcode: Not P
10510 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
10520 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21  nopsis: r[P2]= !
10530 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  r[P1].**.** Inte
10540 72 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20  rpret the value 
10550 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
10560 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
10570 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  e.  Store the.**
10580 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d   boolean complem
10590 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ent in register 
105a0 50 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  P2.  If the valu
105b0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
105c0 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
105d0 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f  en a NULL is sto
105e0 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  red in P2..*/.ca
105f0 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20  se OP_Not: {    
10600 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
10610 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69  ame as TK_NOT, i
10620 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49  n1, out2 */.  pI
10630 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
10640 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
10650 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
10660 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
10670 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
10680 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
10690 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
106a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
106b0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
106c0 36 34 28 70 4f 75 74 2c 20 21 73 71 6c 69 74 65  64(pOut, !sqlite
106d0 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
106e0 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1));.  }.  brea
106f0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
10700 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20   BitNot P1 P2 * 
10710 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
10720 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a   r[P1]= ~r[P1].*
10730 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
10740 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
10750 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e 20  gister P1 as an 
10760 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20  integer.  Store 
10770 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70  the.** ones-comp
10780 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31  lement of the P1
10790 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
107a0 73 74 65 72 20 50 32 2e 20 20 49 66 20 50 31 20  ster P2.  If P1 
107b0 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20  holds.** a NULL 
107c0 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c  then store a NUL
107d0 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  L in P2..*/.case
107e0 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20   OP_BitNot: {   
107f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
10800 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20  e as TK_BITNOT, 
10810 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70  in1, out2 */.  p
10820 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
10830 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
10840 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
10850 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
10860 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
10870 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
10880 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
10890 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
108a0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
108b0 74 36 34 28 70 4f 75 74 2c 20 7e 73 71 6c 69 74  t64(pOut, ~sqlit
108c0 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
108d0 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65  In1));.  }.  bre
108e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
108f0 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20 2a  : Once P1 P2 * *
10900 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 69   *.**.** Check i
10910 66 20 4f 50 5f 4f 6e 63 65 20 66 6c 61 67 20 50  f OP_Once flag P
10920 31 20 69 73 20 73 65 74 2e 20 49 66 20 73 6f 2c  1 is set. If so,
10930 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
10940 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69  tion P2. Otherwi
10950 73 65 2c 0a 2a 2a 20 73 65 74 20 74 68 65 20 66  se,.** set the f
10960 6c 61 67 20 61 6e 64 20 66 61 6c 6c 20 74 68 72  lag and fall thr
10970 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
10980 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49   instruction.  I
10990 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a  n other words,.*
109a0 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61  * this opcode ca
109b0 75 73 65 73 20 61 6c 6c 20 66 6f 6c 6c 6f 77 69  uses all followi
109c0 6e 67 20 75 70 20 63 6f 64 65 73 20 75 70 20 74  ng up codes up t
109d0 68 72 6f 75 67 68 20 50 32 20 28 62 75 74 20 6e  hrough P2 (but n
109e0 6f 74 20 69 6e 63 6c 75 64 69 6e 67 0a 2a 2a 20  ot including.** 
109f0 50 32 29 20 74 6f 20 72 75 6e 20 6a 75 73 74 20  P2) to run just 
10a00 6f 6e 63 65 20 61 6e 64 20 73 6b 69 70 70 65 64  once and skipped
10a10 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20 74   on subsequent t
10a20 69 6d 65 73 20 74 68 72 6f 75 67 68 20 74 68 65  imes through the
10a30 20 6c 6f 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f   loop..*/.case O
10a40 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  P_Once: {       
10a50 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
10a60 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
10a70 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20  p1<p->nOnceFlag 
10a80 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f 6e 63  );.  if( p->aOnc
10a90 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 29  eFlag[pOp->p1] )
10aa0 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
10ab0 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  p2-1;.  }else{. 
10ac0 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b     p->aOnceFlag[
10ad0 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a 20 20  pOp->p1] = 1;.  
10ae0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
10af0 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50   Opcode: If P1 P
10b00 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
10b10 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
10b20 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
10b30 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20 20  er P1 is true.  
10b40 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  The value.** is 
10b50 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20  considered true 
10b60 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63  if it is numeric
10b70 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20   and non-zero.  
10b80 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
10b90 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
10ba0 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
10bb0 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65   if P3 is non-ze
10bc0 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ro..*/./* Opcode
10bd0 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33  : IfNot P1 P2 P3
10be0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
10bf0 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
10c00 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
10c10 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65  1 is False.  The
10c20 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
10c30 73 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66  sidered false if
10c40 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69   it has a numeri
10c50 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e  c value of zero.
10c60 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
10c70 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
10c80 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
10c90 6d 70 20 69 66 20 50 33 20 69 73 20 7a 65 72 6f  mp if P3 is zero
10ca0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a  ..*/.case OP_If:
10cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cc0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
10cd0 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20  .case OP_IfNot: 
10ce0 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
10cf0 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
10d00 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26  nt c;.  pIn1 = &
10d10 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
10d20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
10d30 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
10d40 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a     c = pOp->p3;.
10d50 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20    }else{.#ifdef 
10d60 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
10d70 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63  TING_POINT.    c
10d80 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
10d90 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
10da0 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73  .#else.    c = s
10db0 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
10dc0 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a  lue(pIn1)!=0.0;.
10dd0 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
10de0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
10df0 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20  fNot ) c = !c;. 
10e00 20 7d 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20   }.  if( c ){.  
10e10 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
10e20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
10e30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e  ../* Opcode: IsN
10e40 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
10e50 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66  ** Synopsis:  if
10e60 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74   r[P1]==NULL got
10e70 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
10e80 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
10e90 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
10ea0 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  1 is NULL..*/.ca
10eb0 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20  se OP_IsNull: { 
10ec0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
10ed0 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c  me as TK_ISNULL,
10ee0 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
10ef0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
10f00 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
10f10 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
10f20 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
10f30 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
10f40 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
10f50 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
10f60 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
10f70 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
10f80 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74   r[P1]!=NULL got
10f90 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
10fa0 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
10fb0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
10fc0 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20  1 is not NULL.  
10fd0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e  .*/.case OP_NotN
10fe0 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
10ff0 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
11000 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69  NOTNULL, jump, i
11010 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
11020 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
11030 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
11040 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
11050 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
11060 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
11070 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
11080 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50  ode: Column P1 P
11090 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
110a0 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 50  nopsis:  r[P3]=P
110b0 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  X.**.** Interpre
110c0 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20  t the data that 
110d0 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
110e0 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74 75   to as a structu
110f0 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a  re built using.*
11100 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  * the MakeRecord
11110 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28   instruction.  (
11120 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  See the MakeReco
11130 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  rd opcode for ad
11140 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f  ditional.** info
11150 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
11160 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  e format of the 
11170 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74 20  data.)  Extract 
11180 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e  the P2-th column
11190 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65  .** from this re
111a0 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65 20  cord.  If there 
111b0 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28 50  are less that (P
111c0 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20  2+1) .** values 
111d0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65  in the record, e
111e0 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a  xtract a NULL..*
111f0 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65  *.** The value e
11200 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f 72  xtracted is stor
11210 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
11220 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  3..**.** If the 
11230 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20  column contains 
11240 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66 69  fewer than P2 fi
11250 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61  elds, then extra
11260 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a  ct a NULL.  Or,.
11270 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72 67  ** if the P4 arg
11280 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45  ument is a P4_ME
11290 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  M use the value 
112a0 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  of the P4 argume
112b0 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73  nt as.** the res
112c0 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ult..**.** If th
112d0 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41  e OPFLAG_CLEARCA
112e0 43 48 45 20 62 69 74 20 69 73 20 73 65 74 20 6f  CHE bit is set o
112f0 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73 20 61  n P5 and P1 is a
11300 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75   pseudo-table cu
11310 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68  rsor,.** then th
11320 65 20 63 61 63 68 65 20 6f 66 20 74 68 65 20 63  e cache of the c
11330 75 72 73 6f 72 20 69 73 20 72 65 73 65 74 20 70  ursor is reset p
11340 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69  rior to extracti
11350 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  ng the column..*
11360 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43  * The first OP_C
11370 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20  olumn against a 
11380 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74  pseudo-table aft
11390 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  er the value of 
113a0 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72  the content.** r
113b0 65 67 69 73 74 65 72 20 68 61 73 20 63 68 61 6e  egister has chan
113c0 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20  ged should have 
113d0 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a  this bit set..**
113e0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
113f0 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
11400 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
11410 20 62 69 74 73 20 61 72 65 20 73 65 74 20 6f 6e   bits are set on
11420 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20   P5 when.** the 
11430 72 65 73 75 6c 74 20 69 73 20 67 75 61 72 61 6e  result is guaran
11440 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20  teed to only be 
11450 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
11460 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74 68  ment of a length
11470 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28  ().** or typeof(
11480 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70  ) function, resp
11490 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 20 6c  ectively.  The l
114a0 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67 65 20  oading of large 
114b0 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20  blobs can be.** 
114c0 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65 6e 67  skipped for leng
114d0 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e  th() and all con
114e0 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e  tent loading can
114f0 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f 72 20   be skipped for 
11500 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73  typeof()..*/.cas
11510 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20  e OP_Column: {. 
11520 20 69 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65   i64 payloadSize
11530 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66  64; /* Number of
11540 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
11550 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 32  cord */.  int p2
11560 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11570 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f  column number to
11580 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56   retrieve */.  V
11590 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
115a0 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
115b0 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72 73  rsor */.  BtCurs
115c0 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20  or *pCrsr;   /* 
115d0 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f 72  The BTree cursor
115e0 20 2a 2f 0a 20 20 75 33 32 20 2a 61 54 79 70 65   */.  u32 *aType
115f0 3b 20 20 20 20 20 20 20 20 2f 2a 20 61 54 79 70  ;        /* aTyp
11600 65 5b 69 5d 20 68 6f 6c 64 73 20 74 68 65 20 6e  e[i] holds the n
11610 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 74  umeric type of t
11620 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a  he i-th column *
11630 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74  /.  u32 *aOffset
11640 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73 65  ;      /* aOffse
11650 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20 74  t[i] is offset t
11660 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74 61 20  o start of data 
11670 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20  for i-th column 
11680 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20  */.  int len;   
11690 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
116a0 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65 72  ength of the ser
116b0 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72  ialized data for
116c0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20   the column */. 
116d0 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
116e0 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
116f0 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  ter */.  Mem *pD
11700 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57  est;        /* W
11710 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74 68  here to write th
11720 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c 75  e extracted valu
11730 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b  e */.  Mem sMem;
11740 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
11750 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63   storing the rec
11760 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
11770 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20  d */.  const u8 
11780 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20 50 61 72  *zData;   /* Par
11790 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  t of the record 
117a0 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f  being decoded */
117b0 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 48 64  .  const u8 *zHd
117c0 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 75 6e  r;    /* Next un
117d0 70 61 72 73 65 64 20 62 79 74 65 20 6f 66 20 74  parsed byte of t
117e0 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 63  he header */.  c
117f0 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64 48 64 72  onst u8 *zEndHdr
11800 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20  ; /* Pointer to 
11810 66 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72  first byte after
11820 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20   the header */. 
11830 20 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20   u32 offset;    
11840 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e      /* Offset in
11850 74 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20  to the data */. 
11860 20 75 33 32 20 73 7a 46 69 65 6c 64 3b 20 20 20   u32 szField;   
11870 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11880 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f   bytes in the co
11890 6e 74 65 6e 74 20 6f 66 20 61 20 66 69 65 6c 64  ntent of a field
118a0 20 2a 2f 0a 20 20 75 33 32 20 61 76 61 69 6c 3b   */.  u32 avail;
118b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
118c0 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61  er of bytes of a
118d0 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f  vailable data */
118e0 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20 20 20  .  u32 t;       
118f0 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20        /* A type 
11900 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65  code from the re
11910 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20  cord header */. 
11920 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20   Mem *pReg;     
11930 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62      /* PseudoTab
11940 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  le input registe
11950 72 20 2a 2f 0a 0a 20 20 70 32 20 3d 20 70 4f 70  r */..  p2 = pOp
11960 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
11970 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
11980 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
11990 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
119a0 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f  pDest = &aMem[pO
119b0 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
119c0 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44  utToChange(p, pD
119d0 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20  est);.  assert( 
119e0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
119f0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
11a00 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
11a10 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
11a20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
11a30 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43  .  assert( p2<pC
11a40 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 61 54  ->nField );.  aT
11a50 79 70 65 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b  ype = pC->aType;
11a60 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 61 54 79  .  aOffset = aTy
11a70 70 65 20 2b 20 70 43 2d 3e 6e 46 69 65 6c 64 3b  pe + pC->nField;
11a80 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
11a90 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
11aa0 45 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  E.  assert( pC->
11ab0 70 56 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29  pVtabCursor==0 )
11ac0 3b 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6e  ; /* OP_Column n
11ad0 65 76 65 72 20 63 61 6c 6c 65 64 20 6f 6e 20 76  ever called on v
11ae0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
11af0 23 65 6e 64 69 66 0a 20 20 70 43 72 73 72 20 3d  #endif.  pCrsr =
11b00 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
11b10 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
11b20 20 7c 7c 20 70 43 2d 3e 70 73 65 75 64 6f 54 61   || pC->pseudoTa
11b30 62 6c 65 52 65 67 3e 30 20 29 3b 20 2f 2a 20 70  bleReg>0 ); /* p
11b40 43 72 73 72 20 4e 55 4c 4c 20 6f 6e 20 50 73 65  Crsr NULL on Pse
11b50 75 64 6f 54 61 62 6c 65 73 20 2a 2f 0a 20 20 61  udoTables */.  a
11b60 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
11b70 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  || pC->nullRow )
11b80 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 43  ;          /* pC
11b90 2d 3e 6e 75 6c 6c 52 6f 77 20 6f 6e 20 50 73 65  ->nullRow on Pse
11ba0 75 64 6f 54 61 62 6c 65 73 20 2a 2f 0a 0a 20 20  udoTables */..  
11bb0 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  /* If the cursor
11bc0 20 63 61 63 68 65 20 69 73 20 73 74 61 6c 65 2c   cache is stale,
11bd0 20 62 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d   bring it up-to-
11be0 64 61 74 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73  date */.  rc = s
11bf0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
11c00 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66  Moveto(pC);.  if
11c10 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
11c20 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
11c30 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53    if( pC->cacheS
11c40 74 61 74 75 73 21 3d 70 2d 3e 63 61 63 68 65 43  tatus!=p->cacheC
11c50 74 72 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 26 4f  tr || (pOp->p5&O
11c60 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45  PFLAG_CLEARCACHE
11c70 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )!=0 ){.    if( 
11c80 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
11c90 20 20 20 20 20 69 66 28 20 70 43 72 73 72 3d 3d       if( pCrsr==
11ca0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
11cb0 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
11cc0 61 62 6c 65 52 65 67 3e 30 20 29 3b 0a 20 20 20  ableReg>0 );.   
11cd0 20 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65       pReg = &aMe
11ce0 6d 5b 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  m[pC->pseudoTabl
11cf0 65 52 65 67 5d 3b 0a 20 20 20 20 20 20 20 20 61  eReg];.        a
11d00 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61  ssert( pReg->fla
11d10 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
11d20 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
11d30 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67   memIsValid(pReg
11d40 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ) );.        pC-
11d50 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70  >payloadSize = p
11d60 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c  C->szRow = avail
11d70 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20   = pReg->n;.    
11d80 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28      pC->aRow = (
11d90 75 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a 20 20 20  u8*)pReg->z;.   
11da0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
11db0 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
11dc0 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  (pDest, MEM_Null
11dd0 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  );.        goto 
11de0 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
11df0 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
11e00 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
11e10 70 43 72 73 72 20 29 3b 0a 20 20 20 20 20 20 69  pCrsr );.      i
11e20 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  f( pC->isTable==
11e30 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
11e40 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
11e50 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
11e60 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 20  Crsr) );.       
11e70 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20   VVA_ONLY(rc =) 
11e80 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
11e90 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c  ize(pCrsr, &payl
11ea0 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20  oadSize64);.    
11eb0 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
11ec0 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 2f 2a 20  SQLITE_OK ); /* 
11ed0 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20  True because of 
11ee0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63  CursorMoveto() c
11ef0 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20  all above */.   
11f00 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 42       /* sqlite3B
11f10 74 72 65 65 50 61 72 73 65 43 65 6c 6c 50 74 72  treeParseCellPtr
11f20 28 29 20 75 73 65 73 20 67 65 74 56 61 72 69 6e  () uses getVarin
11f30 74 33 32 28 29 20 74 6f 20 65 78 74 72 61 63 74  t32() to extract
11f40 20 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20   the.        ** 
11f50 70 61 79 6c 6f 61 64 20 73 69 7a 65 2c 20 73 6f  payload size, so
11f60 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c   it is impossibl
11f70 65 20 66 6f 72 20 70 61 79 6c 6f 61 64 53 69 7a  e for payloadSiz
11f80 65 36 34 20 74 6f 20 62 65 0a 20 20 20 20 20 20  e64 to be.      
11f90 20 20 2a 2a 20 6c 61 72 67 65 72 20 74 68 61 6e    ** larger than
11fa0 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a 20 20 20   32 bits. */.   
11fb0 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 61       assert( (pa
11fc0 79 6c 6f 61 64 53 69 7a 65 36 34 20 26 20 53 51  yloadSize64 & SQ
11fd0 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d 28  LITE_MAX_U32)==(
11fe0 75 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65 36  u64)payloadSize6
11ff0 34 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  4 );.        pC-
12000 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42  >aRow = sqlite3B
12010 74 72 65 65 4b 65 79 46 65 74 63 68 28 70 43 72  treeKeyFetch(pCr
12020 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20  sr, &avail);.   
12030 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64       pC->payload
12040 53 69 7a 65 20 3d 20 28 75 33 32 29 70 61 79 6c  Size = (u32)payl
12050 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20 20  oadSize64;.     
12060 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
12070 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
12080 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
12090 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20  d(pCrsr) );.    
120a0 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20      VVA_ONLY(rc 
120b0 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 44  =) sqlite3BtreeD
120c0 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26  ataSize(pCrsr, &
120d0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29  pC->payloadSize)
120e0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
120f0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
12100 29 3b 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65  );   /* DataSize
12110 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a  () cannot fail *
12120 2f 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  /.        pC->aR
12130 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  ow = sqlite3Btre
12140 65 44 61 74 61 46 65 74 63 68 28 70 43 72 73 72  eDataFetch(pCrsr
12150 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20  , &avail);.     
12160 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
12170 20 61 76 61 69 6c 3c 3d 36 35 35 33 36 20 29 3b   avail<=65536 );
12180 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67    /* Maximum pag
12190 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69 42 20  e size is 64KiB 
121a0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  */.      if( pC-
121b0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20  >payloadSize <= 
121c0 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20 20  (u32)avail ){.  
121d0 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
121e0 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  = pC->payloadSiz
121f0 65 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  e;.      }else{.
12200 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f          pC->szRo
12210 77 20 3d 20 61 76 61 69 6c 3b 0a 20 20 20 20 20  w = avail;.     
12220 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d   }.      if( pC-
12230 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28  >payloadSize > (
12240 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
12250 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
12260 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 67  TH] ){.        g
12270 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
12280 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
12290 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
122a0 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20   p->cacheCtr;.  
122b0 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74    pC->iHdrOffset
122c0 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 70   = getVarint32(p
122d0 43 2d 3e 61 52 6f 77 2c 20 6f 66 66 73 65 74 29  C->aRow, offset)
122e0 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61  ;.    pC->nHdrPa
122f0 72 73 65 64 20 3d 20 30 3b 0a 20 20 20 20 61 4f  rsed = 0;.    aO
12300 66 66 73 65 74 5b 30 5d 20 3d 20 6f 66 66 73 65  ffset[0] = offse
12310 74 3b 0a 20 20 20 20 69 66 28 20 61 76 61 69 6c  t;.    if( avail
12320 3c 6f 66 66 73 65 74 20 29 7b 0a 20 20 20 20 20  <offset ){.     
12330 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65   /* pC->aRow doe
12340 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f  s not have to ho
12350 6c 64 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f  ld the entire ro
12360 77 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20 61  w, but it does a
12370 74 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a  t least.      **
12380 20 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74   need to cover t
12390 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65  he header of the
123a0 20 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d   record.  If pC-
123b0 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63  >aRow does not c
123c0 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20  ontain.      ** 
123d0 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61  the complete hea
123e0 64 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74  der, then set it
123f0 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e   to zero, forcin
12400 67 20 74 68 65 20 68 65 61 64 65 72 20 74 6f 20  g the header to 
12410 62 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61  be.      ** dyna
12420 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
12430 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e  d. */.      pC->
12440 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20  aRow = 0;.      
12450 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 20  pC->szRow = 0;. 
12460 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b     }..    /* Mak
12470 65 20 73 75 72 65 20 61 20 63 6f 72 72 75 70 74  e sure a corrupt
12480 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f   database has no
12490 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f 76  t given us an ov
124a0 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a 20  ersize header.. 
124b0 20 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f     ** Do this no
124c0 77 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76  w to avoid an ov
124d0 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c  ersize memory al
124e0 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a  location..    **
124f0 0a 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74  .    ** Type ent
12500 72 69 65 73 20 63 61 6e 20 62 65 20 62 65 74 77  ries can be betw
12510 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65  een 1 and 5 byte
12520 73 20 65 61 63 68 2e 20 20 42 75 74 20 34 20 61  s each.  But 4 a
12530 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20 2a 2a  nd 5 byte.    **
12540 20 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d 75   types use so mu
12550 63 68 20 64 61 74 61 20 73 70 61 63 65 20 74 68  ch data space th
12560 61 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c  at there can onl
12570 79 20 62 65 20 34 30 39 36 20 61 6e 64 20 33 32  y be 4096 and 32
12580 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 6d 2c   of.    ** them,
12590 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
125a0 53 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68  So the maximum h
125b0 65 61 64 65 72 20 6c 65 6e 67 74 68 20 72 65 73  eader length res
125c0 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20 20 20  ults from a.    
125d0 2a 2a 20 33 2d 62 79 74 65 20 74 79 70 65 20 66  ** 3-byte type f
125e0 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d  or each of the m
125f0 61 78 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20  aximum of 32768 
12600 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72  columns plus thr
12610 65 65 0a 20 20 20 20 2a 2a 20 65 78 74 72 61 20  ee.    ** extra 
12620 62 79 74 65 73 20 66 6f 72 20 74 68 65 20 68 65  bytes for the he
12630 61 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65  ader length itse
12640 6c 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33  lf.  32768*3 + 3
12650 20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 2a 2f   = 98307..    */
12660 0a 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 20  .    if( offset 
12670 3e 20 39 38 33 30 37 20 7c 7c 20 6f 66 66 73 65  > 98307 || offse
12680 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  t > pC->payloadS
12690 69 7a 65 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ize ){.      rc 
126a0 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
126b0 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  _BKPT;.      got
126c0 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f  o op_column_erro
126d0 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  r;.    }.  }..  
126e0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74 20  /* Make sure at 
126f0 6c 65 61 73 74 20 74 68 65 20 66 69 72 73 74 20  least the first 
12700 70 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66 20  p2+1 entries of 
12710 74 68 65 20 68 65 61 64 65 72 20 68 61 76 65 20  the header have 
12720 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64  been.  ** parsed
12730 20 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f 72   and valid infor
12740 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66  mation is in aOf
12750 66 73 65 74 5b 5d 20 61 6e 64 20 61 54 79 70 65  fset[] and aType
12760 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70  []..  */.  if( p
12770 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70  C->nHdrParsed<=p
12780 32 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  2 ){.    /* If t
12790 68 65 72 65 20 69 73 20 6d 6f 72 65 20 68 65 61  here is more hea
127a0 64 65 72 20 61 76 61 69 6c 61 62 6c 65 20 66 6f  der available fo
127b0 72 20 70 61 72 73 69 6e 67 20 69 6e 20 74 68 65  r parsing in the
127c0 20 72 65 63 6f 72 64 2c 20 74 72 79 0a 20 20 20   record, try.   
127d0 20 2a 2a 20 74 6f 20 65 78 74 72 61 63 74 20 61   ** to extract a
127e0 64 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73  dditional fields
127f0 20 75 70 20 74 68 72 6f 75 67 68 20 74 68 65 20   up through the 
12800 70 32 2b 31 2d 74 68 20 66 69 65 6c 64 20 0a 20  p2+1-th field . 
12810 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43     */.    if( pC
12820 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c 61 4f 66  ->iHdrOffset<aOf
12830 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  fset[0] ){.     
12840 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 7a 44   /* Make sure zD
12850 61 74 61 20 70 6f 69 6e 74 73 20 74 6f 20 65 6e  ata points to en
12860 6f 75 67 68 20 6f 66 20 74 68 65 20 72 65 63 6f  ough of the reco
12870 72 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20  rd to cover the 
12880 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 20  header. */.     
12890 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30   if( pC->aRow==0
128a0 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73   ){.        mems
128b0 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a  et(&sMem, 0, siz
128c0 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20  eof(sMem));.    
128d0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
128e0 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
128f0 28 70 43 72 73 72 2c 20 30 2c 20 61 4f 66 66 73  (pCrsr, 0, aOffs
12900 65 74 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20  et[0], .        
12910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12920 20 20 20 20 20 20 20 20 20 20 20 20 20 21 70 43               !pC
12930 2d 3e 69 73 54 61 62 6c 65 2c 20 26 73 4d 65 6d  ->isTable, &sMem
12940 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
12950 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
12960 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f            goto o
12970 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a  p_column_error;.
12980 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
12990 20 20 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73    zData = (u8*)s
129a0 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c  Mem.z;.      }el
129b0 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74  se{.        zDat
129c0 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20  a = pC->aRow;.  
129d0 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
129e0 2a 20 46 69 6c 6c 20 69 6e 20 61 54 79 70 65 5b  * Fill in aType[
129f0 69 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69  i] and aOffset[i
12a00 5d 20 76 61 6c 75 65 73 20 74 68 72 6f 75 67 68  ] values through
12a10 20 74 68 65 20 70 32 2d 74 68 20 66 69 65 6c 64   the p2-th field
12a20 2e 20 2a 2f 0a 20 20 20 20 20 20 69 20 3d 20 70  . */.      i = p
12a30 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3b 0a 20  C->nHdrParsed;. 
12a40 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20 61 4f       offset = aO
12a50 66 66 73 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20  ffset[i];.      
12a60 7a 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 70  zHdr = zData + p
12a70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3b 0a 20  C->iHdrOffset;. 
12a80 20 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a       zEndHdr = z
12a90 44 61 74 61 20 2b 20 61 4f 66 66 73 65 74 5b 30  Data + aOffset[0
12aa0 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ];.      assert(
12ab0 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a   i<=p2 && zHdr<z
12ac0 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20  EndHdr );.      
12ad0 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  do{.        if( 
12ae0 7a 48 64 72 5b 30 5d 3c 30 78 38 30 20 29 7b 0a  zHdr[0]<0x80 ){.
12af0 20 20 20 20 20 20 20 20 20 20 74 20 3d 20 7a 48            t = zH
12b00 64 72 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 20  dr[0];.         
12b10 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20 20   zHdr++;.       
12b20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
12b30 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c 69 74 65    zHdr += sqlite
12b40 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a 48 64  3GetVarint32(zHd
12b50 72 2c 20 26 74 29 3b 0a 20 20 20 20 20 20 20 20  r, &t);.        
12b60 7d 0a 20 20 20 20 20 20 20 20 61 54 79 70 65 5b  }.        aType[
12b70 69 5d 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20  i] = t;.        
12b80 73 7a 46 69 65 6c 64 20 3d 20 73 71 6c 69 74 65  szField = sqlite
12b90 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
12ba0 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 6f  en(t);.        o
12bb0 66 66 73 65 74 20 2b 3d 20 73 7a 46 69 65 6c 64  ffset += szField
12bc0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6f 66  ;.        if( of
12bd0 66 73 65 74 3c 73 7a 46 69 65 6c 64 20 29 7b 20  fset<szField ){ 
12be0 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 66 66 73   /* True if offs
12bf0 65 74 20 6f 76 65 72 66 6c 6f 77 73 20 2a 2f 0a  et overflows */.
12c00 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20 3d            zHdr =
12c10 20 26 7a 45 6e 64 48 64 72 5b 31 5d 3b 20 20 2f   &zEndHdr[1];  /
12c20 2a 20 46 6f 72 63 65 73 20 53 51 4c 49 54 45 5f  * Forces SQLITE_
12c30 43 4f 52 52 55 50 54 20 72 65 74 75 72 6e 20 62  CORRUPT return b
12c40 65 6c 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20  elow */.        
12c50 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
12c60 20 7d 0a 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a   }.        i++;.
12c70 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b          aOffset[
12c80 69 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20  i] = offset;.   
12c90 20 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d 70 32     }while( i<=p2
12ca0 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72   && zHdr<zEndHdr
12cb0 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48   );.      pC->nH
12cc0 64 72 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20  drParsed = i;.  
12cd0 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73      pC->iHdrOffs
12ce0 65 74 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20  et = (u32)(zHdr 
12cf0 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20  - zData);.      
12d00 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20  if( pC->aRow==0 
12d10 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
12d20 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
12d30 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20  (&sMem);.       
12d40 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45   sMem.flags = ME
12d50 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a  M_Null;.      }.
12d60 20 20 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 77    .      /* If w
12d70 65 20 68 61 76 65 20 72 65 61 64 20 6d 6f 72 65  e have read more
12d80 20 68 65 61 64 65 72 20 64 61 74 61 20 74 68 61   header data tha
12d90 6e 20 77 61 73 20 63 6f 6e 74 61 69 6e 65 64 20  n was contained 
12da0 69 6e 20 74 68 65 20 68 65 61 64 65 72 2c 0a 20  in the header,. 
12db0 20 20 20 20 20 2a 2a 20 6f 72 20 69 66 20 74 68       ** or if th
12dc0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73  e end of the las
12dd0 74 20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20  t field appears 
12de0 74 6f 20 62 65 20 70 61 73 74 20 74 68 65 20 65  to be past the e
12df0 6e 64 20 6f 66 20 74 68 65 0a 20 20 20 20 20 20  nd of the.      
12e00 2a 2a 20 72 65 63 6f 72 64 2c 20 6f 72 20 69 66  ** record, or if
12e10 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
12e20 6c 61 73 74 20 66 69 65 6c 64 20 61 70 70 65 61  last field appea
12e30 72 73 20 74 6f 20 62 65 20 62 65 66 6f 72 65 20  rs to be before 
12e40 74 68 65 20 65 6e 64 0a 20 20 20 20 20 20 2a 2a  the end.      **
12e50 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 28   of the record (
12e60 77 68 65 6e 20 61 6c 6c 20 66 69 65 6c 64 73 20  when all fields 
12e70 70 72 65 73 65 6e 74 29 2c 20 74 68 65 6e 20 77  present), then w
12e80 65 20 6d 75 73 74 20 62 65 20 64 65 61 6c 69 6e  e must be dealin
12e90 67 20 0a 20 20 20 20 20 20 2a 2a 20 77 69 74 68  g .      ** with
12ea0 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
12eb0 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ase..      */.  
12ec0 20 20 20 20 69 66 28 20 28 7a 48 64 72 20 3e 20      if( (zHdr > 
12ed0 7a 45 6e 64 48 64 72 29 0a 20 20 20 20 20 20 20  zEndHdr).       
12ee0 7c 7c 20 28 6f 66 66 73 65 74 20 3e 20 70 43 2d  || (offset > pC-
12ef0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20  >payloadSize).  
12f00 20 20 20 20 20 7c 7c 20 28 7a 48 64 72 3d 3d 7a       || (zHdr==z
12f10 45 6e 64 48 64 72 20 26 26 20 6f 66 66 73 65 74  EndHdr && offset
12f20 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  !=pC->payloadSiz
12f30 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  e).      ){.    
12f40 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
12f50 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
12f60 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
12f70 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20  lumn_error;.    
12f80 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f    }.    }..    /
12f90 2a 20 49 66 20 61 66 74 65 72 20 74 72 79 69 6e  * If after tryin
12fa0 67 20 74 6f 20 65 78 74 72 61 20 6e 65 77 20 65  g to extra new e
12fb0 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20  ntries from the 
12fc0 68 65 61 64 65 72 2c 20 6e 48 64 72 50 61 72 73  header, nHdrPars
12fd0 65 64 20 69 73 0a 20 20 20 20 2a 2a 20 73 74 69  ed is.    ** sti
12fe0 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20 70 32 2c  ll not up to p2,
12ff0 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
13000 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73 20   the record has 
13010 66 65 77 65 72 20 74 68 61 6e 20 70 32 0a 20 20  fewer than p2.  
13020 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20 53    ** columns.  S
13030 6f 20 74 68 65 20 72 65 73 75 6c 74 20 77 69 6c  o the result wil
13040 6c 20 62 65 20 65 69 74 68 65 72 20 74 68 65 20  l be either the 
13050 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 72  default value or
13060 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a   a NULL..    */.
13070 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72      if( pC->nHdr
13080 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20  Parsed<=p2 ){.  
13090 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74      if( pOp->p4t
130a0 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20  ype==P4_MEM ){. 
130b0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
130c0 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
130d0 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e  (pDest, pOp->p4.
130e0 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63  pMem, MEM_Static
130f0 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
13100 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79          MemSetTy
13110 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45  peFlag(pDest, ME
13120 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 7d  M_Null);.      }
13130 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  .      goto op_c
13140 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d  olumn_out;.    }
13150 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61  .  }..  /* Extra
13160 63 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66  ct the content f
13170 6f 72 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63  or the p2+1-th c
13180 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20  olumn.  Control 
13190 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65  can only.  ** re
131a0 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69  ach this point i
131b0 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61  f aOffset[p2], a
131c0 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e  Offset[p2+1], an
131d0 64 20 61 54 79 70 65 5b 70 32 5d 20 61 72 65 0a  d aType[p2] are.
131e0 20 20 2a 2a 20 61 6c 6c 20 76 61 6c 69 64 2e 0a    ** all valid..
131f0 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
13200 32 3c 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  2<pC->nHdrParsed
13210 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63   );.  assert( rc
13220 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  ==SQLITE_OK );. 
13230 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d   if( pC->szRow>=
13240 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b  aOffset[p2+1] ){
13250 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20  .    /* This is 
13260 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  the common case 
13270 77 68 65 72 65 20 74 68 65 20 64 65 73 69 72 65  where the desire
13280 64 20 63 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f  d content fits o
13290 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20  n the original. 
132a0 20 20 20 2a 2a 20 70 61 67 65 20 2d 20 77 68 65     ** page - whe
132b0 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69  re the content i
132c0 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72  s not on an over
132d0 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20 20  flow page */.   
132e0 20 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28   VdbeMemRelease(
132f0 70 44 65 73 74 29 3b 0a 20 20 20 20 73 71 6c 69  pDest);.    sqli
13300 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
13310 28 70 43 2d 3e 61 52 6f 77 2b 61 4f 66 66 73 65  (pC->aRow+aOffse
13320 74 5b 70 32 5d 2c 20 61 54 79 70 65 5b 70 32 5d  t[p2], aType[p2]
13330 2c 20 70 44 65 73 74 29 3b 0a 20 20 7d 65 6c 73  , pDest);.  }els
13340 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 62  e{.    /* This b
13350 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e  ranch happens on
13360 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20  ly when content 
13370 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70  is on overflow p
13380 61 67 65 73 20 2a 2f 0a 20 20 20 20 74 20 3d 20  ages */.    t = 
13390 61 54 79 70 65 5b 70 32 5d 3b 0a 20 20 20 20 69  aType[p2];.    i
133a0 66 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28  f( ((pOp->p5 & (
133b0 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
133c0 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52  |OPFLAG_TYPEOFAR
133d0 47 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20  G))!=0.         
133e0 20 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28   && ((t>=12 && (
133f0 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70  t&1)==0) || (pOp
13400 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59  ->p5 & OPFLAG_TY
13410 50 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20  PEOFARG)!=0)).  
13420 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c     || (len = sql
13430 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
13440 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20  peLen(t))==0.   
13450 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e   ){.      /* Con
13460 74 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61  tent is irreleva
13470 6e 74 20 66 6f 72 20 74 68 65 20 74 79 70 65 6f  nt for the typeo
13480 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  f() function and
13490 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 74 68   for.      ** th
134a0 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63  e length(X) func
134b0 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62  tion if X is a b
134c0 6c 6f 62 2e 20 20 53 6f 20 77 65 20 6d 69 67 68  lob.  So we migh
134d0 74 20 61 73 20 77 65 6c 6c 20 75 73 65 0a 20 20  t as well use.  
134e0 20 20 20 20 2a 2a 20 62 6f 67 75 73 20 63 6f 6e      ** bogus con
134f0 74 65 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e  tent rather than
13500 20 72 65 61 64 69 6e 67 20 63 6f 6e 74 65 6e 74   reading content
13510 20 66 72 6f 6d 20 64 69 73 6b 2e 20 20 4e 55 4c   from disk.  NUL
13520 4c 20 77 6f 72 6b 73 0a 20 20 20 20 20 20 2a 2a  L works.      **
13530 20 66 6f 72 20 74 65 78 74 20 61 6e 64 20 62 6c   for text and bl
13540 6f 62 20 61 6e 64 20 77 68 61 74 65 76 65 72 20  ob and whatever 
13550 69 73 20 69 6e 20 74 68 65 20 70 61 79 6c 6f 61  is in the payloa
13560 64 53 69 7a 65 36 34 20 76 61 72 69 61 62 6c 65  dSize64 variable
13570 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 77  .      ** will w
13580 6f 72 6b 20 66 6f 72 20 65 76 65 72 79 74 68 69  ork for everythi
13590 6e 67 20 65 6c 73 65 2e 20 20 43 6f 6e 74 65 6e  ng else.  Conten
135a0 74 20 69 73 20 61 6c 73 6f 20 69 72 72 65 6c 65  t is also irrele
135b0 76 61 6e 74 20 69 66 0a 20 20 20 20 20 20 2a 2a  vant if.      **
135c0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c 65 6e   the content len
135d0 67 74 68 20 69 73 20 30 2e 20 2a 2f 0a 20 20 20  gth is 0. */.   
135e0 20 20 20 7a 44 61 74 61 20 3d 20 74 3c 3d 31 33     zData = t<=13
135f0 20 3f 20 28 75 38 2a 29 26 70 61 79 6c 6f 61 64   ? (u8*)&payload
13600 53 69 7a 65 36 34 20 3a 20 30 3b 0a 20 20 20 20  Size64 : 0;.    
13610 20 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 3d    sMem.zMalloc =
13620 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
13630 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d 65       memset(&sMe
13640 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65  m, 0, sizeof(sMe
13650 6d 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  m));.      sqlit
13660 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73  e3VdbeMemMove(&s
13670 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  Mem, pDest);.   
13680 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
13690 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
136a0 70 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70  pCrsr, aOffset[p
136b0 32 5d 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e 69 73  2], len, !pC->is
136c0 54 61 62 6c 65 2c 0a 20 20 20 20 20 20 20 20 20  Table,.         
136d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136e0 20 20 20 20 20 20 20 20 20 20 26 73 4d 65 6d 29            &sMem)
136f0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
13700 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
13710 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
13720 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  umn_error;.     
13730 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d   }.      zData =
13740 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20   (u8*)sMem.z;.  
13750 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
13760 64 62 65 53 65 72 69 61 6c 47 65 74 28 7a 44 61  dbeSerialGet(zDa
13770 74 61 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20  ta, t, pDest);. 
13780 20 20 20 2f 2a 20 49 66 20 77 65 20 64 79 6e 61     /* If we dyna
13790 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
137a0 64 20 73 70 61 63 65 20 74 6f 20 68 6f 6c 64 20  d space to hold 
137b0 74 68 65 20 64 61 74 61 20 28 69 6e 20 74 68 65  the data (in the
137c0 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  .    ** sqlite3V
137d0 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
137e0 29 20 63 61 6c 6c 20 61 62 6f 76 65 29 20 74 68  ) call above) th
137f0 65 6e 20 74 72 61 6e 73 66 65 72 20 63 6f 6e 74  en transfer cont
13800 72 6f 6c 20 6f 66 20 74 68 61 74 0a 20 20 20 20  rol of that.    
13810 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  ** dynamically a
13820 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 6f  llocated space o
13830 76 65 72 20 74 6f 20 74 68 65 20 70 44 65 73 74  ver to the pDest
13840 20 73 74 72 75 63 74 75 72 65 2e 0a 20 20 20 20   structure..    
13850 2a 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74 73  ** This prevents
13860 20 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 20   a memory copy. 
13870 2a 2f 0a 20 20 20 20 69 66 28 20 73 4d 65 6d 2e  */.    if( sMem.
13880 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20  zMalloc ){.     
13890 20 61 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d   assert( sMem.z=
138a0 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b  =sMem.zMalloc );
138b0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 21  .      assert( !
138c0 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20  (pDest->flags & 
138d0 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20  MEM_Dyn) );.    
138e0 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65 73    assert( !(pDes
138f0 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  t->flags & (MEM_
13900 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 29 20 7c  Blob|MEM_Str)) |
13910 7c 20 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d  | pDest->z==sMem
13920 2e 7a 20 29 3b 0a 20 20 20 20 20 20 70 44 65 73  .z );.      pDes
13930 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45  t->flags &= ~(ME
13940 4d 5f 45 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74  M_Ephem|MEM_Stat
13950 69 63 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74  ic);.      pDest
13960 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54  ->flags |= MEM_T
13970 65 72 6d 3b 0a 20 20 20 20 20 20 70 44 65 73 74  erm;.      pDest
13980 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20  ->z = sMem.z;.  
13990 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c      pDest->zMall
139a0 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f  oc = sMem.zMallo
139b0 63 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  c;.    }.  }.  p
139c0 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  Dest->enc = enco
139d0 64 69 6e 67 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e  ding;..op_column
139e0 5f 6f 75 74 3a 0a 20 20 44 65 65 70 68 65 6d 65  _out:.  Deepheme
139f0 72 61 6c 69 7a 65 28 70 44 65 73 74 29 3b 0a 6f  ralize(pDest);.o
13a00 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3a 0a  p_column_error:.
13a10 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
13a20 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20 20  BSIZE(pDest);.  
13a30 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
13a40 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a  Op->p3, pDest);.
13a50 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
13a60 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20  pcode: Affinity 
13a70 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
13a80 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69  Synopsis: affini
13a90 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ty(r[P1@P2]).**.
13aa0 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74  ** Apply affinit
13ab0 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f  ies to a range o
13ac0 66 20 50 32 20 72 65 67 69 73 74 65 72 73 20 73  f P2 registers s
13ad0 74 61 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e  tarting with P1.
13ae0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73  .**.** P4 is a s
13af0 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32  tring that is P2
13b00 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
13b10 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63  . The nth charac
13b20 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
13b30 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
13b40 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
13b50 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
13b60 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e  e used for the n
13b70 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c  th.** memory cel
13b80 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a  l in the range..
13b90 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e  */.case OP_Affin
13ba0 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63  ity: {.  const c
13bb0 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
13bc0 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
13bd0 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
13be0 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66 3b 20  */.  char cAff; 
13bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13c00 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63   A single charac
13c10 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74 79 20  ter of affinity 
13c20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20  */..  zAffinity 
13c30 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61  = pOp->p4.z;.  a
13c40 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
13c50 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
13c60 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e   zAffinity[pOp->
13c70 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  p2]==0 );.  pIn1
13c80 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
13c90 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63 41 66  ];.  while( (cAf
13ca0 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b  f = *(zAffinity+
13cb0 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 61 73  +))!=0 ){.    as
13cc0 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20 26 70  sert( pIn1 <= &p
13cd0 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d  ->aMem[(p->nMem-
13ce0 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
13cf0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
13d00 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
13d10 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70      ExpandBlob(p
13d20 49 6e 31 29 3b 0a 20 20 20 20 61 70 70 6c 79 41  In1);.    applyA
13d30 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 63 41  ffinity(pIn1, cA
13d40 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ff, encoding);. 
13d50 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20     pIn1++;.  }. 
13d60 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
13d70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64  code: MakeRecord
13d80 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
13d90 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
13da0 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40 50 32 5d  ]=mkrec(r[P1@P2]
13db0 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20  ).**.** Convert 
13dc0 50 32 20 72 65 67 69 73 74 65 72 73 20 62 65 67  P2 registers beg
13dd0 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31 20 69  inning with P1 i
13de0 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f 72 64 20  nto the [record 
13df0 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73 65 20 61  format].** use a
13e00 73 20 61 20 64 61 74 61 20 72 65 63 6f 72 64 20  s a data record 
13e10 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 61  in a database ta
13e20 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a  ble or as a key.
13e30 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20  ** in an index. 
13e40 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   The OP_Column o
13e50 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f 64 65  pcode can decode
13e60 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61 74 65   the record late
13e70 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20  r..**.** P4 may 
13e80 62 65 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  be a string that
13e90 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72   is P2 character
13ea0 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68  s long.  The nth
13eb0 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
13ec0 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69  e.** string indi
13ed0 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  cates the column
13ee0 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73   affinity that s
13ef0 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f  hould be used fo
13f00 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65  r the nth.** fie
13f10 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ld of the index 
13f20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  key..**.** The m
13f30 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72  apping from char
13f40 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74  acter to affinit
13f50 79 20 69 73 20 67 69 76 65 6e 20 62 79 20 74 68  y is given by th
13f60 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a  e SQLITE_AFF_.**
13f70 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
13f80 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a  in sqliteInt.h..
13f90 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e  **.** If P4 is N
13fa0 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64  ULL then all ind
13fb0 65 78 20 66 69 65 6c 64 73 20 68 61 76 65 20 74  ex fields have t
13fc0 68 65 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45  he affinity NONE
13fd0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b  ..*/.case OP_Mak
13fe0 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20  eRecord: {.  u8 
13ff0 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20 20  *zNewRecord;    
14000 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72 20      /* A buffer 
14010 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61  to hold the data
14020 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
14030 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ord */.  Mem *pR
14040 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
14050 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72  /* The new recor
14060 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61  d */.  u64 nData
14070 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
14080 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
14090 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
140a0 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20 20  /.  int nHdr;   
140b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
140c0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
140d0 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f   header space */
140e0 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20 20  .  i64 nByte;   
140f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
14100 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  a space required
14110 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64   for this record
14120 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b   */.  int nZero;
14130 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14140 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62  Number of zero b
14150 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
14160 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
14170 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20  .  int nVarint; 
14180 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
14190 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
141a0 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33  a varint */.  u3
141b0 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20  2 serial_type;  
141c0 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65       /* Type fie
141d0 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61  ld */.  Mem *pDa
141e0 74 61 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ta0;           /
141f0 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f  * First field to
14200 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74   be combined int
14210 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  o the record */.
14220 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20    Mem *pLast;   
14230 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
14240 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65   field of the re
14250 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46  cord */.  int nF
14260 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20  ield;           
14270 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
14280 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
14290 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  rd */.  char *zA
142a0 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f  ffinity;       /
142b0 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 73  * The affinity s
142c0 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65  tring for the re
142d0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69  cord */.  int fi
142e0 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
142f0 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20   /* File format 
14300 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64  to use for encod
14310 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20  ing */.  int i; 
14320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14330 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69 6e  /* Space used in
14340 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 68 65   zNewRecord[] he
14350 61 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b  ader */.  int j;
14360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14370 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69   /* Space used i
14380 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 63  n zNewRecord[] c
14390 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  ontent */.  int 
143a0 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  len;            
143b0 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
143c0 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a  a field */..  /*
143d0 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65   Assuming the re
143e0 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20  cord contains N 
143f0 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f  fields, the reco
14400 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a  rd format looks.
14410 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a    ** like this:.
14420 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d    **.  ** ------
14430 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14440 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14450 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14460 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14470 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69  --.  ** | hdr-si
14480 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79  ze | type 0 | ty
14490 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70  pe 1 | ... | typ
144a0 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20  e N-1 | data0 | 
144b0 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c  ... | data N-1 |
144c0 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d   .  ** ---------
144d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
144e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
144f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14500 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
14510 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30    **.  ** Data(0
14520 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  ) is taken from 
14530 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 44 61  register P1.  Da
14540 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d  ta(1) comes from
14550 20 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20   register P1+1. 
14560 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74 68   ** and so froth
14570 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68  ..  **.  ** Each
14580 20 74 79 70 65 20 66 69 65 6c 64 20 69 73 20 61   type field is a
14590 20 76 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e   varint represen
145a0 74 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20  ting the serial 
145b0 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a  type of the .  *
145c0 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
145d0 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65  data element (se
145e0 65 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  e sqlite3VdbeSer
145f0 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a  ialType()). The.
14600 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69    ** hdr-size fi
14610 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61  eld is also a va
14620 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
14630 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68  e offset from th
14640 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a  e beginning.  **
14650 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74   of the record t
14660 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20  o data0..  */.  
14670 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20  nData = 0;      
14680 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14690 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70  bytes of data sp
146a0 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20  ace */.  nHdr = 
146b0 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  0;          /* N
146c0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
146d0 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a  f header space *
146e0 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20  /.  nZero = 0;  
146f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14700 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61   of zero bytes a
14710 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
14720 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69   record */.  nFi
14730 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  eld = pOp->p1;. 
14740 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70   zAffinity = pOp
14750 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74  ->p4.z;.  assert
14760 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20 70 4f  ( nField>0 && pO
14770 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
14780 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e  p2+nField<=(p->n
14790 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
147a0 31 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20  1 );.  pData0 = 
147b0 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20  &aMem[nField];. 
147c0 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
147d0 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44  2;.  pLast = &pD
147e0 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a  ata0[nField-1];.
147f0 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20    file_format = 
14800 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
14810 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65  ormat;..  /* Ide
14820 6e 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74  ntify the output
14830 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61   register */.  a
14840 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70  ssert( pOp->p3<p
14850 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70  Op->p1 || pOp->p
14860 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  3>=pOp->p1+pOp->
14870 70 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  p2 );.  pOut = &
14880 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
14890 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
148a0 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f  e(p, pOut);..  /
148b0 2a 20 41 70 70 6c 79 20 74 68 65 20 72 65 71 75  * Apply the requ
148c0 65 73 74 65 64 20 61 66 66 69 6e 69 74 79 20 74  ested affinity t
148d0 6f 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a  o all inputs.  *
148e0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74  /.  assert( pDat
148f0 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69  a0<=pLast );.  i
14900 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a  f( zAffinity ){.
14910 20 20 20 20 70 52 65 63 20 3d 20 70 44 61 74 61      pRec = pData
14920 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  0;.    do{.     
14930 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
14940 52 65 63 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79  Rec, *(zAffinity
14950 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  ++), encoding);.
14960 20 20 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70      }while( (++p
14970 52 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20  Rec)<=pLast );. 
14980 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68   }..  /* Loop th
14990 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e  rough the elemen
149a0 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b  ts that will mak
149b0 65 20 75 70 20 74 68 65 20 72 65 63 6f 72 64 20  e up the record 
149c0 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f  to figure.  ** o
149d0 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63  ut how much spac
149e0 65 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  e is required fo
149f0 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  r the new record
14a00 2e 0a 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20  ..  */.  pRec = 
14a10 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20  pLast;.  do{.   
14a20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
14a30 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20  lid(pRec) );.   
14a40 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73   serial_type = s
14a50 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
14a60 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f  Type(pRec, file_
14a70 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65 6e  format);.    len
14a80 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
14a90 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72 69  rialTypeLen(seri
14aa0 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66  al_type);.    if
14ab0 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20  ( pRec->flags & 
14ac0 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
14ad0 20 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20    if( nData ){. 
14ae0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
14af0 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
14b00 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c  pRec);.      }el
14b10 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65 72  se{.        nZer
14b20 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  o += pRec->u.nZe
14b30 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20  ro;.        len 
14b40 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f  -= pRec->u.nZero
14b50 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
14b60 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e      nData += len
14b70 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
14b80 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37  serial_type==127
14b90 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
14ba0 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31  ( serial_type==1
14bb0 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  28 );.    nHdr +
14bc0 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31  = serial_type<=1
14bd0 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33  27 ? 1 : sqlite3
14be0 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c  VarintLen(serial
14bf0 5f 74 79 70 65 29 3b 0a 20 20 7d 77 68 69 6c 65  _type);.  }while
14c00 28 20 28 2d 2d 70 52 65 63 29 3e 3d 70 44 61 74  ( (--pRec)>=pDat
14c10 61 30 20 29 3b 0a 0a 20 20 2f 2a 20 41 64 64 20  a0 );..  /* Add 
14c20 74 68 65 20 69 6e 69 74 69 61 6c 20 68 65 61 64  the initial head
14c30 65 72 20 76 61 72 69 6e 74 20 61 6e 64 20 74 6f  er varint and to
14c40 74 61 6c 20 74 68 65 20 73 69 7a 65 20 2a 2f 0a  tal the size */.
14c50 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72    testcase( nHdr
14c60 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73 74 63  ==126 );.  testc
14c70 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37 20 29  ase( nHdr==127 )
14c80 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d 31 32  ;.  if( nHdr<=12
14c90 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  6 ){.    /* The 
14ca0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20  common case */. 
14cb0 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20     nHdr += 1;.  
14cc0 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61  }else{.    /* Ra
14cd0 72 65 20 63 61 73 65 20 6f 66 20 61 20 72 65 61  re case of a rea
14ce0 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64 65 72  lly large header
14cf0 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74 20   */.    nVarint 
14d00 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  = sqlite3VarintL
14d10 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48  en(nHdr);.    nH
14d20 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20  dr += nVarint;. 
14d30 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73     if( nVarint<s
14d40 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
14d50 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a  nHdr) ) nHdr++;.
14d60 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48    }.  nByte = nH
14d70 64 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66 28 20  dr+nData;.  if( 
14d80 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  nByte>db->aLimit
14d90 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
14da0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
14db0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a  o too_big;.  }..
14dc0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
14dd0 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
14de0 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20  er has a buffer 
14df0 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
14e00 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20  store .  ** the 
14e10 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20  new record. The 
14e20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
14e30 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74  (pOp->p3) is not
14e40 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a   allowed to.  **
14e50 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69   be one of the i
14e60 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28  nput registers (
14e70 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c  because the foll
14e80 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20  owing call to.  
14e90 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
14ea0 6d 47 72 6f 77 28 29 20 63 6f 75 6c 64 20 63 6c  mGrow() could cl
14eb0 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65 20  obber the value 
14ec0 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73 65  before it is use
14ed0 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73  d)..  */.  if( s
14ee0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
14ef0 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79  w(pOut, (int)nBy
14f00 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f  te, 0) ){.    go
14f10 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
14f20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75   zNewRecord = (u
14f30 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20  8 *)pOut->z;..  
14f40 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63  /* Write the rec
14f50 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74  ord */.  i = put
14f60 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63  Varint32(zNewRec
14f70 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20  ord, nHdr);.  j 
14f80 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72 74  = nHdr;.  assert
14f90 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20  ( pData0<=pLast 
14fa0 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61 74  );.  pRec = pDat
14fb0 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65  a0;.  do{.    se
14fc0 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69  rial_type = sqli
14fd0 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
14fe0 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72  e(pRec, file_for
14ff0 6d 61 74 29 3b 0a 20 20 20 20 69 20 2b 3d 20 70  mat);.    i += p
15000 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77  utVarint32(&zNew
15010 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61  Record[i], seria
15020 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20 20 20  l_type);        
15030 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79      /* serial ty
15040 70 65 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73  pe */.    j += s
15050 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
15060 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  Put(&zNewRecord[
15070 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c  j], pRec, serial
15080 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65  _type); /* conte
15090 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20  nt */.  }while( 
150a0 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20  (++pRec)<=pLast 
150b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d  );.  assert( i==
150c0 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74  nHdr );.  assert
150d0 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20  ( j==nByte );.. 
150e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
150f0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
15100 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
15110 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  or) );.  pOut->n
15120 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
15130 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
15140 45 4d 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79  EM_Blob | MEM_Dy
15150 6e 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20  n;.  pOut->xDel 
15160 3d 20 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f  = 0;.  if( nZero
15170 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e   ){.    pOut->u.
15180 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20  nZero = nZero;. 
15190 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c     pOut->flags |
151a0 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a  = MEM_Zero;.  }.
151b0 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51    pOut->enc = SQ
151c0 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49  LITE_UTF8;  /* I
151d0 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20  n case the blob 
151e0 69 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65  is ever converte
151f0 64 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52  d to text */.  R
15200 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
15210 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p3, pOut);.  
15220 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
15230 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
15240 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
15250 3a 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20  : Count P1 P2 * 
15260 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
15270 20 72 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a   r[P2]=count().*
15280 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6e  *.** Store the n
15290 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
152a0 20 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c   (an integer val
152b0 75 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ue) in the table
152c0 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70   or index .** op
152d0 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50  ened by cursor P
152e0 31 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  1 in register P2
152f0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
15300 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55  TE_OMIT_BTREECOU
15310 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74  NT.case OP_Count
15320 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  : {         /* o
15330 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
15340 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a  /.  i64 nEntry;.
15350 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
15360 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20 70 2d  r;..  pCrsr = p-
15370 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
15380 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  >pCursor;.  asse
15390 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 6e  rt( pCrsr );.  n
153a0 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e  Entry = 0;  /* N
153b0 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
153c0 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65   used to silence
153d0 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20   a warning. */. 
153e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
153f0 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26  eeCount(pCrsr, &
15400 6e 45 6e 74 72 79 29 3b 0a 20 20 70 4f 75 74 2d  nEntry);.  pOut-
15410 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20  >u.i = nEntry;. 
15420 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
15430 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76  ../* Opcode: Sav
15440 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34  epoint P1 * * P4
15450 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72   *.**.** Open, r
15460 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61  elease or rollba
15470 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  ck the savepoint
15480 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65   named by parame
15490 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e  ter P4, dependin
154a0 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75  g.** on the valu
154b0 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e  e of P1. To open
154c0 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   a new savepoint
154d0 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65  , P1==0. To rele
154e0 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a  ase (commit) an.
154f0 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  ** existing save
15500 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72  point, P1==1, or
15510 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20   to rollback an 
15520 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69  existing savepoi
15530 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73  nt P1==2..*/.cas
15540 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20  e OP_Savepoint: 
15550 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  {.  int p1;     
15560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15570 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20      /* Value of 
15580 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  P1 operand */.  
15590 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
155a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155b0 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70  /* Name of savep
155c0 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e  oint */.  int nN
155d0 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  ame;.  Savepoint
155e0 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f   *pNew;.  Savepo
155f0 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
15600 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54  .  Savepoint *pT
15610 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70  mp;.  int iSavep
15620 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a  oint;.  int ii;.
15630 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
15640 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e  .  zName = pOp->
15650 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65  p4.z;..  /* Asse
15660 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70  rt that the p1 p
15670 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69  arameter is vali
15680 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20  d. Also that if 
15690 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e  there is no open
156a0 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  .  ** transactio
156b0 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61  n, then there ca
156c0 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65  nnot be any save
156d0 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20  points. .  */.  
156e0 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76  assert( db->pSav
156f0 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d  epoint==0 || db-
15700 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  >autoCommit==0 )
15710 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d  ;.  assert( p1==
15720 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c  SAVEPOINT_BEGIN|
15730 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52  |p1==SAVEPOINT_R
15740 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45  ELEASE||p1==SAVE
15750 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29  POINT_ROLLBACK )
15760 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
15770 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62  pSavepoint || db
15780 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
15790 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20  avepoint==0 );. 
157a0 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61   assert( checkSa
157b0 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29  vepointCount(db)
157c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
157d0 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20  >bIsReader );.. 
157e0 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
157f0 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20  NT_BEGIN ){.    
15800 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69  if( db->nVdbeWri
15810 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  te>0 ){.      /*
15820 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   A new savepoint
15830 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74   cannot be creat
15840 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ed if there are 
15850 61 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20  active write .  
15860 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74      ** statement
15870 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61  s (i.e. open rea
15880 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e  d/write incremen
15890 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73  tal blob handles
158a0 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  )..      */.    
158b0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
158c0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
158d0 64 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e  db, "cannot open
158e0 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20   savepoint - ". 
158f0 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
15900 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
15910 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ss");.      rc =
15920 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
15930 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e    }else{.      n
15940 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74  Name = sqlite3St
15950 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a  rlen30(zName);..
15960 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
15970 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
15980 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63  .      /* This c
15990 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20 69  all is Ok even i
159a0 66 20 74 68 69 73 20 73 61 76 65 70 6f 69 6e 74  f this savepoint
159b0 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 74   is actually a t
159c0 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20 20  ransaction.     
159d0 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20 28 61   ** savepoint (a
159e0 6e 64 20 74 68 65 72 65 66 6f 72 65 20 73 68 6f  nd therefore sho
159f0 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78  uld not prompt x
15a00 53 61 76 65 70 6f 69 6e 74 28 29 29 20 63 61 6c  Savepoint()) cal
15a10 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a  lbacks..      **
15a20 20 49 66 20 74 68 69 73 20 69 73 20 61 20 74 72   If this is a tr
15a30 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
15a40 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  int being opened
15a50 2c 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65  , it is guarante
15a60 65 64 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74  ed.      ** that
15a70 20 74 68 65 20 64 62 2d 3e 61 56 54 72 61 6e 73   the db->aVTrans
15a80 5b 5d 20 61 72 72 61 79 20 69 73 20 65 6d 70 74  [] array is empt
15a90 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  y.  */.      ass
15aa0 65 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d  ert( db->autoCom
15ab0 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56  mit==0 || db->nV
15ac0 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20  Trans==0 );.    
15ad0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
15ae0 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
15af0 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c  SAVEPOINT_BEGIN,
15b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b   db->nStatement+
15b30 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b  db->nSavepoint);
15b40 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
15b50 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
15b60 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
15b70 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  or;.#endif..    
15b80 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65    /* Create a ne
15b90 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75  w savepoint stru
15ba0 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20  cture. */.      
15bb0 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62  pNew = sqlite3Db
15bc0 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69  MallocRaw(db, si
15bd0 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b  zeof(Savepoint)+
15be0 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20  nName+1);.      
15bf0 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20  if( pNew ){.    
15c00 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20      pNew->zName 
15c10 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b  = (char *)&pNew[
15c20 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63  1];.        memc
15c30 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20  py(pNew->zName, 
15c40 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b  zName, nName+1);
15c50 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a  .    .        /*
15c60 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
15c70 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
15c80 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73  , then mark this
15c90 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20   as a special.  
15ca0 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61        ** "transa
15cb0 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22  ction savepoint"
15cc0 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
15cd0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
15ce0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  ){.          db-
15cf0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b  >autoCommit = 0;
15d00 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69  .          db->i
15d10 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
15d20 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20  point = 1;.     
15d30 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
15d40 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
15d50 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt++;.        }.
15d60 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20      .        /* 
15d70 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76  Link the new sav
15d80 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20  epoint into the 
15d90 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27  database handle'
15da0 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20  s list. */.     
15db0 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d     pNew->pNext =
15dc0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
15dd0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
15de0 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a  vepoint = pNew;.
15df0 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44          pNew->nD
15e00 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62  eferredCons = db
15e10 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
15e20 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e  .        pNew->n
15e30 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
15e40 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  = db->nDeferredI
15e50 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a  mmCons;.      }.
15e60 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
15e70 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20     iSavepoint = 
15e80 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20  0;..    /* Find 
15e90 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f  the named savepo
15ea0 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69 73  int. If there is
15eb0 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69   no such savepoi
15ec0 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20  nt, then an.    
15ed0 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72  ** an error is r
15ee0 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75  eturned to the u
15ef0 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72  ser.  */.    for
15f00 28 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69  (.      pSavepoi
15f10 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f  nt = db->pSavepo
15f20 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76  int; .      pSav
15f30 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65  epoint && sqlite
15f40 33 53 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f  3StrICmp(pSavepo
15f50 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d  int->zName, zNam
15f60 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70  e);.      pSavep
15f70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e  oint = pSavepoin
15f80 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a  t->pNext.    ){.
15f90 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74        iSavepoint
15fa0 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
15fb0 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b  ( !pSavepoint ){
15fc0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
15fd0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
15fe0 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73 75 63  Msg, db, "no suc
15ff0 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22  h savepoint: %s"
16000 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  , zName);.      
16010 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
16020 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  R;.    }else if(
16030 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e   db->nVdbeWrite>
16040 30 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49  0 && p1==SAVEPOI
16050 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
16060 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74      /* It is not
16070 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c   possible to rel
16080 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20  ease (commit) a 
16090 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65  savepoint if the
160a0 72 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a  re are .      **
160b0 20 61 63 74 69 76 65 20 77 72 69 74 65 20 73 74   active write st
160c0 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20  atements..      
160d0 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
160e0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
160f0 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20  rrMsg, db, .    
16100 20 20 20 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65      "cannot rele
16110 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20  ase savepoint - 
16120 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
16130 6e 20 70 72 6f 67 72 65 73 73 22 0a 20 20 20 20  n progress".    
16140 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20    );.      rc = 
16150 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
16160 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f   }else{..      /
16170 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
16180 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20  her or not this 
16190 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  is a transaction
161a0 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 73   savepoint. If s
161b0 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20  o,.      ** and 
161c0 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53  this is a RELEAS
161d0 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20  E command, then 
161e0 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
161f0 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a  saction .      *
16200 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20  * is committed. 
16210 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
16220 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69 6f  int isTransactio
16230 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  n = pSavepoint->
16240 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e  pNext==0 && db->
16250 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
16260 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69 66  epoint;.      if
16270 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20  ( isTransaction 
16280 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  && p1==SAVEPOINT
16290 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
162a0 20 20 20 20 69 66 28 20 28 72 63 20 3d 20 73 71      if( (rc = sq
162b0 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
162c0 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f  (p, 1))!=SQLITE_
162d0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
162e0 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
162f0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
16300 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
16310 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  it = 1;.        
16320 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48  if( sqlite3VdbeH
16330 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42  alt(p)==SQLITE_B
16340 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 20  USY ){.         
16350 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20   p->pc = pc;.   
16360 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
16370 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
16380 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
16390 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
163a0 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64           goto vd
163b0 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
163c0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
163d0 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
163e0 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20  vepoint = 0;.   
163f0 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b       rc = p->rc;
16400 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
16410 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74        iSavepoint
16420 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e   = db->nSavepoin
16430 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d  t - iSavepoint -
16440 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   1;.        if( 
16450 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
16460 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20  LLBACK ){.      
16470 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
16480 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
16490 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
164a0 69 74 65 33 42 74 72 65 65 54 72 69 70 41 6c 6c  ite3BtreeTripAll
164b0 43 75 72 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b  Cursors(db->aDb[
164c0 69 69 5d 2e 70 42 74 2c 20 53 51 4c 49 54 45 5f  ii].pBt, SQLITE_
164d0 41 42 4f 52 54 29 3b 0a 20 20 20 20 20 20 20 20  ABORT);.        
164e0 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
164f0 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20        for(ii=0; 
16500 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b  ii<db->nDb; ii++
16510 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
16520 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 61  = sqlite3BtreeSa
16530 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b  vepoint(db->aDb[
16540 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61  ii].pBt, p1, iSa
16550 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
16560 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
16570 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
16580 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
16590 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
165a0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
165b0 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
165c0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
165d0 4c 4c 42 41 43 4b 20 26 26 20 28 64 62 2d 3e 66  LLBACK && (db->f
165e0 6c 61 67 73 26 53 51 4c 49 54 45 5f 49 6e 74 65  lags&SQLITE_Inte
165f0 72 6e 43 68 61 6e 67 65 73 29 21 3d 30 20 29 7b  rnChanges)!=0 ){
16600 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
16610 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
16620 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
16630 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
16640 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
16650 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29  OfConnection(db)
16660 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
16670 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61  flags = (db->fla
16680 67 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65  gs | SQLITE_Inte
16690 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20 20 20  rnChanges);.    
166a0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
166b0 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64  .      /* Regard
166c0 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
166d0 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53  this is a RELEAS
166e0 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64  E or ROLLBACK, d
166f0 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20  estroy all .    
16700 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20    ** savepoints 
16710 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66  nested inside of
16720 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62   the savepoint b
16730 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
16740 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65  . */.      while
16750 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
16760 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a  !=pSavepoint ){.
16770 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64          pTmp = d
16780 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  b->pSavepoint;. 
16790 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
167a0 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e  point = pTmp->pN
167b0 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ext;.        sql
167c0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
167d0 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62  Tmp);.        db
167e0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
167f0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
16800 2a 20 49 66 20 69 74 20 69 73 20 61 20 52 45 4c  * If it is a REL
16810 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72  EASE, then destr
16820 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  oy the savepoint
16830 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
16840 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f  on .      ** too
16850 2e 20 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c  . If it is a ROL
16860 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73  LBACK TO, then s
16870 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  et the number of
16880 20 64 65 66 65 72 72 65 64 20 0a 20 20 20 20 20   deferred .     
16890 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76   ** constraint v
168a0 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e  iolations presen
168b0 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
168c0 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73  e to the value s
168d0 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77  tored.      ** w
168e0 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e  hen the savepoin
168f0 74 20 77 61 73 20 63 72 65 61 74 65 64 2e 20 20  t was created.  
16900 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d  */.      if( p1=
16910 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
16920 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  SE ){.        as
16930 73 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74  sert( pSavepoint
16940 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ==db->pSavepoint
16950 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   );.        db->
16960 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61  pSavepoint = pSa
16970 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a  vepoint->pNext;.
16980 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44          sqlite3D
16990 62 46 72 65 65 28 64 62 2c 20 70 53 61 76 65 70  bFree(db, pSavep
169a0 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69  oint);.        i
169b0 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f  f( !isTransactio
169c0 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64  n ){.          d
169d0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b  b->nSavepoint--;
169e0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
169f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
16a00 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
16a10 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  s = pSavepoint->
16a20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20  nDeferredCons;. 
16a30 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65         db->nDefe
16a40 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53  rredImmCons = pS
16a50 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72  avepoint->nDefer
16a60 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20  redImmCons;.    
16a70 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21    }..      if( !
16a80 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b  isTransaction ){
16a90 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
16aa0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
16ab0 6e 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65  nt(db, p1, iSave
16ac0 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
16ad0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
16ae0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
16af0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
16b00 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a     }.    }.  }..
16b10 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
16b20 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69  pcode: AutoCommi
16b30 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
16b40 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61  .** Set the data
16b50 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74  base auto-commit
16b60 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f   flag to P1 (1 o
16b70 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74  r 0). If P2 is t
16b80 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63  rue, roll.** bac
16b90 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20  k any currently 
16ba0 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61  active btree tra
16bb0 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68  nsactions. If th
16bc0 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69  ere are any acti
16bd0 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74  ve.** VMs (apart
16be0 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c   from this one),
16bf0 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b   then a ROLLBACK
16c00 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49   fails.  A COMMI
16c10 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68  T fails if.** th
16c20 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77  ere are active w
16c30 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63  riting VMs or ac
16c40 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73  tive VMs that us
16c50 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a  e shared cache..
16c60 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
16c70 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  uction causes th
16c80 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f  e VM to halt..*/
16c90 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d  .case OP_AutoCom
16ca0 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73  mit: {.  int des
16cb0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
16cc0 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b    int iRollback;
16cd0 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b  .  int turnOnAC;
16ce0 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43  ..  desiredAutoC
16cf0 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b  ommit = pOp->p1;
16d00 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70  .  iRollback = p
16d10 4f 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e  Op->p2;.  turnOn
16d20 41 43 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f  AC = desiredAuto
16d30 43 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61  Commit && !db->a
16d40 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73  utoCommit;.  ass
16d50 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
16d60 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73  Commit==1 || des
16d70 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
16d80 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
16d90 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
16da0 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b  ==1 || iRollback
16db0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
16dc0 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65   db->nVdbeActive
16dd0 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61  >0 );  /* At lea
16de0 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69  st this one VM i
16df0 73 20 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73  s active */.  as
16e00 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
16e10 65 72 20 29 3b 0a 0a 23 69 66 20 30 0a 20 20 69  er );..#if 0.  i
16e20 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 69  f( turnOnAC && i
16e30 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e  Rollback && db->
16e40 6e 56 64 62 65 41 63 74 69 76 65 3e 31 20 29 7b  nVdbeActive>1 ){
16e50 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20  .    /* If this 
16e60 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c  instruction impl
16e70 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43  ements a ROLLBAC
16e80 4b 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20  K and other VMs 
16e90 61 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c  are.    ** still
16ea0 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20   running, and a 
16eb0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
16ec0 63 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e  ctive, return an
16ed0 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e   error indicatin
16ee0 67 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68  g.    ** that th
16ef0 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74  e other VMs must
16f00 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e   complete first.
16f10 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c   .    */.    sql
16f20 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
16f30 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
16f40 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  cannot rollback 
16f50 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a  transaction - ".
16f60 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
16f70 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
16f80 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20  ess");.    rc = 
16f90 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d  SQLITE_BUSY;.  }
16fa0 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 69 66  else.#endif.  if
16fb0 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 21 69  ( turnOnAC && !i
16fc0 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e  Rollback && db->
16fd0 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a  nVdbeWrite>0 ){.
16fe0 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
16ff0 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65  nstruction imple
17000 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61  ments a COMMIT a
17010 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65  nd other VMs are
17020 20 77 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20   writing.    ** 
17030 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
17040 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
17050 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75  the other VMs mu
17060 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73  st complete firs
17070 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  t. .    */.    s
17080 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
17090 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
170a0 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20   "cannot commit 
170b0 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a  transaction - ".
170c0 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
170d0 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
170e0 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20  ess");.    rc = 
170f0 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d  SQLITE_BUSY;.  }
17100 65 6c 73 65 20 69 66 28 20 64 65 73 69 72 65 64  else if( desired
17110 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e  AutoCommit!=db->
17120 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
17130 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20    if( iRollback 
17140 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
17150 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
17160 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73  it==1 );.      s
17170 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
17180 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f  l(db, SQLITE_ABO
17190 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20  RT_ROLLBACK);.  
171a0 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
171b0 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  it = 1;.    }els
171c0 65 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69  e if( (rc = sqli
171d0 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
171e0 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b  , 1))!=SQLITE_OK
171f0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76   ){.      goto v
17200 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
17210 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
17220 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
17230 38 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  8)desiredAutoCom
17240 6d 69 74 3b 0a 20 20 20 20 20 20 69 66 28 20 73  mit;.      if( s
17250 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
17260 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  )==SQLITE_BUSY )
17270 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20  {.        p->pc 
17280 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20 64 62  = pc;.        db
17290 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28  ->autoCommit = (
172a0 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74  u8)(1-desiredAut
172b0 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20  oCommit);.      
172c0 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
172d0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
172e0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
172f0 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20  turn;.      }.  
17300 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
17310 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d  db->nStatement==
17320 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
17330 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28  CloseSavepoints(
17340 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  db);.    if( p->
17350 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
17360 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
17370 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c  TE_DONE;.    }el
17380 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  se{.      rc = S
17390 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
173a0 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65   }.    goto vdbe
173b0 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65  _return;.  }else
173c0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
173d0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
173e0 73 67 2c 20 64 62 2c 0a 20 20 20 20 20 20 20 20  sg, db,.        
173f0 28 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  (!desiredAutoCom
17400 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61  mit)?"cannot sta
17410 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  rt a transaction
17420 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
17430 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20  ction":(.       
17440 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61   (iRollback)?"ca
17450 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20  nnot rollback - 
17460 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
17470 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20  s active":.     
17480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
17490 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e  annot commit - n
174a0 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
174b0 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20   active"));.    
174c0 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53       .    rc = S
174d0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
174e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
174f0 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74  Opcode: Transact
17500 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  ion P1 P2 P3 P4 
17510 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61  P5.**.** Begin a
17520 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
17530 64 61 74 61 62 61 73 65 20 50 31 20 69 66 20 61  database P1 if a
17540 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
17550 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61  not already.** a
17560 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20  ctive..** If P2 
17570 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
17580 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  n a write-transa
17590 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
175a0 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72 65  , or if a .** re
175b0 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  ad-transaction i
175c0 73 20 61 6c 72 65 61 64 79 20 61 63 74 69 76 65  s already active
175d0 2c 20 69 74 20 69 73 20 75 70 67 72 61 64 65 64  , it is upgraded
175e0 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61 6e   to a write-tran
175f0 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50  saction..** If P
17600 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  2 is zero, then 
17610 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69  a read-transacti
17620 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a 2a  on is started..*
17630 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
17640 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
17650 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69  base file on whi
17660 63 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ch the transacti
17670 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64  on is.** started
17680 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68  .  Index 0 is th
17690 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
176a0 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31  file and index 1
176b0 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20   is the.** file 
176c0 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61  used for tempora
176d0 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69  ry tables.  Indi
176e0 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65  ces of 2 or more
176f0 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a   are used for.**
17700 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
17710 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20  ses..**.** If a 
17720 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
17730 6e 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64  n is started and
17740 20 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74   the Vdbe.usesSt
17750 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69  mtJournal flag i
17760 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20  s.** true (this 
17770 66 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74  flag is set if t
17780 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69  he Vdbe may modi
17790 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  fy more than one
177a0 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20   row and may.** 
177b0 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
177c0 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61  xception), a sta
177d0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
177e0 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f  on may also be o
177f0 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73  pened..** More s
17800 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73  pecifically, a s
17810 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
17820 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69  tion is opened i
17830 66 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  ff the database.
17840 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  ** connection is
17850 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69   currently not i
17860 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64  n autocommit mod
17870 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61  e, or if there a
17880 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69  re other.** acti
17890 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41  ve statements. A
178a0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
178b0 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68  action allows th
178c0 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62  e changes made b
178d0 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74  y this.** VDBE t
178e0 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
178f0 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
17900 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74  without having t
17910 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a  o roll back the.
17920 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61  ** entire transa
17930 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72  ction. If no err
17940 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
17950 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  d, the statement
17960 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
17970 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c  will automatical
17980 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74  ly commit when t
17990 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a  he VDBE halts..*
179a0 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68  *.** If P5!=0 th
179b0 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61  en this opcode a
179c0 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20 73  lso checks the s
179d0 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61  chema cookie aga
179e0 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74  inst P3.** and t
179f0 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61  he schema genera
17a00 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67 61  tion counter aga
17a10 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20  inst P4..** The 
17a20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69  cookie changes i
17a30 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65  ts value wheneve
17a40 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
17a50 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a  chema changes..*
17a60 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
17a70 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
17a80 63 74 20 77 68 65 6e 20 74 68 61 74 20 74 68 65  ct when that the
17a90 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e   cookie has chan
17aa0 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20  ged.** and that 
17ab0 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
17ac0 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72  ess needs to rer
17ad0 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20  ead the schema. 
17ae0 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a 2a   If the schema.*
17af0 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64  * cookie in P3 d
17b00 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20  iffers from the 
17b10 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e  schema cookie in
17b20 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
17b30 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68  ader or.** if th
17b40 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74  e schema generat
17b50 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20 50  ion counter in P
17b60 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74  4 differs from t
17b70 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65  he current.** ge
17b80 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
17b90 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54 45  , then an SQLITE
17ba0 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69 73  _SCHEMA error is
17bb0 20 72 61 69 73 65 64 20 61 6e 64 20 65 78 65 63   raised and exec
17bc0 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20  ution.** halts. 
17bd0 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65   The sqlite3_ste
17be0 70 28 29 20 77 72 61 70 70 65 72 20 66 75 6e 63  p() wrapper func
17bf0 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e 20  tion might then 
17c00 72 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a 2a  reprepare the.**
17c10 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72   statement and r
17c20 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68 65  erun it from the
17c30 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63   beginning..*/.c
17c40 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69  ase OP_Transacti
17c50 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70  on: {.  Btree *p
17c60 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b  Bt;.  int iMeta;
17c70 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20  .  int iGen;..  
17c80 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
17c90 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74  ader );.  assert
17ca0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
17cb0 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29   || pOp->p2==0 )
17cc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
17cd0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
17ce0 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
17cf0 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
17d00 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73  Mask & (((yDbMas
17d10 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21  k)1)<<pOp->p1))!
17d20 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  =0 );.  if( pOp-
17d30 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c 61 67  >p2 && (db->flag
17d40 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65 72 79  s & SQLITE_Query
17d50 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20 20  Only)!=0 ){.    
17d60 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45 41 44  rc = SQLITE_READ
17d70 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20 61  ONLY;.    goto a
17d80 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
17d90 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20 64  r;.  }.  pBt = d
17da0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
17db0 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20  pBt;..  if( pBt 
17dc0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
17dd0 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
17de0 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29  ns(pBt, pOp->p2)
17df0 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
17e00 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
17e10 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20     p->pc = pc;. 
17e20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
17e30 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17e40 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
17e50 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20  eturn;.    }.   
17e60 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
17e70 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
17e80 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
17e90 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ror;.    }..    
17ea0 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70  if( pOp->p2 && p
17eb0 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  ->usesStmtJourna
17ec0 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e  l .     && (db->
17ed0 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c  autoCommit==0 ||
17ee0 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31   db->nVdbeRead>1
17ef0 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  ) .    ){.      
17f00 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
17f10 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
17f20 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  t) );.      if( 
17f30 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
17f40 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
17f50 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
17f60 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61  nt>=0 && db->nSa
17f70 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20  vepoint>=0 );.  
17f80 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65        db->nState
17f90 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20  ment++; .       
17fa0 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d   p->iStatement =
17fb0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20   db->nSavepoint 
17fc0 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  + db->nStatement
17fd0 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
17fe0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
17ff0 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53  bSavepoint(db, S
18000 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20  AVEPOINT_BEGIN, 
18010 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29  p->iStatement-1)
18020 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
18030 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
18040 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
18050 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28  3BtreeBeginStmt(
18060 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  pBt, p->iStateme
18070 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  nt);.      }..  
18080 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65      /* Store the
18090 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f   current value o
180a0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  f the database h
180b0 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20  andles deferred 
180c0 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20  constraint.     
180d0 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20   ** counter. If 
180e0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  the statement tr
180f0 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20  ansaction needs 
18100 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
18110 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  k,.      ** the 
18120 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
18130 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62  unter needs to b
18140 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20  e restored too. 
18150 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74   */.      p->nSt
18160 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e  mtDefCons = db->
18170 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20  nDeferredCons;. 
18180 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66       p->nStmtDef
18190 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  ImmCons = db->nD
181a0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
181b0 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 47 61      }..    /* Ga
181c0 74 68 65 72 20 74 68 65 20 73 63 68 65 6d 61 20  ther the schema 
181d0 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
181e0 6f 72 20 63 68 65 63 6b 69 6e 67 20 2a 2f 0a 20  or checking */. 
181f0 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47     sqlite3BtreeG
18200 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45  etMeta(pBt, BTRE
18210 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  E_SCHEMA_VERSION
18220 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
18230 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d  ;.    iGen = db-
18240 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53  >aDb[pOp->p1].pS
18250 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69  chema->iGenerati
18260 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  on;.  }else{.   
18270 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20   iGen = iMeta = 
18280 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  0;.  }.  assert(
18290 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
182a0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
182b0 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20 70 4f  NT32 );.  if( pO
182c0 70 2d 3e 70 35 20 26 26 20 28 69 4d 65 74 61 21  p->p5 && (iMeta!
182d0 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e  =pOp->p3 || iGen
182e0 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a  !=pOp->p4.i) ){.
182f0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
18300 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
18310 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73  );.    p->zErrMs
18320 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72  g = sqlite3DbStr
18330 44 75 70 28 64 62 2c 20 22 64 61 74 61 62 61 73  Dup(db, "databas
18340 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61  e schema has cha
18350 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49  nged");.    /* I
18360 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f  f the schema-coo
18370 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74  kie from the dat
18380 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68  abase file match
18390 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20  es the cookie . 
183a0 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74     ** stored wit
183b0 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  h the in-memory 
183c0 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
183d0 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f  f the schema, do
183e0 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f  .    ** not relo
183f0 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72  ad the schema fr
18400 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
18410 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  file..    **.   
18420 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74   ** If virtual-t
18430 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65  ables are in use
18440 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75  , this is not ju
18450 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  st an optimizati
18460 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e  on..    ** Often
18470 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65  , v-tables store
18480 20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f   their data in o
18490 74 68 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c  ther SQLite tabl
184a0 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a  es, which.    **
184b0 20 61 72 65 20 71 75 65 72 69 65 64 20 66 72 6f   are queried fro
184c0 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29  m within xNext()
184d0 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62   and other v-tab
184e0 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67  le methods using
184f0 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64  .    ** prepared
18500 20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75 63   queries. If suc
18510 68 20 61 20 71 75 65 72 79 20 69 73 20 6f 75 74  h a query is out
18520 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20  -of-date, we do 
18530 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20  not want to.    
18540 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65 20 64  ** discard the d
18550 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20  atabase schema, 
18560 61 73 20 74 68 65 20 75 73 65 72 20 63 6f 64 65  as the user code
18570 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68   implementing th
18580 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65  e.    ** v-table
18590 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62   would have to b
185a0 65 20 72 65 61 64 79 20 66 6f 72 20 74 68 65 20  e ready for the 
185b0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
185c0 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20  ucture itself.  
185d0 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c    ** to be inval
185e0 69 64 61 74 65 64 20 77 68 65 6e 65 76 65 72 20  idated whenever 
185f0 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69  sqlite3_step() i
18600 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  s called from wi
18610 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76  thin .    ** a v
18620 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20  -table method.. 
18630 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62     */.    if( db
18640 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
18650 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
18660 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a  ookie!=iMeta ){.
18670 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
18680 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20  etOneSchema(db, 
18690 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a  pOp->p1);.    }.
186a0 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
186b0 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   1;.    rc = SQL
186c0 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a  ITE_SCHEMA;.  }.
186d0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
186e0 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69  pcode: ReadCooki
186f0 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
18700 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65  *.** Read cookie
18710 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20   number P3 from 
18720 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
18730 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65  write it into re
18740 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33  gister P2..** P3
18750 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d  ==1 is the schem
18760 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d  a version.  P3==
18770 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  2 is the databas
18780 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d  e format..** P3=
18790 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
187a0 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
187b0 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66  e size, and so f
187c0 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a  orth.  P1==0 is.
187d0 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
187e0 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31  base file and P1
187f0 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62  ==1 is the datab
18800 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
18810 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72   store.** tempor
18820 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ary tables..**.*
18830 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20  * There must be 
18840 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74  a read-lock on t
18850 68 65 20 64 61 74 61 62 61 73 65 20 28 65 69 74  he database (eit
18860 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f  her a transactio
18870 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61  n.** must be sta
18880 72 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75  rted or there mu
18890 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75  st be an open cu
188a0 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20  rsor) before.** 
188b0 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 69  executing this i
188c0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
188d0 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69  ase OP_ReadCooki
188e0 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
188f0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
18900 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69  lease */.  int i
18910 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b  Meta;.  int iDb;
18920 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a  .  int iCookie;.
18930 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
18940 73 52 65 61 64 65 72 20 29 3b 0a 20 20 69 44 62  sReader );.  iDb
18950 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43   = pOp->p1;.  iC
18960 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b  ookie = pOp->p3;
18970 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
18980 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45  p3<SQLITE_N_BTRE
18990 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65  E_META );.  asse
189a0 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
189b0 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
189c0 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69  ssert( db->aDb[i
189d0 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db].pBt!=0 );.  
189e0 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
189f0 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
18a00 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20  sk)1)<<iDb))!=0 
18a10 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72  );..  sqlite3Btr
18a20 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44  eeGetMeta(db->aD
18a30 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f  b[iDb].pBt, iCoo
18a40 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65  kie, (u32 *)&iMe
18a50 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ta);.  pOut->u.i
18a60 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61   = iMeta;.  brea
18a70 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
18a80 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32   SetCookie P1 P2
18a90 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72   P3 * *.**.** Wr
18aa0 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ite the content 
18ab0 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 28  of register P3 (
18ac0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
18ad0 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e  n integer).** in
18ae0 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  to cookie number
18af0 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20   P2 of database 
18b00 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68  P1.  P2==1 is th
18b10 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
18b20 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20  .  .** P2==2 is 
18b30 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  the database for
18b40 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68  mat. P2==3 is th
18b50 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
18b60 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69  ger cache .** si
18b70 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
18b80 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20  .  P1==0 is the 
18b90 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
18ba0 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
18bb0 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  the .** database
18bc0 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
18bd0 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ore temporary ta
18be0 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72  bles..**.** A tr
18bf0 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
18c00 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
18c10 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
18c20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
18c30 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20  OP_SetCookie: { 
18c40 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
18c50 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73    Db *pDb;.  ass
18c60 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c  ert( pOp->p2<SQL
18c70 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
18c80 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
18c90 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
18ca0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
18cb0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
18cc0 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
18cd0 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29  ask)1)<<pOp->p1)
18ce0 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
18cf0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
18d00 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
18d10 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  >aDb[pOp->p1];. 
18d20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42   assert( pDb->pB
18d30 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t!=0 );.  assert
18d40 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
18d50 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70  utexHeld(db, pOp
18d60 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 70 49  ->p1, 0) );.  pI
18d70 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
18d80 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p3];.  sqlite3Vd
18d90 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
18da0 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20  pIn3);.  /* See 
18db0 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78  note about index
18dc0 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f   shifting on OP_
18dd0 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20  ReadCookie */.  
18de0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
18df0 65 55 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d  eUpdateMeta(pDb-
18e00 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28  >pBt, pOp->p2, (
18e10 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  int)pIn3->u.i);.
18e20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42    if( pOp->p2==B
18e30 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53  TREE_SCHEMA_VERS
18e40 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68  ION ){.    /* Wh
18e50 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  en the schema co
18e60 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65  okie changes, re
18e70 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f  cord the new coo
18e80 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a  kie internally *
18e90 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
18ea0 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
18eb0 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75  e = (int)pIn3->u
18ec0 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67  .i;.    db->flag
18ed0 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65  s |= SQLITE_Inte
18ee0 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c  rnChanges;.  }el
18ef0 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  se if( pOp->p2==
18f00 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41  BTREE_FILE_FORMA
18f10 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f  T ){.    /* Reco
18f20 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68  rd changes in th
18f30 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f  e file format */
18f40 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
18f50 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  a->file_format =
18f60 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a   (u8)pIn3->u.i;.
18f70 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
18f80 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49  1==1 ){.    /* I
18f90 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72  nvalidate all pr
18fa0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
18fb0 73 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 54  s whenever the T
18fc0 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20 20  EMP database.   
18fd0 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68   ** schema is ch
18fe0 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23  anged.  Ticket #
18ff0 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69  1644 */.    sqli
19000 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
19010 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
19020 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
19030 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 0;.  }.  break
19040 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
19050 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20 50  OpenRead P1 P2 P
19060 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
19070 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
19080 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P3.**.** Open a
19090 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f   read-only curso
190a0 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61  r for the databa
190b0 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72  se table whose r
190c0 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50  oot page is.** P
190d0 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  2 in a database 
190e0 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62  file.  The datab
190f0 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74 65  ase file is dete
19100 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a  rmined by P3. .*
19110 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68  * P3==0 means th
19120 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
19130 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65   P3==1 means the
19140 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66   database used f
19150 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79  or .** temporary
19160 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e   tables, and P3>
19170 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65  1 means used the
19180 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61   corresponding a
19190 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62  ttached.** datab
191a0 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e  ase.  Give the n
191b0 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65  ew cursor an ide
191c0 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20  ntifier of P1.  
191d0 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73  The P1.** values
191e0 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e   need not be con
191f0 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20  tiguous but all 
19200 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64  P1 values should
19210 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65   be small intege
19220 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20  rs..** It is an 
19230 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20  error for P1 to 
19240 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a  be negative..**.
19250 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e  ** If P5!=0 then
19260 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74   use the content
19270 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20   of register P2 
19280 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  as the root page
19290 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c  , not.** the val
192a0 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e  ue of P2 itself.
192b0 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c  .**.** There wil
192c0 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b  l be a read lock
192d0 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
192e0 20 77 68 65 6e 65 76 65 72 20 74 68 65 72 65 20   whenever there 
192f0 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75  is an.** open cu
19300 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61  rsor.  If the da
19310 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63  tabase was unloc
19320 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69  ked prior to thi
19330 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  s instruction.**
19340 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63   then a read loc
19350 6b 20 69 73 20 61 63 71 75 69 72 65 64 20 61 73  k is acquired as
19360 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e   part of this in
19370 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65  struction.  A re
19380 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77  ad.** lock allow
19390 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65  s other processe
193a0 73 20 74 6f 20 72 65 61 64 20 74 68 65 20 64 61  s to read the da
193b0 74 61 62 61 73 65 20 62 75 74 20 70 72 6f 68 69  tabase but prohi
193c0 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65  bits.** any othe
193d0 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d  r process from m
193e0 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64 61 74  odifying the dat
193f0 61 62 61 73 65 2e 20 20 54 68 65 20 72 65 61 64  abase.  The read
19400 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65   lock is.** rele
19410 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75  ased when all cu
19420 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64  rsors are closed
19430 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  .  If this instr
19440 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a  uction attempts.
19450 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61 64  ** to get a read
19460 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c   lock but fails,
19470 20 74 68 65 20 73 63 72 69 70 74 20 74 65 72 6d   the script term
19480 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a  inates with an.*
19490 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72  * SQLITE_BUSY er
194a0 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  ror code..**.** 
194b0 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79  The P4 value may
194c0 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e   be either an in
194d0 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29  teger (P4_INT32)
194e0 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   or a pointer to
194f0 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74  .** a KeyInfo st
19500 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49  ructure (P4_KEYI
19510 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61  NFO). If it is a
19520 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65   pointer to a Ke
19530 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74  yInfo .** struct
19540 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73  ure, then said s
19550 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73  tructure defines
19560 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64   the content and
19570 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73   collating .** s
19580 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69  equence of the i
19590 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65  ndex being opene
195a0 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  d. Otherwise, if
195b0 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P4 is an intege
195c0 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20  r .** value, it 
195d0 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
195e0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
195f0 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a  in the table..**
19600 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65  .** See also Ope
19610 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70  nWrite..*/./* Op
19620 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20  code: OpenWrite 
19630 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
19640 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
19650 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
19660 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69   Open a read/wri
19670 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20  te cursor named 
19680 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20  P1 on the table 
19690 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
196a0 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50  oot.** page is P
196b0 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20  2.  Or if P5!=0 
196c0 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  use the content 
196d0 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74  of register P2 t
196e0 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f  o find the.** ro
196f0 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54  ot page..**.** T
19700 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20  he P4 value may 
19710 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  be either an int
19720 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20  eger (P4_INT32) 
19730 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a  or a pointer to.
19740 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  ** a KeyInfo str
19750 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e  ucture (P4_KEYIN
19760 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20  FO). If it is a 
19770 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
19780 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75  Info .** structu
19790 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74  re, then said st
197a0 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20  ructure defines 
197b0 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
197c0 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
197d0 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e  quence of the in
197e0 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
197f0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
19800 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P4 is an integer
19810 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69   .** value, it i
19820 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
19830 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
19840 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20  n the table, or 
19850 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73  to the.** larges
19860 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63  t index of any c
19870 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62  olumn of the tab
19880 6c 65 20 74 68 61 74 20 69 73 20 61 63 74 75 61  le that is actua
19890 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  lly used..**.** 
198a0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
198b0 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
198c0 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74   OpenRead except
198d0 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74   that it opens t
198e0 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20  he cursor.** in 
198f0 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e  read/write mode.
19900 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61    For a given ta
19910 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62  ble, there can b
19920 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65  e one or more re
19930 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f  ad-only.** curso
19940 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72  rs or a single r
19950 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
19960 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a   but not both..*
19970 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70  *.** See also Op
19980 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20  enRead..*/.case 
19990 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73  OP_OpenRead:.cas
199a0 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20  e OP_OpenWrite: 
199b0 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a  {.  int nField;.
199c0 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
199d0 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20  nfo;.  int p2;. 
199e0 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
199f0 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20  wrFlag;.  Btree 
19a00 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  *pX;.  VdbeCurso
19a10 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70  r *pCur;.  Db *p
19a20 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 28  Db;..  assert( (
19a30 70 4f 70 2d 3e 70 35 26 28 4f 50 46 4c 41 47 5f  pOp->p5&(OPFLAG_
19a40 50 32 49 53 52 45 47 7c 4f 50 46 4c 41 47 5f 42  P2ISREG|OPFLAG_B
19a50 55 4c 4b 43 53 52 29 29 3d 3d 70 4f 70 2d 3e 70  ULKCSR))==pOp->p
19a60 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  5 );.  assert( p
19a70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
19a80 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d  penWrite || pOp-
19a90 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p5==0 );.  asse
19aa0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
19ab0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
19ac0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
19ad0 65 6e 52 65 61 64 20 7c 7c 20 70 2d 3e 72 65 61  enRead || p->rea
19ae0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69  dOnly==0 );..  i
19af0 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b  f( p->expired ){
19b00 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
19b10 5f 41 42 4f 52 54 3b 0a 20 20 20 20 62 72 65 61  _ABORT;.    brea
19b20 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64  k;.  }..  nField
19b30 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f   = 0;.  pKeyInfo
19b40 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70   = 0;.  p2 = pOp
19b50 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f  ->p2;.  iDb = pO
19b60 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
19b70 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
19b80 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
19b90 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
19ba0 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
19bb0 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20  )<<iDb))!=0 );. 
19bc0 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
19bd0 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62  iDb];.  pX = pDb
19be0 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28  ->pBt;.  assert(
19bf0 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pX!=0 );.  if( 
19c00 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
19c10 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20  OpenWrite ){.   
19c20 20 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20   wrFlag = 1;.   
19c30 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
19c40 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
19c50 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20  db, iDb, 0) );. 
19c60 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68     if( pDb->pSch
19c70 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
19c80 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69   < p->minWriteFi
19c90 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20  leFormat ){.    
19ca0 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c    p->minWriteFil
19cb0 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70  eFormat = pDb->p
19cc0 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
19cd0 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  mat;.    }.  }el
19ce0 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d  se{.    wrFlag =
19cf0 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   0;.  }.  if( pO
19d00 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50  p->p5 & OPFLAG_P
19d10 32 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73  2ISREG ){.    as
19d20 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20  sert( p2>0 );.  
19d30 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70    assert( p2<=(p
19d40 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
19d50 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d  r) );.    pIn2 =
19d60 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20   &aMem[p2];.    
19d70 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
19d80 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20  id(pIn2) );.    
19d90 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
19da0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
19db0 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
19dc0 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
19dd0 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32  fy(pIn2);.    p2
19de0 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e   = (int)pIn2->u.
19df0 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32  i;.    /* The p2
19e00 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f   value always co
19e10 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72  mes from a prior
19e20 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20   OP_CreateTable 
19e30 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a  opcode and.    *
19e40 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69  * that opcode wi
19e50 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74 68  ll always set th
19e60 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20  e p2 value to 2 
19e70 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20  or more or else 
19e80 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20  fail..    ** If 
19e90 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61 69  there were a fai
19ea0 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61 72  lure, the prepar
19eb0 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75  ed statement wou
19ec0 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20  ld have halted. 
19ed0 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61     ** before rea
19ee0 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  ching this instr
19ef0 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69  uction. */.    i
19f00 66 28 20 4e 45 56 45 52 28 70 32 3c 32 29 20 29  f( NEVER(p2<2) )
19f10 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51   {.      rc = SQ
19f20 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
19f30 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  T;.      goto ab
19f40 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
19f50 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
19f60 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
19f70 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20  4_KEYINFO ){.   
19f80 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d   pKeyInfo = pOp-
19f90 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
19fa0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
19fb0 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29  fo->enc==ENC(db)
19fc0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
19fd0 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62  pKeyInfo->db==db
19fe0 20 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d   );.    nField =
19ff0 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c   pKeyInfo->nFiel
1a000 64 2b 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69  d+pKeyInfo->nXFi
1a010 65 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  eld;.  }else if(
1a020 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1a030 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46  _INT32 ){.    nF
1a040 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  ield = pOp->p4.i
1a050 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
1a060 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1a070 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d  assert( nField>=
1a080 30 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  0 );.  testcase(
1a090 20 6e 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f   nField==0 );  /
1a0a0 2a 20 54 61 62 6c 65 20 77 69 74 68 20 49 4e 54  * Table with INT
1a0b0 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
1a0c0 20 61 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73   and nothing els
1a0d0 65 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c  e */.  pCur = al
1a0e0 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1a0f0 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c  pOp->p1, nField,
1a100 20 69 44 62 2c 20 31 29 3b 0a 20 20 69 66 28 20   iDb, 1);.  if( 
1a110 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  pCur==0 ) goto n
1a120 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e  o_mem;.  pCur->n
1a130 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
1a140 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20  ur->isOrdered = 
1a150 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  1;.  rc = sqlite
1a160 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c  3BtreeCursor(pX,
1a170 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65   p2, wrFlag, pKe
1a180 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75  yInfo, pCur->pCu
1a190 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70  rsor);.  pCur->p
1a1a0 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e  KeyInfo = pKeyIn
1a1b0 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50  fo;.  assert( OP
1a1c0 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54  FLAG_BULKCSR==BT
1a1d0 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a  REE_BULKLOAD );.
1a1e0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
1a1f0 72 73 6f 72 48 69 6e 74 73 28 70 43 75 72 2d 3e  rsorHints(pCur->
1a200 70 43 75 72 73 6f 72 2c 20 28 70 4f 70 2d 3e 70  pCursor, (pOp->p
1a210 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  5 & OPFLAG_BULKC
1a220 53 52 29 29 3b 0a 0a 20 20 2f 2a 20 53 69 6e 63  SR));..  /* Sinc
1a230 65 20 69 74 20 70 65 72 66 6f 72 6d 73 20 6e 6f  e it performs no
1a240 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
1a250 6f 6e 20 6f 72 20 49 4f 2c 20 74 68 65 20 6f 6e  on or IO, the on
1a260 6c 79 20 76 61 6c 75 65 20 74 68 61 74 0a 20 20  ly value that.  
1a270 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  ** sqlite3BtreeC
1a280 75 72 73 6f 72 28 29 20 6d 61 79 20 72 65 74 75  ursor() may retu
1a290 72 6e 20 69 73 20 53 51 4c 49 54 45 5f 4f 4b 2e  rn is SQLITE_OK.
1a2a0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 72 63   */.  assert( rc
1a2b0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a  ==SQLITE_OK );..
1a2c0 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64 62    /* Set the Vdb
1a2d0 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65 20  eCursor.isTable 
1a2e0 76 61 72 69 61 62 6c 65 2e 20 50 72 65 76 69 6f  variable. Previo
1a2f0 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20  us versions of. 
1a300 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20   ** SQLite used 
1a310 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65 20  to check if the 
1a320 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20  root-page flags 
1a330 77 65 72 65 20 73 61 6e 65 20 61 74 20 74 68 69  were sane at thi
1a340 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64  s point.  ** and
1a350 20 72 65 70 6f 72 74 20 64 61 74 61 62 61 73 65   report database
1a360 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74   corruption if t
1a370 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75  hey were not, bu
1a380 74 20 74 68 69 73 20 63 68 65 63 6b 20 68 61 73  t this check has
1a390 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65  .  ** since move
1a3a0 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65  d into the btree
1a3b0 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20   layer.  */  .  
1a3c0 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20  pCur->isTable = 
1a3d0 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f  pOp->p4type!=P4_
1a3e0 4b 45 59 49 4e 46 4f 3b 0a 20 20 62 72 65 61 6b  KEYINFO;.  break
1a3f0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1a400 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31  OpenEphemeral P1
1a410 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53   P2 * P4 P5.** S
1a420 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e  ynopsis: nColumn
1a430 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P2.**.** Open a
1a440 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74   new cursor P1 t
1a450 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  o a transient ta
1a460 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
1a470 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65  or is always ope
1a480 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65  ned read/write e
1a490 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d  ven if .** the m
1a4a0 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
1a4b0 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20  read-only.  The 
1a4c0 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62  ephemeral.** tab
1a4d0 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75  le is deleted au
1a4e0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e  tomatically when
1a4f0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
1a500 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  losed..**.** P2 
1a510 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
1a520 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
1a530 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e  ephemeral table.
1a540 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70  .** The cursor p
1a550 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65  oints to a BTree
1a560 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20   table if P4==0 
1a570 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69  and to a BTree i
1a580 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73  ndex.** if P4 is
1a590 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69   not 0.  If P4 i
1a5a0 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70  s not NULL, it p
1a5b0 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e  oints to a KeyIn
1a5c0 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  fo structure.** 
1a5d0 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
1a5e0 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20   format of keys 
1a5f0 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a  in the index..**
1a600 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d  .** The P5 param
1a610 65 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61  eter can be a ma
1a620 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f  sk of the BTREE_
1a630 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a  * flags defined.
1a640 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20  ** in btree.h.  
1a650 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74  These flags cont
1a660 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74  rol aspects of t
1a670 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a  he operation of.
1a680 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20 54  ** the btree.  T
1a690 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f  he BTREE_OMIT_JO
1a6a0 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f  URNAL and BTREE_
1a6b0 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65  SINGLE flags are
1a6c0 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61  .** added automa
1a6d0 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f  tically..*/./* O
1a6e0 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69  pcode: OpenAutoi
1a6f0 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20  ndex P1 P2 * P4 
1a700 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e  *.** Synopsis: n
1a710 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20  Column=P2.**.** 
1a720 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
1a730 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50  s the same as OP
1a740 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20  _OpenEphemeral. 
1a750 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66   It has a.** dif
1a760 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64  ferent name to d
1a770 69 73 74 69 6e 67 75 69 73 68 20 69 74 73 20 75  istinguish its u
1a780 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61  se.  Tables crea
1a790 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20  ted using.** by 
1a7a0 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  this opcode will
1a7b0 20 62 65 20 75 73 65 64 20 66 6f 72 20 61 75 74   be used for aut
1a7c0 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74  omatically creat
1a7d0 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20  ed transient.** 
1a7e0 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73  indices in joins
1a7f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
1a800 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73  nAutoindex: .cas
1a810 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  e OP_OpenEphemer
1a820 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  al: {.  VdbeCurs
1a830 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e  or *pCx;.  KeyIn
1a840 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20  fo *pKeyInfo;.. 
1a850 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e   static const in
1a860 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20  t vfsFlags = .  
1a870 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1a880 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20  READWRITE |.    
1a890 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52    SQLITE_OPEN_CR
1a8a0 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  EATE |.      SQL
1a8b0 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49  ITE_OPEN_EXCLUSI
1a8c0 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  VE |.      SQLIT
1a8d0 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43  E_OPEN_DELETEONC
1a8e0 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  LOSE |.      SQL
1a8f0 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45  ITE_OPEN_TRANSIE
1a900 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65 72 74 28  NT_DB;.  assert(
1a910 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
1a920 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1a930 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
1a940 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1a950 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
1a960 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28  2, -1, 1);.  if(
1a970 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
1a980 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75  o_mem;.  pCx->nu
1a990 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20  llRow = 1;.  rc 
1a9a0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70  = sqlite3BtreeOp
1a9b0 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20  en(db->pVfs, 0, 
1a9c0 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a  db, &pCx->pBt, .
1a9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9e0 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d          BTREE_OM
1a9f0 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52  IT_JOURNAL | BTR
1aa00 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d  EE_SINGLE | pOp-
1aa10 3e 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a  >p5, vfsFlags);.
1aa20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1aa30 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  _OK ){.    rc = 
1aa40 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
1aa50 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c  nTrans(pCx->pBt,
1aa60 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72   1);.  }.  if( r
1aa70 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1aa80 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e      /* If a tran
1aa90 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72  sient index is r
1aaa0 65 71 75 69 72 65 64 2c 20 63 72 65 61 74 65 20  equired, create 
1aab0 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20  it by calling.  
1aac0 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65    ** sqlite3Btre
1aad0 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77  eCreateTable() w
1aae0 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c  ith the BTREE_BL
1aaf0 4f 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72  OBKEY flag befor
1ab00 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67  e.    ** opening
1ab10 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69   it. If a transi
1ab20 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71  ent table is req
1ab30 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20  uired, just use 
1ab40 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d  the.    ** autom
1ab50 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
1ab60 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74   table with root
1ab70 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42  -page 1 (an BLOB
1ab80 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a  _INTKEY table)..
1ab90 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28      */.    if( (
1aba0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1abb0 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20  p4.pKeyInfo)!=0 
1abc0 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e  ){.      int pgn
1abd0 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  o;.      assert(
1abe0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1abf0 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20  _KEYINFO );.    
1ac00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1ac10 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
1ac20 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Cx->pBt, &pgno, 
1ac30 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20  BTREE_BLOBKEY | 
1ac40 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20  pOp->p5); .     
1ac50 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1ac60 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  OK ){.        as
1ac70 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54  sert( pgno==MAST
1ac80 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20  ER_ROOT+1 );.   
1ac90 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65       assert( pKe
1aca0 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1acb0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1acc0 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d   pKeyInfo->enc==
1acd0 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20  ENC(db) );.     
1ace0 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f     pCx->pKeyInfo
1acf0 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20   = pKeyInfo;.   
1ad00 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1ad10 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
1ad20 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20  ->pBt, pgno, 1, 
1ad30 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 70  pKeyInfo, pCx->p
1ad40 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d  Cursor);.      }
1ad50 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1ad60 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ble = 0;.    }el
1ad70 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
1ad80 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1ad90 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54  r(pCx->pBt, MAST
1ada0 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70  ER_ROOT, 1, 0, p
1adb0 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  Cx->pCursor);.  
1adc0 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1add0 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 1;.    }.  }.
1ade0 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64    pCx->isOrdered
1adf0 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52   = (pOp->p5!=BTR
1ae00 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20  EE_UNORDERED);. 
1ae10 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1ae20 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e  code: SorterOpen
1ae30 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
1ae40 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1ae50 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70  works like OP_Op
1ae60 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65  enEphemeral exce
1ae70 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73  pt that it opens
1ae80 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20  .** a transient 
1ae90 69 6e 64 65 78 20 74 68 61 74 20 69 73 20 73 70  index that is sp
1aea0 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67  ecifically desig
1aeb0 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67  ned to sort larg
1aec0 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e  e.** tables usin
1aed0 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65  g an external me
1aee0 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74  rge-sort algorit
1aef0 68 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  hm..*/.case OP_S
1af00 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56  orterOpen: {.  V
1af10 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1af20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1af30 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1af40 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b  t( pOp->p2>=0 );
1af50 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1af60 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1af70 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c  p1, pOp->p2, -1,
1af80 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d   1);.  if( pCx==
1af90 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1afa0 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  .  pCx->pKeyInfo
1afb0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1afc0 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 70  nfo;.  assert( p
1afd0 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  Cx->pKeyInfo->db
1afe0 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74  ==db );.  assert
1aff0 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d  ( pCx->pKeyInfo-
1b000 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
1b010 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
1b020 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62  dbeSorterInit(db
1b030 2c 20 70 43 78 29 3b 0a 20 20 62 72 65 61 6b 3b  , pCx);.  break;
1b040 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1b050 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20  penPseudo P1 P2 
1b060 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
1b070 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69  is: P3 columns i
1b080 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70  n r[P2].**.** Op
1b090 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
1b0a0 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  that points to a
1b0b0 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74   fake table that
1b0c0 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67   contains a sing
1b0d0 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74  le.** row of dat
1b0e0 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  a.  The content 
1b0f0 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20  of that one row 
1b100 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  is the content o
1b110 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69  f memory.** regi
1b120 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68  ster P2.  In oth
1b130 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72  er words, cursor
1b140 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61   P1 becomes an a
1b150 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a  lias for the .**
1b160 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e   MEM_Blob conten
1b170 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72  t contained in r
1b180 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1b190 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  * A pseudo-table
1b1a0 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73   created by this
1b1b0 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
1b1c0 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65  to hold a single
1b1d0 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66  .** row output f
1b1e0 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73  rom the sorter s
1b1f0 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63  o that the row c
1b200 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64  an be decomposed
1b210 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64   into.** individ
1b220 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e  ual columns usin
1b230 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20  g the OP_Column 
1b240 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f  opcode.  The OP_
1b250 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a  Column opcode.**
1b260 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72   is the only cur
1b270 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20  sor opcode that 
1b280 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65  works with a pse
1b290 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  udo-table..**.**
1b2a0 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P3 is the numbe
1b2b0 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
1b2c0 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20  he records that 
1b2d0 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62  will be stored b
1b2e0 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d  y.** the pseudo-
1b2f0 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
1b300 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a  P_OpenPseudo: {.
1b310 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1b320 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
1b330 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1b340 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
1b350 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
1b360 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1b370 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20  p->p1, pOp->p3, 
1b380 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43  -1, 0);.  if( pC
1b390 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
1b3a0 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52  em;.  pCx->nullR
1b3b0 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70  ow = 1;.  pCx->p
1b3c0 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20  seudoTableReg = 
1b3d0 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e  pOp->p2;.  pCx->
1b3e0 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61  isTable = 1;.  a
1b3f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
1b400 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  0 );.  break;.}.
1b410 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73  ./* Opcode: Clos
1b420 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
1b430 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f  ** Close a curso
1b440 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65  r previously ope
1b450 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50  ned as P1.  If P
1b460 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72  1 is not.** curr
1b470 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73  ently open, this
1b480 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
1b490 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
1b4a0 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61   OP_Close: {.  a
1b4b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1b4c0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1b4d0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c  nCursor );.  sql
1b4e0 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73  ite3VdbeFreeCurs
1b4f0 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70  or(p, p->apCsr[p
1b500 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61  Op->p1]);.  p->a
1b510 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20  pCsr[pOp->p1] = 
1b520 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
1b530 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 65  * Opcode: SeekGe
1b540 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1b550 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1b560 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1b570 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1b580 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1b590 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1b5a0 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1b5b0 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1b5c0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1b5d0 72 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e  r P3 as the key.
1b5e0 20 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72    If cursor P1 r
1b5f0 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1b600 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1b610 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1b620 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1b630 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1b640 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1b650 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1b660 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1b670 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1b680 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1b690 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1b6a0 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1b6b0 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1b6c0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1b6d0 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  o the key value.
1b6e0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1b6f0 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65   records .** gre
1b700 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
1b710 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
1b720 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1b730 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1b740 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
1b750 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1b760 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65  nd, Distinct, Se
1b770 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65  ekLt, SeekGt, Se
1b780 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1b790 65 3a 20 53 65 65 6b 47 74 20 50 31 20 50 32 20  e: SeekGt P1 P2 
1b7a0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1b7b0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1b7c0 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1b7d0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1b7e0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1b7f0 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1b800 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1b810 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1b820 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1b830 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1b840 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1b850 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1b860 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1b870 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1b880 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1b890 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1b8a0 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1b8b0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1b8c0 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1b8d0 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1b8e0 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
1b8f0 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74  the smallest ent
1b900 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67  ry that .** is g
1b910 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
1b920 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1b930 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1b940 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  ds greater than 
1b950 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20  .** the key and 
1b960 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1b970 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1b980 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1b990 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1b9a0 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b  , Distinct, Seek
1b9b0 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Lt, SeekGe, Seek
1b9c0 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1b9d0 20 53 65 65 6b 4c 74 20 50 31 20 50 32 20 50 33   SeekLt P1 P2 P3
1b9e0 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73   P4 * .** Synops
1b9f0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1ba00 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1ba10 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1ba20 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1ba30 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1ba40 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1ba50 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1ba60 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1ba70 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
1ba80 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1ba90 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1baa0 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1bab0 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1bac0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1bad0 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1bae0 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1baf0 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1bb00 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1bb10 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1bb20 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1bb30 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1bb40 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1bb50 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  s than the key v
1bb60 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1bb70 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65  re no records le
1bb80 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  ss than .** the 
1bb90 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1bba0 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1bbb0 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  p to P2..**.** S
1bbc0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1bbd0 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e  NotFound, Distin
1bbe0 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  ct, SeekGt, Seek
1bbf0 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Ge, SeekLe.*/./*
1bc00 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 65 20   Opcode: SeekLe 
1bc10 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1bc20 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1bc30 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1bc40 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1bc50 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1bc60 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1bc70 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1bc80 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1bc90 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1bca0 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1bcb0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1bcc0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1bcd0 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1bce0 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1bcf0 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1bd00 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1bd10 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1bd20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1bd30 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1bd40 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1bd50 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
1bd60 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74  s to the largest
1bd70 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1bd80 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
1bd90 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1bda0 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1bdb0 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1bdc0 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72  .** less than or
1bdd0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1bde0 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1bdf0 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1be00 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  to P2..**.** See
1be10 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1be20 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74  tFound, Distinct
1be30 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65  , SeekGt, SeekGe
1be40 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65  , SeekLt.*/.case
1be50 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20   OP_SeekLT:     
1be60 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1be70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
1be80 4c 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  LE:         /* j
1be90 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1bea0 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20 20   OP_SeekGE:     
1beb0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1bec0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
1bed0 47 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  GT: {       /* j
1bee0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
1bef0 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b  t res;.  int oc;
1bf00 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1bf10 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  C;.  UnpackedRec
1bf20 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69  ord r;.  int nFi
1bf30 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b  eld;.  i64 iKey;
1bf40 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77        /* The row
1bf50 69 64 20 77 65 20 61 72 65 20 74 6f 20 73 65 65  id we are to see
1bf60 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72  k to */..  asser
1bf70 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1bf80 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1bf90 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
1bfa0 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20   pOp->p2!=0 );. 
1bfb0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1bfc0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1bfd0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
1bfe0 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
1bff0 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
1c000 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1c010 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b  LE == OP_SeekLT+
1c020 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  1 );.  assert( O
1c030 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53  P_SeekGE == OP_S
1c040 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73  eekLT+2 );.  ass
1c050 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d  ert( OP_SeekGT =
1c060 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b  = OP_SeekLT+3 );
1c070 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
1c080 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73  sOrdered );.  as
1c090 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
1c0a0 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70  r!=0 );.  oc = p
1c0b0 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 70 43  Op->opcode;.  pC
1c0c0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
1c0d0 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65   if( pC->isTable
1c0e0 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 69   ){.    /* The i
1c0f0 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33  nput value in P3
1c100 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79   might be of any
1c110 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20   type: integer, 
1c120 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20  real, string,.  
1c130 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55    ** blob, or NU
1c140 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64  LL.  But it need
1c150 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  s to be an integ
1c160 65 72 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e  er before we can
1c170 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20 73   do.    ** the s
1c180 65 65 6b 2c 20 73 6f 20 63 6f 76 65 72 74 20 69  eek, so covert i
1c190 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d  t. */.    pIn3 =
1c1a0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1c1b0 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69  .    applyNumeri
1c1c0 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 29 3b  cAffinity(pIn3);
1c1d0 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69  .    iKey = sqli
1c1e0 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
1c1f0 70 49 6e 33 29 3b 0a 20 20 20 20 70 43 2d 3e 72  pIn3);.    pC->r
1c200 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1c210 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20  ..    /* If the 
1c220 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e  P3 value could n
1c230 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
1c240 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  into an integer 
1c250 77 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c  without.    ** l
1c260 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  oss of informati
1c270 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c  on, then special
1c280 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72   processing is r
1c290 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20  equired... */.  
1c2a0 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
1c2b0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
1c2c0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70   ){.      if( (p
1c2d0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1c2e0 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Real)==0 ){.   
1c2f0 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50       /* If the P
1c300 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62  3 value cannot b
1c310 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
1c320 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e   any kind of a n
1c330 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20 2a  umber,.        *
1c340 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20  * then the seek 
1c350 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c  is not possible,
1c360 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a   so jump to P2 *
1c370 2f 0a 20 20 20 20 20 20 20 20 70 63 20 3d 20 70  /.        pc = p
1c380 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1c390 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1c3a0 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
1c3b0 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  the approximatio
1c3c0 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72  n iKey is larger
1c3d0 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c   than the actual
1c3e0 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20   real search.   
1c3f0 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73     ** term, subs
1c400 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20  titute >= for > 
1c410 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e  and < for <=. e.
1c420 67 2e 20 69 66 20 74 68 65 20 73 65 61 72 63 68  g. if the search
1c430 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69   term.      ** i
1c440 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e  s 4.9 and the in
1c450 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74  teger approximat
1c460 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a  ion 5:.      **.
1c470 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20        **        
1c480 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e  (x >  4.9)    ->
1c490 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20       (x >= 5).  
1c4a0 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78      **        (x
1c4b0 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20   <= 4.9)    ->  
1c4c0 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20     (x <  5).    
1c4d0 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
1c4e0 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69  In3->r<(double)i
1c4f0 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Key ){.        a
1c500 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45  ssert( OP_SeekGE
1c510 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20  ==(OP_SeekGT-1) 
1c520 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1c530 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f  t( OP_SeekLT==(O
1c540 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20  P_SeekLE-1) );. 
1c550 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28         assert( (
1c560 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30  OP_SeekLE & 0x00
1c570 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20  01)==(OP_SeekGT 
1c580 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20  & 0x0001) );.   
1c590 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30       if( (oc & 0
1c5a0 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
1c5b0 47 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f  GT & 0x0001) ) o
1c5c0 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  c--;.      }..  
1c5d0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70      /* If the ap
1c5e0 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79  proximation iKey
1c5f0 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e   is smaller than
1c600 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c   the actual real
1c610 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a   search.      **
1c620 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74   term, substitut
1c630 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e  e <= for < and >
1c640 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20   for >=.  */.   
1c650 20 20 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33     else if( pIn3
1c660 2d 3e 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79  ->r>(double)iKey
1c670 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
1c680 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28  rt( OP_SeekLE==(
1c690 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b 0a  OP_SeekLT+1) );.
1c6a0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1c6b0 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f 53  OP_SeekGT==(OP_S
1c6c0 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20 20  eekGE+1) );.    
1c6d0 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f      assert( (OP_
1c6e0 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29  SeekLT & 0x0001)
1c6f0 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26 20 30  ==(OP_SeekGE & 0
1c700 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20  x0001) );.      
1c710 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30 30    if( (oc & 0x00
1c720 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 20  01)==(OP_SeekLT 
1c730 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2b 2b  & 0x0001) ) oc++
1c740 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  ;.      }.    } 
1c750 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1c760 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1c770 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  cked(pC->pCursor
1c780 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20  , 0, (u64)iKey, 
1c790 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66  0, &res);.    if
1c7a0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1c7b0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
1c7c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1c7d0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
1c7e0 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
1c7f0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1c800 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 43 2d 3e   = 1;.      pC->
1c810 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79  lastRowid = iKey
1c820 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1c830 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  .    nField = pO
1c840 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73 73  p->p4.i;.    ass
1c850 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1c860 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
1c870 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
1c880 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79  >0 );.    r.pKey
1c890 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
1c8a0 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
1c8b0 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b  d = (u16)nField;
1c8c0 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78  ..    /* The nex
1c8d0 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63  t line of code c
1c8e0 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f  omputes as follo
1c8f0 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a  ws, only faster:
1c900 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63  .    **   if( oc
1c910 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f  ==OP_SeekGT || o
1c920 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a  c==OP_SeekLE ){.
1c930 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61      **     r.fla
1c940 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e  gs = UNPACKED_IN
1c950 43 52 4b 45 59 3b 0a 20 20 20 20 2a 2a 20 20 20  CRKEY;.    **   
1c960 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20  }else{.    **   
1c970 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20    r.flags = 0;. 
1c980 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f     **   }.    */
1c990 0a 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 28  .    r.flags = (
1c9a0 75 38 29 28 55 4e 50 41 43 4b 45 44 5f 49 4e 43  u8)(UNPACKED_INC
1c9b0 52 4b 45 59 20 2a 20 28 31 20 26 20 28 6f 63 20  RKEY * (1 & (oc 
1c9c0 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29 29 3b 0a  - OP_SeekLT)));.
1c9d0 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1c9e0 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 72 2e 66  OP_SeekGT || r.f
1c9f0 6c 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f 49  lags==UNPACKED_I
1ca00 4e 43 52 4b 45 59 20 29 3b 0a 20 20 20 20 61 73  NCRKEY );.    as
1ca10 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1ca20 6b 4c 45 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d  kLE || r.flags==
1ca30 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
1ca40 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1ca50 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c  oc!=OP_SeekGE ||
1ca60 20 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 20   r.flags==0 );. 
1ca70 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1ca80 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 66 6c  P_SeekLT || r.fl
1ca90 61 67 73 3d 3d 30 20 29 3b 0a 0a 20 20 20 20 72  ags==0 );..    r
1caa0 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
1cab0 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53  p->p3];.#ifdef S
1cac0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
1cad0 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30  { int i; for(i=0
1cae0 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
1caf0 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  +) assert( memIs
1cb00 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
1cb10 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  ) ); }.#endif.  
1cb20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61    ExpandBlob(r.a
1cb30 4d 65 6d 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  Mem);.    rc = s
1cb40 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1cb50 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
1cb60 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c  ursor, &r, 0, 0,
1cb70 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20   &res);.    if( 
1cb80 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1cb90 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
1cba0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1cbb0 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f      }.    pC->ro
1cbc0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1cbd0 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72 72    }.  pC->deferr
1cbe0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1cbf0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1cc00 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23  = CACHE_STALE;.#
1cc10 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
1cc20 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  T.  sqlite3_sear
1cc30 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
1cc40 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f  if.  if( oc>=OP_
1cc50 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73 65 72  SeekGE ){  asser
1cc60 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45  t( oc==OP_SeekGE
1cc70 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   || oc==OP_SeekG
1cc80 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  T );.    if( res
1cc90 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  <0 || (res==0 &&
1cca0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20   oc==OP_SeekGT) 
1ccb0 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  ){.      res = 0
1ccc0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
1ccd0 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43  ite3BtreeNext(pC
1cce0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1ccf0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
1cd00 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1cd10 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1cd20 72 6f 72 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72  ror;.      pC->r
1cd30 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1cd40 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1cd50 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d    res = 0;.    }
1cd60 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
1cd70 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1cd80 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kLT || oc==OP_Se
1cd90 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66 28 20  ekLE );.    if( 
1cda0 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res>0 || (res==0
1cdb0 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   && oc==OP_SeekL
1cdc0 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  T) ){.      res 
1cdd0 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
1cde0 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
1cdf0 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73 6f 72  ious(pC->pCursor
1ce00 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
1ce10 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1ce20 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1ce30 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1ce40 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1ce50 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73  id = 0;.    }els
1ce60 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65 73 20  e{.      /* res 
1ce70 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74 69 76  might be negativ
1ce80 65 20 62 65 63 61 75 73 65 20 74 68 65 20 74 61  e because the ta
1ce90 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43  ble is empty.  C
1cea0 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a  heck to.      **
1ceb0 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20   see if this is 
1cec0 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20  the case..      
1ced0 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d 20 73  */.      res = s
1cee0 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28 70  qlite3BtreeEof(p
1cef0 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  C->pCursor);.   
1cf00 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28   }.  }.  assert(
1cf10 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
1cf20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
1cf30 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1cf40 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1cf50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1cf60 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
1cf70 53 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65  Synopsis:  intke
1cf80 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31  y=r[P2].**.** P1
1cf90 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c   is an open tabl
1cfa0 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  e cursor and P2 
1cfb0 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67  is a rowid integ
1cfc0 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20  er.  Arrange.** 
1cfd0 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73  for P1 to move s
1cfe0 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
1cff0 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69   to the rowid gi
1d000 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a  ven by P2..**.**
1d010 20 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c   This is actuall
1d020 79 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65  y a deferred see
1d030 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75  k.  Nothing actu
1d040 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74  ally happens unt
1d050 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  il.** the cursor
1d060 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64   is used to read
1d070 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74   a record.  That
1d080 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64   way, if no read
1d090 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75  s.** occur, no u
1d0a0 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68  nnecessary I/O h
1d0b0 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20  appens..*/.case 
1d0c0 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a  OP_Seek: {    /*
1d0d0 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75   in2 */.  VdbeCu
1d0e0 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
1d0f0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1d100 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1d110 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1d120 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1d130 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1d140 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1d150 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1d160 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1d170 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 70 43 2d  isTable );.  pC-
1d180 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
1d190 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
1d1a0 2d 3e 70 32 5d 3b 0a 20 20 70 43 2d 3e 6d 6f 76  ->p2];.  pC->mov
1d1b0 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69  etoTarget = sqli
1d1c0 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
1d1d0 70 49 6e 32 29 3b 0a 20 20 70 43 2d 3e 72 6f 77  pIn2);.  pC->row
1d1e0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1d1f0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1d200 65 74 6f 20 3d 20 31 3b 0a 20 20 62 72 65 61 6b  eto = 1;.  break
1d210 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64  ;.}.  ../* Opcod
1d220 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50  e: Found P1 P2 P
1d230 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1d240 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1d250 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
1d260 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1d270 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
1d280 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
1d290 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
1d2a0 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
1d2b0 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
1d2c0 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
1d2d0 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
1d2e0 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
1d2f0 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72  rd..**.** Cursor
1d300 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
1d310 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
1d320 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
1d330 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
1d340 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20  .** is a prefix 
1d350 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  of any entry in 
1d360 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69  P1 then a jump i
1d370 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64  s made to P2 and
1d380 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70  .** P1 is left p
1d390 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d  ointing at the m
1d3a0 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a  atching entry..*
1d3b0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e  *.** See also: N
1d3c0 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c  otFound, NoConfl
1d3d0 69 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20  ict, NotExists. 
1d3e0 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekGe.*/./* Opc
1d3f0 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31  ode: NotFound P1
1d400 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1d410 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1d420 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
1d430 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
1d440 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
1d450 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
1d460 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
1d470 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
1d480 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
1d490 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
1d4a0 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
1d4b0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
1d4c0 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20   record..** .** 
1d4d0 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
1d4e0 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
1d4f0 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
1d500 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20  dentified by P3 
1d510 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74  and P4.** is not
1d520 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 61   the prefix of a
1d530 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
1d540 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61  hen a jump is ma
1d550 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31  de to P2.  If P1
1d560 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69   .** does contai
1d570 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65  n an entry whose
1d580 20 70 72 65 66 69 78 20 6d 61 74 63 68 65 73 20   prefix matches 
1d590 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64  the P3/P4 record
1d5a0 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a   then control.**
1d5b0 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74   falls through t
1d5c0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
1d5d0 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73  uction and P1 is
1d5e0 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
1d5f0 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e  t the.** matchin
1d600 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53  g entry..**.** S
1d610 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1d620 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e  NotExists, NoCon
1d630 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  flict.*/./* Opco
1d640 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50  de: NoConflict P
1d650 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1d660 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1d670 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1d680 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
1d690 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
1d6a0 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
1d6b0 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
1d6c0 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
1d6d0 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
1d6e0 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
1d6f0 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
1d700 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
1d710 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a  * record..** .**
1d720 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
1d730 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
1d740 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
1d750 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
1d760 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61   and P4.** conta
1d770 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c  ins any NULL val
1d780 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  ue, jump immedia
1d790 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
1d7a0 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65  all terms of the
1d7b0 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e  .** record are n
1d7c0 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63  ot-NULL then a c
1d7d0 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20  heck is done to 
1d7e0 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79  determine if any
1d7f0 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50   row in the.** P
1d800 31 20 69 6e 64 65 78 20 62 74 72 65 65 20 68 61  1 index btree ha
1d810 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79  s a matching key
1d820 20 70 72 65 66 69 78 2e 20 20 49 66 20 74 68 65   prefix.  If the
1d830 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65  re are no matche
1d840 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64  s, jump.** immed
1d850 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49  iately to P2.  I
1d860 66 20 74 68 65 72 65 20 69 73 20 61 20 6d 61 74  f there is a mat
1d870 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ch, fall through
1d880 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50   and leave the P
1d890 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e  1.** cursor poin
1d8a0 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63  ting to the matc
1d8b0 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20  hing row..**.** 
1d8c0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73  This opcode is s
1d8d0 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74  imilar to OP_Not
1d8e0 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20 65  Found with the e
1d8f0 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74  xceptions that t
1d900 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20  he.** branch is 
1d910 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20  always taken if 
1d920 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65 20  any part of the 
1d930 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74  search key input
1d940 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   is NULL..**.** 
1d950 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
1d960 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78  nd, Found, NotEx
1d970 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ists.*/.case OP_
1d980 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20  NoConflict:     
1d990 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1d9a0 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  case OP_NotFound
1d9b0 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  :       /* jump,
1d9c0 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1d9d0 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20  Found: {        
1d9e0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1d9f0 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69    int alreadyExi
1da00 73 74 73 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20  sts;.  int ii;. 
1da10 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1da20 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 63 68  .  int res;.  ch
1da30 61 72 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70  ar *pFree;.  Unp
1da40 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64  ackedRecord *pId
1da50 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64  xKey;.  Unpacked
1da60 52 65 63 6f 72 64 20 72 3b 0a 20 20 63 68 61 72  Record r;.  char
1da70 20 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38   aTempRec[ROUND8
1da80 28 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64  (sizeof(Unpacked
1da90 52 65 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f  Record)) + sizeo
1daa0 66 28 4d 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a  f(Mem)*4 + 7];..
1dab0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
1dac0 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  ST.  if( pOp->op
1dad0 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c  code!=OP_NoConfl
1dae0 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66 6f  ict ) sqlite3_fo
1daf0 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  und_count++;.#en
1db00 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20 70  dif..  assert( p
1db10 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1db20 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1db30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1db40 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1db50 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  32 );.  pC = p->
1db60 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1db70 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1db80 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  );.  pIn3 = &aMe
1db90 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
1dba0 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
1dbb0 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
1dbc0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
1dbd0 20 29 3b 0a 20 20 70 46 72 65 65 20 3d 20 30 3b   );.  pFree = 0;
1dbe0 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
1dbf0 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73    Only used to s
1dc00 75 70 70 72 65 73 73 20 61 20 63 6f 6d 70 69 6c  uppress a compil
1dc10 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20  er warning. */. 
1dc20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30   if( pOp->p4.i>0
1dc30 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   ){.    r.pKeyIn
1dc40 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
1dc50 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
1dc60 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
1dc70 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70  ;.    r.aMem = p
1dc80 49 6e 33 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d  In3;.    for(ii=
1dc90 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  0; ii<r.nField; 
1dca0 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73  ii++){.      ass
1dcb0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
1dcc0 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a  &r.aMem[ii]) );.
1dcd0 20 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62        ExpandBlob
1dce0 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23  (&r.aMem[ii]);.#
1dcf0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1dd00 55 47 0a 20 20 20 20 20 20 69 66 28 20 69 69 20  UG.      if( ii 
1dd10 29 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  ) REGISTER_TRACE
1dd20 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e  (pOp->p3+ii, &r.
1dd30 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64 69  aMem[ii]);.#endi
1dd40 66 0a 20 20 20 20 7d 0a 20 20 20 20 72 2e 66 6c  f.    }.    r.fl
1dd50 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50  ags = UNPACKED_P
1dd60 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20  REFIX_MATCH;.   
1dd70 20 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20   pIdxKey = &r;. 
1dd80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 64 78   }else{.    pIdx
1dd90 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Key = sqlite3Vdb
1dda0 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65  eAllocUnpackedRe
1ddb0 63 6f 72 64 28 0a 20 20 20 20 20 20 20 20 70 43  cord(.        pC
1ddc0 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65 6d  ->pKeyInfo, aTem
1ddd0 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65  pRec, sizeof(aTe
1dde0 6d 70 52 65 63 29 2c 20 26 70 46 72 65 65 0a 20  mpRec), &pFree. 
1ddf0 20 20 20 29 3b 20 0a 20 20 20 20 69 66 28 20 70     ); .    if( p
1de00 49 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f  IdxKey==0 ) goto
1de10 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73   no_mem;.    ass
1de20 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
1de30 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
1de40 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33     assert( (pIn3
1de50 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ->flags & MEM_Ze
1de60 72 6f 29 3d 3d 30 20 29 3b 20 20 2f 2a 20 7a 65  ro)==0 );  /* ze
1de70 72 6f 62 6c 6f 62 73 20 61 6c 72 65 61 64 79 20  roblobs already 
1de80 65 78 70 61 6e 64 65 64 20 2a 2f 0a 20 20 20 20  expanded */.    
1de90 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72  sqlite3VdbeRecor
1dea0 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79  dUnpack(pC->pKey
1deb0 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70  Info, pIn3->n, p
1dec0 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29  In3->z, pIdxKey)
1ded0 3b 0a 20 20 20 20 70 49 64 78 4b 65 79 2d 3e 66  ;.    pIdxKey->f
1dee0 6c 61 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44  lags |= UNPACKED
1def0 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20  _PREFIX_MATCH;. 
1df00 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70   }.  if( pOp->op
1df10 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c  code==OP_NoConfl
1df20 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f  ict ){.    /* Fo
1df30 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c  r the OP_NoConfl
1df40 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65  ict opcode, take
1df50 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79   the jump if any
1df60 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69   of the.    ** i
1df70 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72 65 20  nput fields are 
1df80 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20  NULL, since any 
1df90 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20  key with a NULL 
1dfa0 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20  will not.    ** 
1dfb0 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20  conflict */.    
1dfc0 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e  for(ii=0; ii<r.n
1dfd0 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20  Field; ii++){.  
1dfe0 20 20 20 20 69 66 28 20 72 2e 61 4d 65 6d 5b 69      if( r.aMem[i
1dff0 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  i].flags & MEM_N
1e000 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ull ){.        p
1e010 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1e020 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
1e030 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1e040 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
1e050 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1e060 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1e070 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20   pIdxKey, 0, 0, 
1e080 26 72 65 73 29 3b 0a 20 20 69 66 28 20 70 4f 70  &res);.  if( pOp
1e090 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20  ->p4.i==0 ){.   
1e0a0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
1e0b0 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 7d 0a 20  b, pFree);.  }. 
1e0c0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1e0d0 4f 4b 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  OK ){.    break;
1e0e0 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52  .  }.  pC->seekR
1e0f0 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61  esult = res;.  a
1e100 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28  lreadyExists = (
1e110 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e  res==0);.  pC->n
1e120 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61  ullRow = 1-alrea
1e130 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e  dyExists;.  pC->
1e140 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1e150 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
1e160 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1e170 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ALE;.  if( pOp->
1e180 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64  opcode==OP_Found
1e190 20 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72 65   ){.    if( alre
1e1a0 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d  adyExists ) pc =
1e1b0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1e1c0 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 21  }else{.    if( !
1e1d0 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
1e1e0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1e1f0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1e200 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
1e210 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20  Exists P1 P2 P3 
1e220 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1e230 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a   intkey=r[P3].**
1e240 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
1e250 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20  dex of a cursor 
1e260 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74  open on an SQL t
1e270 61 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68  able btree (with
1e280 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73   integer.** keys
1e290 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74  ).  P3 is an int
1e2a0 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20  eger rowid.  If 
1e2b0 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74  P1 does not cont
1e2c0 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74  ain a record wit
1e2d0 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68  h.** rowid P3 th
1e2e0 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
1e2f0 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 50  ely to P2.  If P
1e300 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61  1 does contain a
1e310 20 72 65 63 6f 72 64 0a 2a 2a 20 77 69 74 68 20   record.** with 
1e320 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6c 65  rowid P3 then le
1e330 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 70  ave the cursor p
1e340 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20  ointing at that 
1e350 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 0a  record and fall.
1e360 2a 2a 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ** through to th
1e370 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
1e380 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50  on..**.** The OP
1e390 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65  _NotFound opcode
1e3a0 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61   performs the sa
1e3b0 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20  me operation on 
1e3c0 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20  index btrees.** 
1e3d0 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79 20  (with arbitrary 
1e3e0 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73  multi-value keys
1e3f0 29 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  )..**.** See als
1e400 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1e410 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a  nd, NoConflict.*
1e420 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69  /.case OP_NotExi
1e430 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  sts: {        /*
1e440 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1e450 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1e460 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
1e470 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
1e480 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e  u64 iKey;..  pIn
1e490 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
1e4a0 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  3];.  assert( pI
1e4b0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1e4c0 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
1e4d0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1e4e0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1e4f0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1e500 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1e510 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1e520 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1e530 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73  isTable );.  ass
1e540 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
1e550 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
1e560 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
1e570 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
1e580 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65 73  Crsr!=0 );.  res
1e590 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70   = 0;.  iKey = p
1e5a0 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d  In3->u.i;.  rc =
1e5b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1e5c0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
1e5d0 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26  r, 0, iKey, 0, &
1e5e0 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6c 61 73 74  res);.  pC->last
1e5f0 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e  Rowid = pIn3->u.
1e600 69 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  i;.  pC->rowidIs
1e610 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f  Valid = res==0 ?
1e620 31 3a 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  1:0;.  pC->nullR
1e630 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  ow = 0;.  pC->ca
1e640 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1e650 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64  E_STALE;.  pC->d
1e660 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1e670 30 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20  0;.  if( res!=0 
1e680 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
1e690 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61 73 73  >p2 - 1;.    ass
1e6a0 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73  ert( pC->rowidIs
1e6b0 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 7d 0a  Valid==0 );.  }.
1e6c0 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
1e6d0 20 3d 20 72 65 73 3b 0a 20 20 62 72 65 61 6b 3b   = res;.  break;
1e6e0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1e6f0 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20  equence P1 P2 * 
1e700 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1e710 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a   r[P2]=rowid.**.
1e720 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74  ** Find the next
1e730 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65   available seque
1e740 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63  nce number for c
1e750 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69  ursor P1..** Wri
1e760 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  te the sequence 
1e770 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69  number into regi
1e780 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20  ster P2..** The 
1e790 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1e7a0 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  on the cursor is
1e7b0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74   incremented aft
1e7c0 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72  er this.** instr
1e7d0 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73  uction.  .*/.cas
1e7e0 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b  e OP_Sequence: {
1e7f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
1e800 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
1e810 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1e820 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1e830 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1e840 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
1e850 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b  r[pOp->p1]!=0 );
1e860 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
1e870 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1e880 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20  ->seqCount++;.  
1e890 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
1e8a0 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50  code: NewRowid P
1e8b0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
1e8c0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
1e8d0 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61  owid.**.** Get a
1e8e0 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63   new integer rec
1e8f0 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e  ord number (a.k.
1e900 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20  a "rowid") used 
1e910 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20  as the key to a 
1e920 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65  table..** The re
1e930 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e  cord number is n
1e940 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
1e950 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74  ed as a key in t
1e960 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74  he database.** t
1e970 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72  able that cursor
1e980 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20   P1 points to.  
1e990 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e  The new record n
1e9a0 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e  umber is written
1e9b0 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72  .** written to r
1e9c0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1e9d0 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50  * If P3>0 then P
1e9e0 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  3 is a register 
1e9f0 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
1ea00 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20 74  e of this VDBE t
1ea10 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68  hat holds .** th
1ea20 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f  e largest previo
1ea30 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72  usly generated r
1ea40 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f  ecord number. No
1ea50 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
1ea60 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77  ers are.** allow
1ea70 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68  ed to be less th
1ea80 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57  an this value. W
1ea90 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72  hen this value r
1eaa0 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d  eaches its maxim
1eab0 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54  um, .** an SQLIT
1eac0 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20  E_FULL error is 
1ead0 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50  generated. The P
1eae0 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70  3 register is up
1eaf0 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 27  dated with the '
1eb00 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65  .** generated re
1eb10 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69  cord number. Thi
1eb20 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69  s P3 mechanism i
1eb30 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  s used to help i
1eb40 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  mplement the.** 
1eb50 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65  AUTOINCREMENT fe
1eb60 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ature..*/.case O
1eb70 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20  P_NewRowid: {   
1eb80 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
1eb90 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
1eba0 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20  i64 v;          
1ebb0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
1ebc0 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62  w rowid */.  Vdb
1ebd0 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
1ebe0 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66      /* Cursor of
1ebf0 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68   table to get th
1ec00 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20  e new rowid */. 
1ec10 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
1ec20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
1ec30 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42  t of an sqlite3B
1ec40 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20  treeLast() */.  
1ec50 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20  int cnt;        
1ec60 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
1ec70 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e  r to limit the n
1ec80 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65  umber of searche
1ec90 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  s */.  Mem *pMem
1eca0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1ecb0 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
1ecc0 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20  g largest rowid 
1ecd0 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  for AUTOINCREMEN
1ece0 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  T */.  VdbeFrame
1ecf0 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a   *pFrame;     /*
1ed00 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56   Root frame of V
1ed10 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b  DBE */..  v = 0;
1ed20 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73  .  res = 0;.  as
1ed30 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1ed40 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1ed50 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1ed60 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1ed70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1ed80 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 4e 45 56  !=0 );.  if( NEV
1ed90 45 52 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d  ER(pC->pCursor==
1eda0 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  0) ){.    /* The
1edb0 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61   zero initializa
1edc0 74 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c  tion above is al
1edd0 6c 20 74 68 61 74 20 69 73 20 6e 65 65 64 65 64  l that is needed
1ede0 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
1edf0 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77   /* The next row
1ee00 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d  id or record num
1ee10 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74  ber (different t
1ee20 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d  erms for the sam
1ee30 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20  e.    ** thing) 
1ee40 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61  is obtained in a
1ee50 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69   two-step algori
1ee60 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  thm..    **.    
1ee70 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65  ** First we atte
1ee80 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20  mpt to find the 
1ee90 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
1eea0 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f   rowid and add o
1eeb0 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61  ne.    ** to tha
1eec0 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c  t.  But if the l
1eed0 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
1eee0 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79  rowid is already
1eef0 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20   the maximum.   
1ef00 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74   ** positive int
1ef10 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f  eger, we have to
1ef20 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
1ef30 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20   the second.    
1ef40 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63  ** probabilistic
1ef50 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a   algorithm.    *
1ef60 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63  *.    ** The sec
1ef70 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ond algorithm is
1ef80 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77   to select a row
1ef90 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64  id at random and
1efa0 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69   see if.    ** i
1efb0 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  t already exists
1efc0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
1efd0 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65  If it does not e
1efe0 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20  xist, we have.  
1eff0 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20    ** succeeded. 
1f000 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72   If the random r
1f010 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c  owid does exist,
1f020 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77   we select a new
1f030 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20   one.    ** and 
1f040 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f  try again, up to
1f050 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20   100 times..    
1f060 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  */.    assert( p
1f070 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23  C->isTable );..#
1f080 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42  ifdef SQLITE_32B
1f090 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66  IT_ROWID.#   def
1f0a0 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78  ine MAX_ROWID 0x
1f0b0 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20  7fffffff.#else. 
1f0c0 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69     /* Some compi
1f0d0 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62  lers complain ab
1f0e0 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66  out constants of
1f0f0 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66   the form 0x7fff
1f100 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20  ffffffffffff..  
1f110 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70    ** Others comp
1f120 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66  lain about 0x7ff
1f130 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c  ffffffffffffffLL
1f140 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
1f150 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20   macro seems.   
1f160 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74   ** to provide t
1f170 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c  he constant whil
1f180 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d  e making all com
1f190 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20  pilers happy..  
1f1a0 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20    */.#   define 
1f1b0 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29  MAX_ROWID  (i64)
1f1c0 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66 66  ( (((u64)0x7ffff
1f1d0 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34  fff)<<32) | (u64
1f1e0 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23 65  )0xffffffff ).#e
1f1f0 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70  ndif..    if( !p
1f200 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
1f210 64 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  d ){.      rc = 
1f220 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
1f230 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1f240 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
1f250 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1f260 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
1f270 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1f280 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
1f290 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
1f2a0 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d    v = 1;   /* IM
1f2b0 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34  P: R-61914-48074
1f2c0 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   */.      }else{
1f2d0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1f2e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1f2f0 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 70  sorIsValid(pC->p
1f300 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
1f310 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1f320 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e  treeKeySize(pC->
1f330 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  pCursor, &v);.  
1f340 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63        assert( rc
1f350 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
1f360 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20   /* Cannot fail 
1f370 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c  following BtreeL
1f380 61 73 74 28 29 20 2a 2f 0a 20 20 20 20 20 20 20  ast() */.       
1f390 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49   if( v>=MAX_ROWI
1f3a0 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  D ){.          p
1f3b0 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
1f3c0 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  d = 1;.        }
1f3d0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
1f3e0 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  v++;   /* IMP: R
1f3f0 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a  -29538-34987 */.
1f400 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1f410 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66  }.    }..#ifndef
1f420 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
1f430 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 69  OINCREMENT.    i
1f440 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
1f450 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
1f460 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
1f470 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
1f480 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1f490 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
1f4a0 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
1f4b0 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70  ){.        for(p
1f4c0 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
1f4d0 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
1f4e0 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
1f4f0 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20  >pParent);.     
1f500 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
1f510 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
1f520 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
1f530 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1f540 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d  pOp->p3<=pFrame-
1f550 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20  >nMem );.       
1f560 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d   pMem = &pFrame-
1f570 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
1f580 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1f590 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
1f5a0 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
1f5b0 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
1f5c0 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
1f5d0 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
1f5e0 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
1f5f0 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20  );.        pMem 
1f600 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1f610 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f  ;.        memAbo
1f620 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d  utToChange(p, pM
1f630 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  em);.      }.   
1f640 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
1f650 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a  Valid(pMem) );..
1f660 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
1f670 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d  RACE(pOp->p3, pM
1f680 65 6d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  em);.      sqlit
1f690 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
1f6a0 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20  ify(pMem);.     
1f6b0 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
1f6c0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1f6d0 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50  !=0 );  /* mem(P
1f6e0 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  3) holds an inte
1f6f0 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  ger */.      if(
1f700 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f   pMem->u.i==MAX_
1f710 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65  ROWID || pC->use
1f720 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
1f730 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
1f740 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d  TE_FULL;   /* IM
1f750 50 3a 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38  P: R-12275-61338
1f760 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   */.        goto
1f770 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1f780 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
1f790 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75     if( v<pMem->u
1f7a0 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20  .i+1 ){.        
1f7b0 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20  v = pMem->u.i + 
1f7c0 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  1;.      }.     
1f7d0 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pMem->u.i = v;.
1f7e0 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
1f7f0 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e 64   if( pC->useRand
1f800 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
1f810 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49   /* IMPLEMENTATI
1f820 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34  ON-OF: R-07677-4
1f830 31 38 38 31 20 49 66 20 74 68 65 20 6c 61 72 67  1881 If the larg
1f840 65 73 74 20 52 4f 57 49 44 20 69 73 20 65 71 75  est ROWID is equ
1f850 61 6c 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20  al to the.      
1f860 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69  ** largest possi
1f870 62 6c 65 20 69 6e 74 65 67 65 72 20 28 39 32 32  ble integer (922
1f880 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
1f890 29 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62  ) then the datab
1f8a0 61 73 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67  ase.      ** eng
1f8b0 69 6e 65 20 73 74 61 72 74 73 20 70 69 63 6b 69  ine starts picki
1f8c0 6e 67 20 70 6f 73 69 74 69 76 65 20 63 61 6e 64  ng positive cand
1f8d0 69 64 61 74 65 20 52 4f 57 49 44 73 20 61 74 20  idate ROWIDs at 
1f8e0 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20  random until.   
1f8f0 20 20 20 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f     ** it finds o
1f900 6e 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20 70  ne that is not p
1f910 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 2e 20  reviously used. 
1f920 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
1f930 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20   pOp->p3==0 );  
1f940 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65 20  /* We cannot be 
1f950 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20  in random rowid 
1f960 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69 73 0a  mode if this is.
1f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f980 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
1f990 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  an AUTOINCREMENT
1f9a0 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20   table. */.     
1f9b0 20 2f 2a 20 6f 6e 20 74 68 65 20 66 69 72 73 74   /* on the first
1f9c0 20 61 74 74 65 6d 70 74 2c 20 73 69 6d 70 6c 79   attempt, simply
1f9d0 20 64 6f 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61   do one more tha
1f9e0 6e 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  n previous */.  
1f9f0 20 20 20 20 76 20 3d 20 6c 61 73 74 52 6f 77 69      v = lastRowi
1fa00 64 3b 0a 20 20 20 20 20 20 76 20 26 3d 20 28 4d  d;.      v &= (M
1fa10 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a  AX_ROWID>>1); /*
1fa20 20 65 6e 73 75 72 65 20 64 6f 65 73 6e 27 74 20   ensure doesn't 
1fa30 67 6f 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20  go negative */. 
1fa40 20 20 20 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73       v++; /* ens
1fa50 75 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a  ure non-zero */.
1fa60 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20        cnt = 0;. 
1fa70 20 20 20 20 20 77 68 69 6c 65 28 20 20 20 28 28       while(   ((
1fa80 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1fa90 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1faa0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
1fab0 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20 20 20  (u64)v,.        
1fac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fae0 20 20 20 20 20 20 20 20 20 30 2c 20 26 72 65 73           0, &res
1faf0 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20  ))==SQLITE_OK). 
1fb00 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28 72             && (r
1fb10 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20 20 20  es==0).         
1fb20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30     && (++cnt<100
1fb30 29 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 63  )){.        /* c
1fb40 6f 6c 6c 69 73 69 6f 6e 20 2d 20 74 72 79 20 61  ollision - try a
1fb50 6e 6f 74 68 65 72 20 72 61 6e 64 6f 6d 20 72 6f  nother random ro
1fb60 77 69 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 73  wid */.        s
1fb70 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73  qlite3_randomnes
1fb80 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29  s(sizeof(v), &v)
1fb90 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 6e  ;.        if( cn
1fba0 74 3c 35 20 29 7b 0a 20 20 20 20 20 20 20 20 20  t<5 ){.         
1fbb0 20 2f 2a 20 74 72 79 20 22 73 6d 61 6c 6c 22 20   /* try "small" 
1fbc0 72 61 6e 64 6f 6d 20 72 6f 77 69 64 73 20 66 6f  random rowids fo
1fbd0 72 20 74 68 65 20 69 6e 69 74 69 61 6c 20 61 74  r the initial at
1fbe0 74 65 6d 70 74 73 20 2a 2f 0a 20 20 20 20 20 20  tempts */.      
1fbf0 20 20 20 20 76 20 26 3d 20 30 78 66 66 66 66 66      v &= 0xfffff
1fc00 66 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  f;.        }else
1fc10 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20 26 3d  {.          v &=
1fc20 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b   (MAX_ROWID>>1);
1fc30 20 2f 2a 20 65 6e 73 75 72 65 20 64 6f 65 73 6e   /* ensure doesn
1fc40 27 74 20 67 6f 20 6e 65 67 61 74 69 76 65 20 2a  't go negative *
1fc50 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  /.        }.    
1fc60 20 20 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75      v++; /* ensu
1fc70 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20  re non-zero */. 
1fc80 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
1fc90 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
1fca0 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  & res==0 ){.    
1fcb0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1fcc0 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20  FULL;   /* IMP: 
1fcd0 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20 2a 2f  R-38219-53002 */
1fce0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
1fcf0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1fd00 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1fd10 61 73 73 65 72 74 28 20 76 3e 30 20 29 3b 20 20  assert( v>0 );  
1fd20 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31 32 2d 30  /* EV: R-40812-0
1fd30 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  3570 */.    }.  
1fd40 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1fd50 69 64 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  id = 0;.    pC->
1fd60 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1fd70 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
1fd80 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1fd90 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75  STALE;.  }.  pOu
1fda0 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72  t->u.i = v;.  br
1fdb0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1fdc0 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32 20  e: Insert P1 P2 
1fdd0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
1fde0 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50  psis: intkey=r[P
1fdf0 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a  3] data=r[P2].**
1fe00 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74  .** Write an ent
1fe10 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c  ry into the tabl
1fe20 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20  e of cursor P1. 
1fe30 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a   A new entry is.
1fe40 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20 69 74  ** created if it
1fe50 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79   doesn't already
1fe60 20 65 78 69 73 74 20 6f 72 20 74 68 65 20 64 61   exist or the da
1fe70 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69  ta for an existi
1fe80 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f  ng.** entry is o
1fe90 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65  verwritten.  The
1fea0 20 64 61 74 61 20 69 73 20 74 68 65 20 76 61 6c   data is the val
1feb0 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72  ue MEM_Blob stor
1fec0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a  ed in register.*
1fed0 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65  * number P2. The
1fee0 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20 69   key is stored i
1fef0 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 54  n register P3. T
1ff00 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62  he key must.** b
1ff10 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a  e a MEM_Int..**.
1ff20 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
1ff30 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66  _NCHANGE flag of
1ff40 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
1ff50 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
1ff60 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72  count is.** incr
1ff70 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69  emented (otherwi
1ff80 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65  se not).  If the
1ff90 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
1ffa0 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  D flag of P5 is 
1ffb0 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77  set,.** then row
1ffc0 69 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72  id is stored for
1ffd0 20 73 75 62 73 65 71 75 65 6e 74 20 72 65 74 75   subsequent retu
1ffe0 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  rn by the.** sql
1fff0 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
20000 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f  _rowid() functio
20010 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69 74 20  n (otherwise it 
20020 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a  is unmodified)..
20030 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
20040 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
20050 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  T flag of P5 is 
20060 73 65 74 20 61 6e 64 20 69 66 20 74 68 65 20 72  set and if the r
20070 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20  esult of.** the 
20080 6c 61 73 74 20 73 65 65 6b 20 6f 70 65 72 61 74  last seek operat
20090 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74  ion (OP_NotExist
200a0 73 29 20 77 61 73 20 61 20 73 75 63 63 65 73 73  s) was a success
200b0 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f  , then this.** o
200c0 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f  peration will no
200d0 74 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e  t attempt to fin
200e0 64 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  d the appropriat
200f0 65 20 72 6f 77 20 62 65 66 6f 72 65 20 64 6f 69  e row before doi
20100 6e 67 0a 2a 2a 20 74 68 65 20 69 6e 73 65 72 74  ng.** the insert
20110 20 62 75 74 20 77 69 6c 6c 20 69 6e 73 74 65 61   but will instea
20120 64 20 6f 76 65 72 77 72 69 74 65 20 74 68 65 20  d overwrite the 
20130 72 6f 77 20 74 68 61 74 20 74 68 65 20 63 75 72  row that the cur
20140 73 6f 72 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e  sor is.** curren
20150 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e  tly pointing to.
20160 20 20 50 72 65 73 75 6d 61 62 6c 79 2c 20 74 68    Presumably, th
20170 65 20 70 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78  e prior OP_NotEx
20180 69 73 74 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68  ists opcode.** h
20190 61 73 20 61 6c 72 65 61 64 79 20 70 6f 73 69 74  as already posit
201a0 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72  ioned the cursor
201b0 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69   correctly.  Thi
201c0 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61  s is an optimiza
201d0 74 69 6f 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f  tion.** that boo
201e0 73 74 73 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  sts performance 
201f0 62 79 20 61 76 6f 69 64 69 6e 67 20 72 65 64 75  by avoiding redu
20200 6e 64 61 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a  ndant seeks..**.
20210 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
20220 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69  _ISUPDATE flag i
20230 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69 73  s set, then this
20240 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74 20   opcode is part 
20250 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20  of an.** UPDATE 
20260 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65  operation.  Othe
20270 72 77 69 73 65 20 28 69 66 20 74 68 65 20 66 6c  rwise (if the fl
20280 61 67 20 69 73 20 63 6c 65 61 72 29 20 74 68 65  ag is clear) the
20290 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a  n this opcode.**
202a0 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20 49   is part of an I
202b0 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e  NSERT operation.
202c0 20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65    The difference
202d0 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61   is only importa
202e0 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64  nt to.** the upd
202f0 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20  ate hook..**.** 
20300 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79  Parameter P4 may
20310 20 70 6f 69 6e 74 20 74 6f 20 61 20 73 74 72 69   point to a stri
20320 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ng containing th
20330 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72  e table-name, or
20340 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  .** may be NULL.
20350 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20 4e 55   If it is not NU
20360 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64  LL, then the upd
20370 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71  ate-hook .** (sq
20380 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c  lite3.xUpdateCal
20390 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65  lback) is invoke
203a0 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75  d following a su
203b0 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e  ccessful insert.
203c0 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f  .**.** (WARNING/
203d0 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61  TODO: If P1 is a
203e0 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61   pseudo-cursor a
203f0 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63  nd P2 is dynamic
20400 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  ally.** allocate
20410 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69  d, then ownershi
20420 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73  p of P2 is trans
20430 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70 73  ferred to the ps
20440 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61  eudo-cursor.** a
20450 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20 62  nd register P2 b
20460 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c  ecomes ephemeral
20470 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  .  If the cursor
20480 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65   is changed, the
20490 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67  .** value of reg
204a0 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68  ister P2 will th
204b0 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65  en change.  Make
204c0 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73 20   sure this does 
204d0 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79  not.** cause any
204e0 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a   problems.).**.*
204f0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
20500 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e  on only works on
20510 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71   tables.  The eq
20520 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63  uivalent instruc
20530 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69  tion.** for indi
20540 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73  ces is OP_IdxIns
20550 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ert..*/./* Opcod
20560 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50 31 20  e: InsertInt P1 
20570 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
20580 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79  ynopsis:  intkey
20590 3d 50 33 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a  =P3 data=r[P2].*
205a0 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
205b0 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f  exactly like OP_
205c0 49 6e 73 65 72 74 20 65 78 63 65 70 74 20 74 68  Insert except th
205d0 61 74 20 74 68 65 20 6b 65 79 20 69 73 20 74 68  at the key is th
205e0 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76 61 6c  e.** integer val
205f0 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65 20 76  ue P3, not the v
20600 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65  alue of the inte
20610 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20 72 65  ger stored in re
20620 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61  gister P3..*/.ca
20630 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63  se OP_Insert: .c
20640 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74  ase OP_InsertInt
20650 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61  : {.  Mem *pData
20660 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63  ;       /* MEM c
20670 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61  ell holding data
20680 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
20690 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a  to be inserted *
206a0 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20  /.  Mem *pKey;  
206b0 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c        /* MEM cel
206c0 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66  l holding key  f
206d0 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  or the record */
206e0 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20  .  i64 iKey;    
206f0 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65       /* The inte
20700 67 65 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79  ger ROWID or key
20710 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
20720 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a  to be inserted *
20730 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
20740 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  pC;   /* Cursor 
20750 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68  to table into wh
20760 69 63 68 20 69 6e 73 65 72 74 20 69 73 20 77 72  ich insert is wr
20770 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  itten */.  int n
20780 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20  Zero;        /* 
20790 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62  Number of zero-b
207a0 79 74 65 73 20 74 6f 20 61 70 70 65 6e 64 20 2a  ytes to append *
207b0 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75  /.  int seekResu
207c0 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20  lt;   /* Result 
207d0 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72  of prior seek or
207e0 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b   0 if no USESEEK
207f0 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20  RESULT flag */. 
20800 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
20810 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e  ;  /* database n
20820 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68  ame - used by th
20830 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f  e update hook */
20840 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
20850 54 62 6c 3b 20 2f 2a 20 54 61 62 6c 65 20 6e 61  Tbl; /* Table na
20860 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65  me - used by the
20870 20 6f 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a   opdate hook */.
20880 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20 20    int op;       
20890 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f      /* Opcode fo
208a0 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53  r update hook: S
208b0 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f 72 20  QLITE_UPDATE or 
208c0 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f  SQLITE_INSERT */
208d0 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65  ..  pData = &aMe
208e0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
208f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
20900 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
20910 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
20920 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
20930 44 61 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20  Data) );.  pC = 
20940 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
20950 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
20960 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
20970 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
20980 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
20990 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
209a0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
209b0 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
209c0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
209d0 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a  Op->p2, pData);.
209e0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
209f0 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b  de==OP_Insert ){
20a00 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61 4d 65  .    pKey = &aMe
20a10 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
20a20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c  assert( pKey->fl
20a30 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
20a40 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
20a50 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29 3b  IsValid(pKey) );
20a60 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
20a70 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65  ACE(pOp->p3, pKe
20a80 79 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70  y);.    iKey = p
20a90 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73  Key->u.i;.  }els
20aa0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
20ab0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
20ac0 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20 20 20 20  nsertInt );.    
20ad0 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  iKey = pOp->p3;.
20ae0 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e    }..  if( pOp->
20af0 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41  p5 & OPFLAG_NCHA
20b00 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65  NGE ) p->nChange
20b10 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  ++;.  if( pOp->p
20b20 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  5 & OPFLAG_LASTR
20b30 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52  OWID ) db->lastR
20b40 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
20b50 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28 20 70   = iKey;.  if( p
20b60 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Data->flags & ME
20b70 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44  M_Null ){.    pD
20b80 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20  ata->z = 0;.    
20b90 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20  pData->n = 0;.  
20ba0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
20bb0 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  t( pData->flags 
20bc0 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f  & (MEM_Blob|MEM_
20bd0 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20 73 65  Str) );.  }.  se
20be0 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70  ekResult = ((pOp
20bf0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53  ->p5 & OPFLAG_US
20c00 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70  ESEEKRESULT) ? p
20c10 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20  C->seekResult : 
20c20 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d  0);.  if( pData-
20c30 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
20c40 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d  o ){.    nZero =
20c50 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b   pData->u.nZero;
20c60 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 5a  .  }else{.    nZ
20c70 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72  ero = 0;.  }.  r
20c80 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
20c90 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73  Insert(pC->pCurs
20ca0 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20  or, 0, iKey,.   
20cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cc0 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c         pData->z,
20cd0 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f   pData->n, nZero
20ce0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
20cf0 20 20 20 20 20 20 20 20 20 20 20 20 28 70 4f 70              (pOp
20d00 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50  ->p5 & OPFLAG_AP
20d10 50 45 4e 44 29 21 3d 30 2c 20 73 65 65 6b 52 65  PEND)!=0, seekRe
20d20 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e  sult.  );.  pC->
20d30 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
20d40 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
20d50 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
20d60 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
20d70 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20  CACHE_STALE;..  
20d80 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
20d90 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
20da0 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
20db0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
20dc0 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
20dd0 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e  back && pOp->p4.
20de0 7a 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64  z ){.    zDb = d
20df0 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e  b->aDb[pC->iDb].
20e00 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20  zName;.    zTbl 
20e10 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20  = pOp->p4.z;.   
20e20 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20   op = ((pOp->p5 
20e30 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  & OPFLAG_ISUPDAT
20e40 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41  E) ? SQLITE_UPDA
20e50 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45  TE : SQLITE_INSE
20e60 52 54 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  RT);.    assert(
20e70 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
20e80 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
20e90 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
20ea0 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c  ateArg, op, zDb,
20eb0 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20   zTbl, iKey);.  
20ec0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
20ed0 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72  b>=0 );.  }.  br
20ee0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
20ef0 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50 32 20  e: Delete P1 P2 
20f00 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c  * P4 *.**.** Del
20f10 65 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 61  ete the record a
20f20 74 20 77 68 69 63 68 20 74 68 65 20 50 31 20 63  t which the P1 c
20f30 75 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74  ursor is current
20f40 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a  ly pointing..**.
20f50 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 77 69  ** The cursor wi
20f60 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74  ll be left point
20f70 69 6e 67 20 61 74 20 65 69 74 68 65 72 20 74 68  ing at either th
20f80 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72  e next or the pr
20f90 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64  evious.** record
20fa0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49   in the table. I
20fb0 66 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69  f it is left poi
20fc0 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78  nting at the nex
20fd0 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a  t record, then.*
20fe0 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20  * the next Next 
20ff0 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c  instruction will
21000 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65   be a no-op.  He
21010 6e 63 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20  nce it is OK to 
21020 64 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f  delete.** a reco
21030 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  rd from within a
21040 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a  n Next loop..**.
21050 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
21060 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66  _NCHANGE flag of
21070 20 50 32 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P2 is set, then
21080 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
21090 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72  count is.** incr
210a0 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69  emented (otherwi
210b0 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50  se not)..**.** P
210c0 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73  1 must not be ps
210d0 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20  eudo-table.  It 
210e0 68 61 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c  has to be a real
210f0 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d   table with.** m
21100 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a  ultiple rows..**
21110 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
21120 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69   NULL, then it i
21130 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
21140 65 20 74 61 62 6c 65 20 74 68 61 74 20 50 31 20  e table that P1 
21150 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74  is.** pointing t
21160 6f 2e 20 20 54 68 65 20 75 70 64 61 74 65 20 68  o.  The update h
21170 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f  ook will be invo
21180 6b 65 64 2c 20 69 66 20 69 74 20 65 78 69 73 74  ked, if it exist
21190 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  s..** If P4 is n
211a0 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  ot NULL then the
211b0 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
211c0 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69  have been positi
211d0 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50  oned.** using OP
211e0 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20  _NotFound prior 
211f0 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73  to invoking this
21200 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
21210 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20   OP_Delete: {.  
21220 69 36 34 20 69 4b 65 79 3b 0a 20 20 56 64 62 65  i64 iKey;.  Vdbe
21230 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
21240 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
21250 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
21260 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
21270 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
21280 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
21290 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
212a0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
212b0 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c   );  /* Only val
212c0 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c  id for real tabl
212d0 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62  es, no pseudotab
212e0 6c 65 73 20 2a 2f 0a 20 20 69 4b 65 79 20 3d 20  les */.  iKey = 
212f0 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20  pC->lastRowid;  
21300 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 75 73 65 64      /* Only used
21310 20 66 6f 72 20 74 68 65 20 75 70 64 61 74 65 20   for the update 
21320 68 6f 6f 6b 20 2a 2f 0a 0a 20 20 2f 2a 20 54 68  hook */..  /* Th
21330 65 20 4f 50 5f 44 65 6c 65 74 65 20 6f 70 63 6f  e OP_Delete opco
21340 64 65 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77  de always follow
21350 73 20 61 6e 20 4f 50 5f 4e 6f 74 45 78 69 73 74  s an OP_NotExist
21360 73 20 6f 72 20 4f 50 5f 4c 61 73 74 20 6f 72 0a  s or OP_Last or.
21370 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    ** OP_Column o
21380 6e 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  n the same table
21390 20 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74   without any int
213a0 65 72 76 65 6e 69 6e 67 20 6f 70 65 72 61 74 69  ervening operati
213b0 6f 6e 73 20 74 68 61 74 0a 20 20 2a 2a 20 6d 69  ons that.  ** mi
213c0 67 68 74 20 6d 6f 76 65 20 6f 72 20 69 6e 76 61  ght move or inva
213d0 6c 69 64 61 74 65 20 74 68 65 20 63 75 72 73 6f  lidate the curso
213e0 72 2e 20 20 48 65 6e 63 65 20 63 75 72 73 6f 72  r.  Hence cursor
213f0 20 70 43 20 69 73 20 61 6c 77 61 79 73 20 70 6f   pC is always po
21400 69 6e 74 69 6e 67 0a 20 20 2a 2a 20 74 6f 20 74  inting.  ** to t
21410 68 65 20 72 6f 77 20 74 6f 20 62 65 20 64 65 6c  he row to be del
21420 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
21430 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
21440 76 65 74 6f 28 29 20 6f 70 65 72 61 74 69 6f 6e  veto() operation
21450 0a 20 20 2a 2a 20 62 65 6c 6f 77 20 69 73 20 61  .  ** below is a
21460 6c 77 61 79 73 20 61 20 6e 6f 2d 6f 70 20 61 6e  lways a no-op an
21470 64 20 63 61 6e 6e 6f 74 20 66 61 69 6c 2e 20 20  d cannot fail.  
21480 57 65 20 77 69 6c 6c 20 72 75 6e 20 69 74 20 61  We will run it a
21490 6e 79 68 6f 77 2c 20 74 68 6f 75 67 68 2c 0a 20  nyhow, though,. 
214a0 20 2a 2a 20 74 6f 20 67 75 61 72 64 20 61 67 61   ** to guard aga
214b0 69 6e 73 74 20 66 75 74 75 72 65 20 63 68 61 6e  inst future chan
214c0 67 65 73 20 74 6f 20 74 68 65 20 63 6f 64 65 20  ges to the code 
214d0 67 65 6e 65 72 61 74 6f 72 2e 0a 20 20 2a 2a 2f  generator..  **/
214e0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
214f0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
21500 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
21510 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
21520 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45  to(pC);.  if( NE
21530 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f  VER(rc!=SQLITE_O
21540 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  K) ) goto abort_
21550 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
21560 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
21570 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43 75  eeDelete(pC->pCu
21580 72 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63  rsor);.  pC->cac
21590 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
215a0 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e  _STALE;..  /* In
215b0 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d  voke the update-
215c0 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
215d0 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53  . */.  if( rc==S
215e0 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e  QLITE_OK && db->
215f0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
21600 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20  && pOp->p4.z && 
21610 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20  pC->isTable ){. 
21620 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61     db->xUpdateCa
21630 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61  llback(db->pUpda
21640 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45  teArg, SQLITE_DE
21650 4c 45 54 45 2c 0a 20 20 20 20 20 20 20 20 20 20  LETE,.          
21660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62                db
21670 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
21680 4e 61 6d 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  Name, pOp->p4.z,
21690 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65   iKey);.    asse
216a0 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
216b0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
216c0 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p2 & OPFLAG_NCH
216d0 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
216e0 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  e++;.  break;.}.
216f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74  /* Opcode: Reset
21700 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a  Count * * * * *.
21710 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
21720 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  of the change co
21730 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20  unter is copied 
21740 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
21750 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65  handle.** change
21760 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e   counter (return
21770 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74  ed by subsequent
21780 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65   calls to sqlite
21790 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a  3_changes())..**
217a0 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e   Then the VMs in
217b0 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f  ternal change co
217c0 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f 20  unter resets to 
217d0 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73  0..** This is us
217e0 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
217f0 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20  ograms..*/.case 
21800 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b  OP_ResetCount: {
21810 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
21820 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
21830 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e  nChange);.  p->n
21840 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72  Change = 0;.  br
21850 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
21860 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72 65  e: SorterCompare
21870 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20   P1 P2 P3 P4.** 
21880 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 6b 65  Synopsis:  if ke
21890 79 28 50 31 29 21 3d 72 74 72 69 6d 28 72 5b 50  y(P1)!=rtrim(r[P
218a0 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a  3],P4) goto P2.*
218b0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72  *.** P1 is a sor
218c0 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73  ter cursor. This
218d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d   instruction com
218e0 70 61 72 65 73 20 61 20 70 72 65 66 69 78 20 6f  pares a prefix o
218f0 66 20 74 68 65 0a 2a 2a 20 74 68 65 20 72 65 63  f the.** the rec
21900 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72 65 67 69  ord blob in regi
21910 73 74 65 72 20 50 33 20 61 67 61 69 6e 73 74 20  ster P3 against 
21920 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20  a prefix of the 
21930 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 74  entry that .** t
21940 68 65 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72  he sorter cursor
21950 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
21960 73 20 74 6f 2e 20 20 54 68 65 20 66 69 6e 61 6c  s to.  The final
21970 20 50 34 20 66 69 65 6c 64 73 20 6f 66 20 62 6f   P4 fields of bo
21980 74 68 0a 2a 2a 20 74 68 65 20 50 33 20 61 6e 64  th.** the P3 and
21990 20 73 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61   sorter record a
219a0 72 65 20 69 67 6e 6f 72 65 64 2e 0a 2a 2a 0a 2a  re ignored..**.*
219b0 2a 20 49 66 20 65 69 74 68 65 72 20 50 33 20 6f  * If either P3 o
219c0 72 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e  r the sorter con
219d0 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20  tains a NULL in 
219e0 6f 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69 67  one of their sig
219f0 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c  nificant.** fiel
21a00 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67  ds (not counting
21a10 20 74 68 65 20 50 34 20 66 69 65 6c 64 73 20 61   the P4 fields a
21a20 74 20 74 68 65 20 65 6e 64 20 77 68 69 63 68 20  t the end which 
21a30 61 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65  are ignored) the
21a40 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  n.** the compari
21a50 73 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74  son is assumed t
21a60 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a  o be equal..**.*
21a70 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * Fall through t
21a80 6f 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  o next instructi
21a90 6f 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72 65  on if the two re
21aa0 63 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71  cords compare eq
21ab0 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f  ual to.** each o
21ac0 74 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50  ther.  Jump to P
21ad0 32 20 69 66 20 74 68 65 79 20 61 72 65 20 64 69  2 if they are di
21ae0 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65  fferent..*/.case
21af0 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72   OP_SorterCompar
21b00 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
21b10 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
21b20 3b 0a 20 20 69 6e 74 20 6e 49 67 6e 6f 72 65 3b  ;.  int nIgnore;
21b30 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
21b40 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
21b50 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
21b60 43 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  C) );.  assert( 
21b70 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
21b80 49 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20  INT32 );.  pIn3 
21b90 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
21ba0 3b 0a 20 20 6e 49 67 6e 6f 72 65 20 3d 20 70 4f  ;.  nIgnore = pO
21bb0 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 63 20 3d 20  p->p4.i;.  rc = 
21bc0 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
21bd0 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e  rCompare(pC, pIn
21be0 33 2c 20 6e 49 67 6e 6f 72 65 2c 20 26 72 65 73  3, nIgnore, &res
21bf0 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a  );.  if( res ){.
21c00 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
21c10 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  -1;.  }.  break;
21c20 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .};../* Opcode: 
21c30 53 6f 72 74 65 72 44 61 74 61 20 50 31 20 50 32  SorterData P1 P2
21c40 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
21c50 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a  is: r[P2]=data.*
21c60 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
21c70 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
21c80 63 75 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64  current sorter d
21c90 61 74 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63  ata for sorter c
21ca0 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ursor P1..*/.cas
21cb0 65 20 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a  e OP_SorterData:
21cc0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
21cd0 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26  *pC;..  pOut = &
21ce0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
21cf0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
21d00 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
21d10 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
21d20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
21d30 33 56 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65  3VdbeSorterRowke
21d40 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20 62  y(pC, pOut);.  b
21d50 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
21d60 64 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50  de: RowData P1 P
21d70 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
21d80 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a  sis: r[P2]=data.
21d90 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
21da0 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
21db0 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64 61   complete row da
21dc0 74 61 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  ta for cursor P1
21dd0 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f  ..** There is no
21de0 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
21df0 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a  of the data.  .*
21e00 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70  * It is just cop
21e10 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20  ied onto the P2 
21e20 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79  register exactly
21e30 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f   as .** it is fo
21e40 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  und in the datab
21e50 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
21e60 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  If the P1 cursor
21e70 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e   must be pointin
21e80 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77  g to a valid row
21e90 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77   (not a NULL row
21ea0 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74  ).** of a real t
21eb0 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
21ec0 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20  do-table..*/./* 
21ed0 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50  Opcode: RowKey P
21ee0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
21ef0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 6b 65  nopsis: r[P2]=ke
21f00 79 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  y.**.** Write in
21f10 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
21f20 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20  he complete row 
21f30 6b 65 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50  key for cursor P
21f40 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e  1..** There is n
21f50 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  o interpretation
21f60 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a   of the data.  .
21f70 2a 2a 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f  ** The key is co
21f80 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32  pied onto the P2
21f90 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c   register exactl
21fa0 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66  y as .** it is f
21fb0 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61  ound in the data
21fc0 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
21fd0 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f   If the P1 curso
21fe0 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69  r must be pointi
21ff0 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f  ng to a valid ro
22000 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f  w (not a NULL ro
22010 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20  w).** of a real 
22020 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
22030 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  udo-table..*/.ca
22040 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61  se OP_RowKey:.ca
22050 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b  se OP_RowData: {
22060 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
22070 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
22080 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20  Crsr;.  u32 n;. 
22090 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75   i64 n64;..  pOu
220a0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
220b0 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  2];.  memAboutTo
220c0 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
220d0 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74  ..  /* Note that
220e0 20 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44   RowKey and RowD
220f0 61 74 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65  ata are really e
22100 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
22110 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20  instruction */. 
22120 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
22130 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
22140 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
22150 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
22160 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
22170 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 30   isSorter(pC)==0
22180 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
22190 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70  ->isTable || pOp
221a0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 52 6f 77  ->opcode!=OP_Row
221b0 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74  Data );.  assert
221c0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
221d0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
221e0 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20  =OP_RowData );. 
221f0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
22200 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
22210 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20  nullRow==0 );.  
22220 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
22230 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b  doTableReg==0 );
22240 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
22250 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70  Cursor!=0 );.  p
22260 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
22270 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71  or;.  assert( sq
22280 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
22290 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
222a0 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52  ;..  /* The OP_R
222b0 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52 6f 77  owKey and OP_Row
222c0 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77  Data opcodes alw
222d0 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f  ays follow OP_No
222e0 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20  tExists or.  ** 
222f0 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78  OP_Rewind/Op_Nex
22300 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76  t with no interv
22310 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  ening instructio
22320 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e  ns that might in
22330 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20 74 68  validate.  ** th
22340 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63 65  e cursor.  Hence
22350 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
22360 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
22370 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 69 73  Moveto() call is
22380 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 61 20 6e   always.  ** a n
22390 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 20 6e 65 76  o-op and can nev
223a0 65 72 20 66 61 69 6c 2e 20 20 42 75 74 20 77 65  er fail.  But we
223b0 20 6c 65 61 76 65 20 69 74 20 69 6e 20 70 6c 61   leave it in pla
223c0 63 65 20 61 73 20 61 20 73 61 66 65 74 79 2e 0a  ce as a safety..
223d0 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
223e0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
223f0 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  o==0 );.  rc = s
22400 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
22410 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66  Moveto(pC);.  if
22420 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
22430 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62  TE_OK) ) goto ab
22440 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
22450 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54  ;..  if( pC->isT
22460 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 61  able==0 ){.    a
22470 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54 61  ssert( !pC->isTa
22480 62 6c 65 20 29 3b 0a 20 20 20 20 56 56 41 5f 4f  ble );.    VVA_O
22490 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
224a0 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
224b0 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20  rsr, &n64);.    
224c0 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
224d0 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54  TE_OK );    /* T
224e0 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43  rue because of C
224f0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61  ursorMoveto() ca
22500 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20  ll above */.    
22510 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d  if( n64>db->aLim
22520 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
22530 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20  LENGTH] ){.     
22540 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
22550 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33     }.    n = (u3
22560 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a  2)n64;.  }else{.
22570 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20      VVA_ONLY(rc 
22580 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 44  =) sqlite3BtreeD
22590 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26  ataSize(pCrsr, &
225a0 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  n);.    assert( 
225b0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
225c0 20 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28      /* DataSize(
225d0 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f  ) cannot fail */
225e0 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33 32 29  .    if( n>(u32)
225f0 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
22600 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
22610 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  ){.      goto to
22620 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d  o_big;.    }.  }
22630 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
22640 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20  beMemGrow(pOut, 
22650 6e 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74  n, 0) ){.    got
22660 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
22670 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d  pOut->n = n;.  M
22680 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
22690 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20  ut, MEM_Blob);. 
226a0 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65   if( pC->isTable
226b0 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
226c0 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28  sqlite3BtreeKey(
226d0 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75  pCrsr, 0, n, pOu
226e0 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  t->z);.  }else{.
226f0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
22700 42 74 72 65 65 44 61 74 61 28 70 43 72 73 72 2c  BtreeData(pCrsr,
22710 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b   0, n, pOut->z);
22720 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  .  }.  pOut->enc
22730 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20   = SQLITE_UTF8; 
22740 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20   /* In case the 
22750 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 61 73  blob is ever cas
22760 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 55  t to text */.  U
22770 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
22780 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49  ZE(pOut);.  REGI
22790 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
227a0 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65  p2, pOut);.  bre
227b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
227c0 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20  : Rowid P1 P2 * 
227d0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
227e0 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a   r[P2]=rowid.**.
227f0 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69  ** Store in regi
22800 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67  ster P2 an integ
22810 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
22820 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65  key of the table
22830 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50   entry that.** P
22840 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
22850 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50  oint to..**.** P
22860 31 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  1 can be either 
22870 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  an ordinary tabl
22880 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74  e or a virtual t
22890 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65  able.  There use
228a0 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70  d to.** be a sep
228b0 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20  arate OP_VRowid 
228c0 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77  opcode for use w
228d0 69 74 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ith virtual tabl
228e0 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20  es, but this.** 
228f0 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77  one opcode now w
22900 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61  orks for both ta
22910 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61  ble types..*/.ca
22920 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20  se OP_Rowid: {  
22930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22940 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
22950 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  e */.  VdbeCurso
22960 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a  r *pC;.  i64 v;.
22970 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
22980 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
22990 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
229a0 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72  Module;..  asser
229b0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
229c0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
229d0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
229e0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
229f0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
22a00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
22a10 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
22a20 3d 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52  ==0 || pC->nullR
22a30 6f 77 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  ow );.  if( pC->
22a40 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70  nullRow ){.    p
22a50 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
22a60 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b  _Null;.    break
22a70 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  ;.  }else if( pC
22a80 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
22a90 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e   ){.    v = pC->
22aa0 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69  movetoTarget;.#i
22ab0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
22ac0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
22ad0 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70   }else if( pC->p
22ae0 56 74 61 62 43 75 72 73 6f 72 20 29 7b 0a 20 20  VtabCursor ){.  
22af0 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 70 56    pVtab = pC->pV
22b00 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
22b10 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ;.    pModule = 
22b20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
22b30 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64      assert( pMod
22b40 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20  ule->xRowid );. 
22b50 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
22b60 3e 78 52 6f 77 69 64 28 70 43 2d 3e 70 56 74 61  >xRowid(pC->pVta
22b70 62 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  bCursor, &v);.  
22b80 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
22b90 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
22ba0 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ab);.#endif /* S
22bb0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
22bc0 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c  ALTABLE */.  }el
22bd0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
22be0 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
22bf0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
22c00 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
22c10 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  to(pC);.    if( 
22c20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
22c30 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
22c40 20 20 69 66 28 20 70 43 2d 3e 72 6f 77 69 64 49    if( pC->rowidI
22c50 73 56 61 6c 69 64 20 29 7b 0a 20 20 20 20 20 20  sValid ){.      
22c60 76 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69  v = pC->lastRowi
22c70 64 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  d;.    }else{.  
22c80 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
22c90 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d  BtreeKeySize(pC-
22ca0 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  >pCursor, &v);. 
22cb0 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d       assert( rc=
22cc0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f  =SQLITE_OK );  /
22cd0 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65 63 61  * Always so beca
22ce0 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76  use of CursorMov
22cf0 65 74 6f 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20  eto() above */. 
22d00 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d     }.  }.  pOut-
22d10 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61  >u.i = v;.  brea
22d20 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
22d30 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20   NullRow P1 * * 
22d40 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74  * *.**.** Move t
22d50 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  he cursor P1 to 
22d60 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79  a null row.  Any
22d70 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61   OP_Column opera
22d80 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63  tions.** that oc
22d90 63 75 72 20 77 68 69 6c 65 20 74 68 65 20 63 75  cur while the cu
22da0 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e  rsor is on the n
22db0 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77  ull row will alw
22dc0 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e  ays.** write a N
22dd0 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
22de0 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62  NullRow: {.  Vdb
22df0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
22e00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
22e10 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
22e20 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
22e30 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
22e40 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
22e50 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e  pC!=0 );.  pC->n
22e60 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
22e70 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
22e80 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
22e90 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
22ea0 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70  ALE;.  if( pC->p
22eb0 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 73 71  Cursor ){.    sq
22ec0 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 43  lite3BtreeClearC
22ed0 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f  ursor(pC->pCurso
22ee0 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  r);.  }.  break;
22ef0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .}../* Opcode: L
22f00 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ast P1 P2 * * *.
22f10 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
22f20 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
22f30 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78  or Column or Nex
22f40 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  t instruction fo
22f50 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
22f60 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20  fer to the last 
22f70 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74  entry in the dat
22f80 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
22f90 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ndex..** If the 
22fa0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
22fb0 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30  s empty and P2>0
22fc0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
22fd0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
22fe0 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20  * If P2 is 0 or 
22ff0 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  if the table or 
23000 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70  index is not emp
23010 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ty, fall through
23020 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
23030 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
23040 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73  ..*/.case OP_Las
23050 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
23060 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
23070 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
23080 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
23090 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
230a0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
230b0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
230c0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
230d0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
230e0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
230f0 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
23100 3e 70 43 75 72 73 6f 72 3b 0a 20 20 72 65 73 20  >pCursor;.  res 
23110 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
23120 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 63 20  Crsr!=0 );.  rc 
23130 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
23140 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b  st(pCrsr, &res);
23150 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
23160 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e   (u8)res;.  pC->
23170 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
23180 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49   0;.  pC->rowidI
23190 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43  sValid = 0;.  pC
231a0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
231b0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69  CACHE_STALE;.  i
231c0 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  f( pOp->p2>0 && 
231d0 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
231e0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
231f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
23200 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31   Opcode: Sort P1
23210 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
23220 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73  This opcode does
23230 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d   exactly the sam
23240 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65  e thing as OP_Re
23250 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74  wind except that
23260 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74  .** it increment
23270 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s an undocumente
23280 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  d global variabl
23290 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69  e used for testi
232a0 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e  ng..**.** Sortin
232b0 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65  g is accomplishe
232c0 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63  d by writing rec
232d0 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74  ords into a sort
232e0 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68  ing index,.** th
232f0 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61  en rewinding tha
23300 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79  t index and play
23310 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d  ing it back from
23320 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a   beginning to.**
23330 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68   end.  We use th
23340 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65  e OP_Sort opcode
23350 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52   instead of OP_R
23360 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a  ewind to do the.
23370 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20  ** rewinding so 
23380 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20  that the global 
23390 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65  variable will be
233a0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64   incremented and
233b0 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74  .** regression t
233c0 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69  ests can determi
233d0 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
233e0 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  t the optimizer 
233f0 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20  is.** correctly 
23400 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73  optimizing out s
23410 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  orts..*/.case OP
23420 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20  _SorterSort:    
23430 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
23440 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20  OP_Sort: {      
23450 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66    /* jump */.#if
23460 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
23470 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63    sqlite3_sort_c
23480 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65  ount++;.  sqlite
23490 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d  3_search_count--
234a0 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43  ;.#endif.  p->aC
234b0 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54  ounter[SQLITE_ST
234c0 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b  MTSTATUS_SORT]++
234d0 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
234e0 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69  ugh into OP_Rewi
234f0 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  nd */.}./* Opcod
23500 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20  e: Rewind P1 P2 
23510 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
23520 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
23530 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
23540 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
23550 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
23560 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
23570 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20   first entry in 
23580 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
23590 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
235a0 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
235b0 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
235c0 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
235d0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
235e0 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
235f0 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
23600 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
23610 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
23620 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
23630 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
23640 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
23650 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20   OP_Rewind: {   
23660 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
23670 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
23680 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
23690 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
236a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
236b0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
236c0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
236d0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
236e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
236f0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
23700 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
23710 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  C)==(pOp->opcode
23720 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29  ==OP_SorterSort)
23730 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 20   );.  res = 1;. 
23740 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43   if( isSorter(pC
23750 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) ){.    rc = sq
23760 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
23770 65 77 69 6e 64 28 64 62 2c 20 70 43 2c 20 26 72  ewind(db, pC, &r
23780 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  es);.  }else{.  
23790 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
237a0 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65 72  ursor;.    asser
237b0 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20  t( pCrsr );.    
237c0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
237d0 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72  eFirst(pCrsr, &r
237e0 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  es);.    pC->def
237f0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
23800 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
23810 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
23820 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69  LE;.    pC->rowi
23830 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
23840 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  }.  pC->nullRow 
23850 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73  = (u8)res;.  ass
23860 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
23870 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  & pOp->p2<p->nOp
23880 20 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b   );.  if( res ){
23890 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
238a0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
238b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
238c0 3a 20 4e 65 78 74 20 50 31 20 50 32 20 50 33 20  : Next P1 P2 P3 
238d0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61  P4 P5.**.** Adva
238e0 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f  nce cursor P1 so
238f0 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
23900 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f  to the next key/
23910 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73  data pair in its
23920 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
23930 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  ex.  If there ar
23940 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61  e no more key/va
23950 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
23960 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
23970 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
23980 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
23990 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
239a0 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63  advance was succ
239b0 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
239c0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
239d0 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  2..**.** The P1 
239e0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
239f0 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
23a00 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
23a10 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68 61  ble.  P1 must ha
23a20 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65  ve.** been opene
23a30 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
23a40 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70 72  opcode or the pr
23a50 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66 61  ogram will segfa
23a60 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ult..**.** The P
23a70 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e  3 value is a hin
23a80 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69  t to the btree i
23a90 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49  mplementation. I
23aa0 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a  f P3==1, that.**
23ab0 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20   means P1 is an 
23ac0 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68  SQL index and th
23ad0 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  at this instruct
23ae0 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62  ion could have b
23af0 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69  een.** omitted i
23b00 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64  f that index had
23b10 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50   been unique.  P
23b20 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20  3 is usually 0. 
23b30 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73   P3 is.** always
23b40 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a   either 0 or 1..
23b50 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61  **.** P4 is alwa
23b60 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44  ys of type P4_AD
23b70 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74  VANCE. The funct
23b80 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e  ion pointer poin
23b90 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33  ts to.** sqlite3
23ba0 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a  BtreeNext()..**.
23bb0 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69  ** If P5 is posi
23bc0 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d  tive and the jum
23bd0 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e  p is taken, then
23be0 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a   event counter.*
23bf0 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e  * number P5-1 in
23c00 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
23c10 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65  atement is incre
23c20 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  mented..**.** Se
23c30 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20 4e 65  e also: Prev, Ne
23c40 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f  xtIfOpen.*/./* O
23c50 70 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f 70 65  pcode: NextIfOpe
23c60 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
23c70 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
23c80 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  de works just li
23c90 6b 65 20 4f 50 5f 4e 65 78 74 20 65 78 63 65 70  ke OP_Next excep
23ca0 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72  t that if cursor
23cb0 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70   P1 is not.** op
23cc0 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20  en it behaves a 
23cd0 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  no-op..*/./* Opc
23ce0 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20  ode: Prev P1 P2 
23cf0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42  P3 P4 P5.**.** B
23d00 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31  ack up cursor P1
23d10 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
23d20 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ts to the previo
23d30 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  us key/data pair
23d40 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
23d50 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
23d60 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69  here is no previ
23d70 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ous key/value pa
23d80 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
23d90 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
23da0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
23db0 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
23dc0 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70  he cursor backup
23dd0 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
23de0 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
23df0 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
23e00 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
23e10 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
23e20 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
23e30 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49  pseudo-table.  I
23e40 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f  f P1 is.** not o
23e50 70 65 6e 20 74 68 65 6e 20 74 68 65 20 62 65 68  pen then the beh
23e60 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e  avior is undefin
23e70 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33  ed..**.** The P3
23e80 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74   value is a hint
23e90 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d   to the btree im
23ea0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66  plementation. If
23eb0 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20   P3==1, that.** 
23ec0 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53  means P1 is an S
23ed0 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61  QL index and tha
23ee0 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  t this instructi
23ef0 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65  on could have be
23f00 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66  en.** omitted if
23f10 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64 20   that index had 
23f20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33  been unique.  P3
23f30 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20   is usually 0.  
23f40 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  P3 is.** always 
23f50 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a  either 0 or 1..*
23f60 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79  *.** P4 is alway
23f70 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56  s of type P4_ADV
23f80 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69  ANCE. The functi
23f90 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74  on pointer point
23fa0 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42  s to.** sqlite3B
23fb0 74 72 65 65 50 72 65 76 69 6f 75 73 28 29 2e 0a  treePrevious()..
23fc0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
23fd0 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
23fe0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
23ff0 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
24000 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
24010 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
24020 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
24030 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a  cremented..*/./*
24040 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 49 66 4f   Opcode: PrevIfO
24050 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
24060 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P5.**.** This op
24070 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20  code works just 
24080 6c 69 6b 65 20 4f 50 5f 50 72 65 76 20 65 78 63  like OP_Prev exc
24090 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72 73  ept that if curs
240a0 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20  or P1 is not.** 
240b0 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73 20  open it behaves 
240c0 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
240d0 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20   OP_SorterNext: 
240e0 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20  {  /* jump */.  
240f0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
24100 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43    int res;..  pC
24110 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
24120 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
24130 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
24140 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
24150 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c  beSorterNext(db,
24160 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 67 6f   pC, &res);.  go
24170 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61  to next_tail;.ca
24180 73 65 20 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e  se OP_PrevIfOpen
24190 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  :    /* jump */.
241a0 63 61 73 65 20 4f 50 5f 4e 65 78 74 49 66 4f 70  case OP_NextIfOp
241b0 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  en:    /* jump *
241c0 2f 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72  /.  if( p->apCsr
241d0 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29 20 62  [pOp->p1]==0 ) b
241e0 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  reak;.  /* Fall 
241f0 74 68 72 6f 75 67 68 20 2a 2f 0a 63 61 73 65 20  through */.case 
24200 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20  OP_Prev:        
24210 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
24220 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20  e OP_Next:      
24230 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
24240 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
24250 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
24260 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
24270 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41  ssert( pOp->p5<A
24280 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75  rraySize(p->aCou
24290 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20  nter) );.  pC = 
242a0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
242b0 5d 3b 0a 20 20 72 65 73 20 3d 20 70 4f 70 2d 3e  ];.  res = pOp->
242c0 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  p3;.  assert( pC
242d0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
242e0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
242f0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
24300 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20  rt( pC->pCursor 
24310 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 65 73  );.  assert( res
24320 3d 3d 30 20 7c 7c 20 28 72 65 73 3d 3d 31 20 26  ==0 || (res==1 &
24330 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  & pC->isTable==0
24340 29 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  ) );.  testcase(
24350 20 72 65 73 3d 3d 31 20 29 3b 0a 20 20 61 73 73   res==1 );.  ass
24360 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
24370 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70  !=OP_Next || pOp
24380 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
24390 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 20  qlite3BtreeNext 
243a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
243b0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65  ->opcode!=OP_Pre
243c0 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  v || pOp->p4.xAd
243d0 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
243e0 72 65 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20  reePrevious );. 
243f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
24400 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f  code!=OP_NextIfO
24410 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78  pen || pOp->p4.x
24420 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33  Advance==sqlite3
24430 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61  BtreeNext );.  a
24440 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
24450 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65  de!=OP_PrevIfOpe
24460 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  n || pOp->p4.xAd
24470 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
24480 72 65 65 50 72 65 76 69 6f 75 73 29 3b 0a 20 20  reePrevious);.  
24490 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64  rc = pOp->p4.xAd
244a0 76 61 6e 63 65 28 70 43 2d 3e 70 43 75 72 73 6f  vance(pC->pCurso
244b0 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74  r, &res);.next_t
244c0 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65  ail:.  pC->cache
244d0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
244e0 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 65 73 3d  TALE;.  if( res=
244f0 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75  =0 ){.    pC->nu
24500 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70  llRow = 0;.    p
24510 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
24520 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  .    p->aCounter
24530 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66  [pOp->p5]++;.#if
24540 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
24550 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72      sqlite3_sear
24560 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
24570 69 66 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  if.  }else{.    
24580 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
24590 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64  .  }.  pC->rowid
245a0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 67  IsValid = 0;.  g
245b0 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  oto check_for_in
245c0 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f  terrupt;.}../* O
245d0 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74  pcode: IdxInsert
245e0 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a   P1 P2 P3 * P5.*
245f0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
24600 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69  r[P2].**.** Regi
24610 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e  ster P2 holds an
24620 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d   SQL index key m
24630 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ade using the.**
24640 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
24650 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20  ructions.  This 
24660 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68  opcode writes th
24670 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74  at key.** into t
24680 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61  he index P1.  Da
24690 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79  ta for the entry
246a0 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50   is nil..**.** P
246b0 33 20 69 73 20 61 20 66 6c 61 67 20 74 68 61 74  3 is a flag that
246c0 20 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74   provides a hint
246d0 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c   to the b-tree l
246e0 61 79 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a  ayer that this.*
246f0 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65  * insert is like
24700 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
24710 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  nd..**.** If P5 
24720 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e  has the OPFLAG_N
24730 43 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20  CHANGE bit set, 
24740 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20  then the change 
24750 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e  counter is.** in
24760 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69  cremented by thi
24770 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  s instruction.  
24780 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
24790 48 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65  HANGE bit is cle
247a0 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  ar,.** then the 
247b0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
247c0 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a  s unchanged..**.
247d0 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
247e0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
247f0 45 53 55 4c 54 20 62 69 74 20 73 65 74 2c 20 74  ESULT bit set, t
24800 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d  hen the cursor m
24810 75 73 74 20 68 61 76 65 0a 2a 2a 20 6a 75 73 74  ust have.** just
24820 20 64 6f 6e 65 20 61 20 73 65 65 6b 20 74 6f 20   done a seek to 
24830 74 68 65 20 73 70 6f 74 20 77 68 65 72 65 20 74  the spot where t
24840 68 65 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20  he new entry is 
24850 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 0a  to be inserted..
24860 2a 2a 20 54 68 69 73 20 66 6c 61 67 20 61 76 6f  ** This flag avo
24870 69 64 73 20 64 6f 69 6e 67 20 61 6e 20 65 78 74  ids doing an ext
24880 72 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54  ra seek..**.** T
24890 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
248a0 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69  only works for i
248b0 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75  ndices.  The equ
248c0 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
248d0 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65  ion.** for table
248e0 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a  s is OP_Insert..
248f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
24900 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f  rInsert:       /
24910 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50  * in2 */.case OP
24920 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20  _IdxInsert: {   
24930 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
24940 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
24950 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
24960 73 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a  sr;.  int nKey;.
24970 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b    const char *zK
24980 65 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  ey;..  assert( p
24990 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
249a0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
249b0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
249c0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
249d0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
249e0 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
249f0 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70  er(pC)==(pOp->op
24a00 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49  code==OP_SorterI
24a10 6e 73 65 72 74 29 20 29 3b 0a 20 20 70 49 6e 32  nsert) );.  pIn2
24a20 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
24a30 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
24a40 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  2->flags & MEM_B
24a50 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  lob );.  pCrsr =
24a60 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
24a70 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
24a80 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
24a90 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61  ->nChange++;.  a
24aa0 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
24ab0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
24ac0 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
24ad0 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62   rc = ExpandBlob
24ae0 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 72 63  (pIn2);.  if( rc
24af0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
24b00 20 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28     if( isSorter(
24b10 70 43 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20  pC) ){.      rc 
24b20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
24b30 74 65 72 57 72 69 74 65 28 64 62 2c 20 70 43 2c  terWrite(db, pC,
24b40 20 70 49 6e 32 29 3b 0a 20 20 20 20 7d 65 6c 73   pIn2);.    }els
24b50 65 7b 0a 20 20 20 20 20 20 6e 4b 65 79 20 3d 20  e{.      nKey = 
24b60 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a  pIn2->n;.      z
24b70 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20  Key = pIn2->z;. 
24b80 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
24b90 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 72  3BtreeInsert(pCr
24ba0 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20  sr, zKey, nKey, 
24bb0 22 22 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70  "", 0, 0, pOp->p
24bc0 33 2c 20 0a 20 20 20 20 20 20 20 20 20 20 28 28  3, .          ((
24bd0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
24be0 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20  _USESEEKRESULT) 
24bf0 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74  ? pC->seekResult
24c00 20 3a 20 30 29 0a 20 20 20 20 20 20 20 20 20 20   : 0).          
24c10 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
24c20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
24c30 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  eto==0 );.      
24c40 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
24c50 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
24c60 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
24c70 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
24c80 49 64 78 44 65 6c 65 74 65 20 50 31 20 50 32 20  IdxDelete P1 P2 
24c90 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
24ca0 69 73 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d  is: key=r[P2@P3]
24cb0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65  .**.** The conte
24cc0 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73 74 65  nt of P3 registe
24cd0 72 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 72  rs starting at r
24ce0 65 67 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a  egister P2 form.
24cf0 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  ** an unpacked i
24d00 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f  ndex key. This o
24d10 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68  pcode removes th
24d20 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68  at entry from th
24d30 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e  e .** index open
24d40 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  ed by cursor P1.
24d50 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44  .*/.case OP_IdxD
24d60 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43  elete: {.  VdbeC
24d70 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
24d80 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
24d90 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
24da0 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
24db0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
24dc0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
24dd0 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
24de0 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  >p2+pOp->p3<=(p-
24df0 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
24e00 29 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  )+1 );.  assert(
24e10 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
24e20 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
24e30 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
24e40 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
24e50 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
24e60 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
24e70 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
24e80 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
24e90 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
24ea0 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  ==0 );.  r.pKeyI
24eb0 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
24ec0 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
24ed0 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20   (u16)pOp->p3;. 
24ee0 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
24ef0 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48  KED_PREFIX_MATCH
24f00 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d  ;.  r.aMem = &aM
24f10 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69 66  em[pOp->p2];.#if
24f20 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
24f30 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28  .  { int i; for(
24f40 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
24f50 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
24f60 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
24f70 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
24f80 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
24f90 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
24fa0 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c  ed(pCrsr, &r, 0,
24fb0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28   0, &res);.  if(
24fc0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
24fd0 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  & res==0 ){.    
24fe0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
24ff0 65 44 65 6c 65 74 65 28 70 43 72 73 72 29 3b 0a  eDelete(pCrsr);.
25000 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 43    }.  assert( pC
25010 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
25020 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63  ==0 );.  pC->cac
25030 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
25040 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b  _STALE;.  break;
25050 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
25060 64 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20  dxRowid P1 P2 * 
25070 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
25080 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a   r[P2]=rowid.**.
25090 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
250a0 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74  gister P2 an int
250b0 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
250c0 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
250d0 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a  the record at.**
250e0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
250f0 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65  index key pointe
25100 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50  d to by cursor P
25110 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65 72  1.  This integer
25120 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68   should be.** th
25130 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74  e rowid of the t
25140 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68  able entry to wh
25150 69 63 68 20 74 68 69 73 20 69 6e 64 65 78 20 65  ich this index e
25160 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a  ntry points..**.
25170 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77  ** See also: Row
25180 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a  id, MakeRecord..
25190 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f  */.case OP_IdxRo
251a0 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
251b0 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
251c0 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 43 75  elease */.  BtCu
251d0 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56  rsor *pCrsr;.  V
251e0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
251f0 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 61   i64 rowid;..  a
25200 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
25210 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
25220 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
25230 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
25240 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
25250 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  C!=0 );.  pCrsr 
25260 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
25270 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
25280 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  0 );.  pOut->fla
25290 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
252a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
252b0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
252c0 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  );.  if( NEVER(r
252d0 63 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  c) ) goto abort_
252e0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
252f0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
25300 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
25310 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
25320 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 69  sTable==0 );.  i
25330 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  f( !pC->nullRow 
25340 29 7b 0a 20 20 20 20 72 6f 77 69 64 20 3d 20 30  ){.    rowid = 0
25350 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
25360 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20  .  Only used to 
25370 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
25380 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  g. */.    rc = s
25390 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77  qlite3VdbeIdxRow
253a0 69 64 28 64 62 2c 20 70 43 72 73 72 2c 20 26 72  id(db, pCrsr, &r
253b0 6f 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72  owid);.    if( r
253c0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
253d0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
253e0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
253f0 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75     }.    pOut->u
25400 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  .i = rowid;.    
25410 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
25420 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 62 72 65  M_Int;.  }.  bre
25430 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
25440 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33  : IdxGE P1 P2 P3
25450 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
25460 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
25470 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
25480 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
25490 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
254a0 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
254b0 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
254c0 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
254d0 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70  IMARY KEY.  Comp
254e0 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
254f0 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
25500 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
25510 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
25520 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
25530 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
25540 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a  KEY or ROWID .**
25550 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65   fields at the e
25560 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  nd..**.** If the
25570 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
25580 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
25590 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
255a0 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65  key value.** the
255b0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  n jump to P2.  O
255c0 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
255d0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
255e0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
255f0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
25600 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50  GT P1 P2 P3 P4 P
25610 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
25620 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
25630 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
25640 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
25650 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
25660 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
25670 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
25680 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
25690 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74   KEY.  Compare t
256a0 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
256b0 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
256c0 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
256d0 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
256e0 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
256f0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
25700 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c  r ROWID .** fiel
25710 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  ds at the end..*
25720 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
25730 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
25740 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b  eater than the k
25750 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e  ey value.** then
25760 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74   jump to P2.  Ot
25770 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
25780 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
25790 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
257a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
257b0 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  T P1 P2 P3 P4 P5
257c0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
257d0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
257e0 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
257f0 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
25800 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
25810 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
25820 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
25830 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
25840 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43  KEY or ROWID.  C
25850 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
25860 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a  value against.**
25870 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
25880 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
25890 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
258a0 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
258b0 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49  Y KEY or.** ROWI
258c0 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
258d0 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
258e0 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
258f0 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
25900 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a  key value then j
25910 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74  ump to P2..** Ot
25920 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
25930 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
25940 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
25950 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
25960 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  E P1 P2 P3 P4 P5
25970 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
25980 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
25990 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
259a0 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
259b0 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
259c0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
259d0 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
259e0 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
259f0 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43  KEY or ROWID.  C
25a00 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
25a10 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a  value against.**
25a20 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
25a30 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
25a40 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
25a50 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
25a60 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49  Y KEY or.** ROWI
25a70 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
25a80 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
25a90 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
25aa0 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
25ab0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
25ac0 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a  value then jump.
25ad0 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77  ** to P2. Otherw
25ae0 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
25af0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
25b00 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
25b10 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20 20  e OP_IdxLE:     
25b20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
25b30 63 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20 20  case OP_IdxGT:  
25b40 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
25b50 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54  */.case OP_IdxLT
25b60 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
25b70 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
25b80 78 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a  xGE:  {       /*
25b90 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
25ba0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
25bb0 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
25bc0 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73  Record r;..  ass
25bd0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
25be0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
25bf0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
25c00 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
25c10 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
25c20 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
25c30 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b  pC->isOrdered );
25c40 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
25c50 43 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73  Cursor!=0);.  as
25c60 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
25c70 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
25c80 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
25c90 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ==0 || pOp->p5==
25ca0 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
25cb0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
25cc0 4e 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79  NT32 );.  r.pKey
25cd0 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
25ce0 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20  nfo;.  r.nField 
25cf0 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
25d00 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
25d10 6f 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a  ode<OP_IdxLT ){.
25d20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
25d30 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
25d40 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
25d50 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20  ==OP_IdxGT );.  
25d60 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
25d70 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55  CKED_INCRKEY | U
25d80 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d  NPACKED_PREFIX_M
25d90 41 54 43 48 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ATCH;.  }else{. 
25da0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
25db0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45  opcode==OP_IdxGE
25dc0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
25dd0 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20  =OP_IdxLT );.   
25de0 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
25df0 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48  KED_PREFIX_MATCH
25e00 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d  ;.  }.  r.aMem =
25e10 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
25e20 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
25e30 45 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20  EBUG.  { int i; 
25e40 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
25e50 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74  eld; i++) assert
25e60 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
25e70 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65  aMem[i]) ); }.#e
25e80 6e 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20  ndif.  res = 0; 
25e90 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
25ea0 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69   Only used to si
25eb0 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
25ec0 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
25ed0 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70  e3VdbeIdxKeyComp
25ee0 61 72 65 28 70 43 2c 20 26 72 2c 20 26 72 65 73  are(pC, &r, &res
25ef0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50  );.  assert( (OP
25f00 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49  _IdxLE&1)==(OP_I
25f10 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49  dxLT&1) && (OP_I
25f20 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78  dxGE&1)==(OP_Idx
25f30 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28  GT&1) );.  if( (
25f40 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d  pOp->opcode&1)==
25f50 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a  (OP_IdxLT&1) ){.
25f60 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
25f70 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
25f80 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
25f90 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20  ==OP_IdxLT );.  
25fa0 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20    res = -res;.  
25fb0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
25fc0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
25fd0 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d  OP_IdxGE || pOp-
25fe0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
25ff0 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a  T );.    res++;.
26000 20 20 7d 0a 20 20 69 66 28 20 72 65 73 3e 30 20    }.  if( res>0 
26010 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
26020 3e 70 32 20 2d 20 31 20 3b 0a 20 20 7d 0a 20 20  >p2 - 1 ;.  }.  
26030 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
26040 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20  ode: Destroy P1 
26050 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
26060 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65  Delete an entire
26070 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
26080 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
26090 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20  oot page in the 
260a0 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
260b0 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
260c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
260d0 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64   being destroyed
260e0 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
260f0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
26100 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P3==0.  If.** P
26110 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  3==1 then the ta
26120 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
26130 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
26140 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
26150 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
26160 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
26170 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
26180 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
26190 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
261a0 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e  AUTOVACUUM is en
261b0 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73  abled then it is
261c0 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61   possible that a
261d0 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65  nother root page
261e0 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76  .** might be mov
261f0 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c  ed into the newl
26200 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70  y deleted root p
26210 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  age in order to 
26220 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74  keep all.** root
26230 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75   pages contiguou
26240 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  s at the beginni
26250 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ng of the databa
26260 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a  se.  The former.
26270 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ** value of the 
26280 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d  root page that m
26290 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65  oved - its value
262a0 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65   before the move
262b0 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69   occurred -.** i
262c0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
262d0 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20  ster P2.  If no 
262e0 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e  page .** movemen
262f0 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28  t was required (
26300 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
26310 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20  e being dropped 
26320 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20  was already .** 
26330 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20  the last one in 
26340 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68  the database) th
26350 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
26360 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
26370 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  P2..** If AUTOVA
26380 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64  CUUM is disabled
26390 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20   then a zero is 
263a0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
263b0 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
263c0 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a   also: Clear.*/.
263d0 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a  case OP_Destroy:
263e0 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70   {     /* out2-p
263f0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
26400 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74  nt iMoved;.  int
26410 20 69 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70   iCnt;.  Vdbe *p
26420 56 64 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b  Vdbe;.  int iDb;
26430 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ..  assert( p->r
26440 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 23 69  eadOnly==0 );.#i
26450 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26460 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
26470 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72   iCnt = 0;.  for
26480 28 70 56 64 62 65 3d 64 62 2d 3e 70 56 64 62 65  (pVdbe=db->pVdbe
26490 3b 20 70 56 64 62 65 3b 20 70 56 64 62 65 20 3d  ; pVdbe; pVdbe =
264a0 20 70 56 64 62 65 2d 3e 70 4e 65 78 74 29 7b 0a   pVdbe->pNext){.
264b0 20 20 20 20 69 66 28 20 70 56 64 62 65 2d 3e 6d      if( pVdbe->m
264c0 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43  agic==VDBE_MAGIC
264d0 5f 52 55 4e 20 26 26 20 70 56 64 62 65 2d 3e 62  _RUN && pVdbe->b
264e0 49 73 52 65 61 64 65 72 20 0a 20 20 20 20 20 26  IsReader .     &
264f0 26 20 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d  & pVdbe->inVtabM
26500 65 74 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65  ethod<2 && pVdbe
26510 2d 3e 70 63 3e 3d 30 20 0a 20 20 20 20 29 7b 0a  ->pc>=0 .    ){.
26520 20 20 20 20 20 20 69 43 6e 74 2b 2b 3b 0a 20 20        iCnt++;.  
26530 20 20 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a 20 20    }.  }.#else.  
26540 69 43 6e 74 20 3d 20 64 62 2d 3e 6e 56 64 62 65  iCnt = db->nVdbe
26550 52 65 61 64 3b 0a 23 65 6e 64 69 66 0a 20 20 70  Read;.#endif.  p
26560 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
26570 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 69 43 6e  _Null;.  if( iCn
26580 74 3e 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  t>1 ){.    rc = 
26590 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20  SQLITE_LOCKED;. 
265a0 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f     p->errorActio
265b0 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20  n = OE_Abort;.  
265c0 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d  }else{.    iDb =
265d0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73   pOp->p3;.    as
265e0 73 65 72 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b  sert( iCnt==1 );
265f0 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 2d  .    assert( (p-
26600 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
26610 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29  yDbMask)1)<<iDb)
26620 29 21 3d 30 20 29 3b 0a 20 20 20 20 69 4d 6f 76  )!=0 );.    iMov
26630 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ed = 0;  /* Not 
26640 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f  needed.  Only to
26650 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
26660 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  ng. */.    rc = 
26670 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70  sqlite3BtreeDrop
26680 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44  Table(db->aDb[iD
26690 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  b].pBt, pOp->p1,
266a0 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70   &iMoved);.    p
266b0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
266c0 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
266d0 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69  u.i = iMoved;.#i
266e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
266f0 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20  T_AUTOVACUUM.   
26700 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
26710 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20  OK && iMoved!=0 
26720 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
26730 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62  RootPageMoved(db
26740 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70  , iDb, iMoved, p
26750 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f  Op->p1);.      /
26760 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79  * All OP_Destroy
26770 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75   operations occu
26780 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74  r on the same bt
26790 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ree */.      ass
267a0 65 72 74 28 20 72 65 73 65 74 53 63 68 65 6d 61  ert( resetSchema
267b0 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65  OnFault==0 || re
267c0 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
267d0 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20  ==iDb+1 );.     
267e0 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
267f0 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20  ult = iDb+1;.   
26800 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
26810 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
26820 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32  ode: Clear P1 P2
26830 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65   P3.**.** Delete
26840 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66   all contents of
26850 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
26860 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
26870 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20  se root page.** 
26880 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
26890 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
268a0 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b   P1.  But, unlik
268b0 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f  e Destroy, do no
268c0 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20  t.** remove the 
268d0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66  table or index f
268e0 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
268f0 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   file..**.** The
26900 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
26910 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69  ar is in the mai
26920 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
26930 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a  if P2==0.  If.**
26940 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20   P2==1 then the 
26950 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61  table to be clea
26960 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69  r is in the auxi
26970 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
26980 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75  ile.** that is u
26990 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62  sed to store tab
269a0 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67  les create using
269b0 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52   CREATE TEMPORAR
269c0 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49  Y TABLE..**.** I
269d0 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69  f the P3 value i
269e0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
269f0 20 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72   the table refer
26a00 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61  red to must be a
26a10 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c  n.** intkey tabl
26a20 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c  e (an SQL table,
26a30 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20   not an index). 
26a40 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
26a50 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20   row change .** 
26a60 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  count is increme
26a70 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
26a80 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
26a90 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
26aa0 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33  eared. .** If P3
26ab0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
26ac0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
26ad0 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20  value stored in 
26ae0 72 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a  register P3 is.*
26af0 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74  * also increment
26b00 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72  ed by the number
26b10 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
26b20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
26b30 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  red..**.** See a
26b40 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a  lso: Destroy.*/.
26b50 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b  case OP_Clear: {
26b60 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a  .  int nChange;.
26b70 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b   .  nChange = 0;
26b80 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
26b90 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61  adOnly==0 );.  a
26ba0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 21 3d  ssert( pOp->p1!=
26bb0 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  1 );.  assert( (
26bc0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
26bd0 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f  ((yDbMask)1)<<pO
26be0 70 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a 20 20  p->p2))!=0 );.  
26bf0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
26c00 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20  eClearTable(.   
26c10 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e     db->aDb[pOp->
26c20 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  p2].pBt, pOp->p1
26c30 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43  , (pOp->p3 ? &nC
26c40 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a  hange : 0).  );.
26c50 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
26c60 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  .    p->nChange 
26c70 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
26c80 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b  if( pOp->p3>0 ){
26c90 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
26ca0 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
26cb0 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
26cc0 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
26cd0 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
26ce0 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d  ->p3]);.      aM
26cf0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20  em[pOp->p3].u.i 
26d00 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
26d10 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
26d20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  ../* Opcode: Cre
26d30 61 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a  ateTable P1 P2 *
26d40 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
26d50 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62  : r[P2]=root iDb
26d60 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  =P1.**.** Alloca
26d70 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69  te a new table i
26d80 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
26d90 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
26da0 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61  0 or in the.** a
26db0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
26dc0 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
26dd0 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
26de0 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
26df0 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68   P1>1.  Write th
26e00 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
26e10 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  er of the new ta
26e20 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ble into.** regi
26e30 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  ster P2.**.** Th
26e40 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
26e50 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64  ween a table and
26e60 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69   an index is thi
26e70 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74  s:  A table must
26e80 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74  .** have a 4-byt
26e90 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e  e integer key an
26ea0 64 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74  d can have arbit
26eb0 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69  rary data.  An i
26ec0 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61  ndex.** has an a
26ed0 72 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74  rbitrary key but
26ee0 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20   no data..**.** 
26ef0 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65  See also: Create
26f00 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Index.*/./* Opco
26f10 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20  de: CreateIndex 
26f20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
26f30 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
26f40 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a  oot iDb=P1.**.**
26f50 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20   Allocate a new 
26f60 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69  index in the mai
26f70 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
26f80 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74  if P1==0 or in t
26f90 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20  he.** auxiliary 
26fa0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
26fb0 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20   P1==1 or in an 
26fc0 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
26fd0 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57  e if.** P1>1.  W
26fe0 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61  rite the root pa
26ff0 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
27000 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a   new table into.
27010 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  ** register P2..
27020 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65  **.** See docume
27030 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72  ntation on OP_Cr
27040 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64  eateTable for ad
27050 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
27060 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
27070 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20  _CreateIndex:   
27080 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
27090 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63  -prerelease */.c
270a0 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62  ase OP_CreateTab
270b0 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  le: {          /
270c0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
270d0 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b  e */.  int pgno;
270e0 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20  .  int flags;.  
270f0 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f  Db *pDb;..  pgno
27100 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
27110 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
27120 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
27130 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
27140 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44  treeMask & (((yD
27150 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70  bMask)1)<<pOp->p
27160 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  1))!=0 );.  asse
27170 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
27180 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  =0 );.  pDb = &d
27190 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b  b->aDb[pOp->p1];
271a0 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e  .  assert( pDb->
271b0 70 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  pBt!=0 );.  if( 
271c0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
271d0 43 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a 20  CreateTable ){. 
271e0 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54     /* flags = BT
271f0 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20  REE_INTKEY; */. 
27200 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45     flags = BTREE
27210 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65  _INTKEY;.  }else
27220 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54  {.    flags = BT
27230 52 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d  REE_BLOBKEY;.  }
27240 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
27250 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
27260 70 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c  pDb->pBt, &pgno,
27270 20 66 6c 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d   flags);.  pOut-
27280 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62  >u.i = pgno;.  b
27290 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
272a0 64 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20  de: ParseSchema 
272b0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
272c0 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65  * Read and parse
272d0 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f   all entries fro
272e0 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53  m the SQLITE_MAS
272f0 54 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74  TER table of dat
27300 61 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74  abase P1.** that
27310 20 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45   match the WHERE
27320 20 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a   clause P4. .**.
27330 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
27340 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65  nvokes the parse
27350 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  r to create a ne
27360 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  w virtual machin
27370 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20  e,.** then runs 
27380 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20  the new virtual 
27390 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20  machine.  It is 
273a0 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e  thus a re-entran
273b0 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  t opcode..*/.cas
273c0 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  e OP_ParseSchema
273d0 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  : {.  int iDb;. 
273e0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61   const char *zMa
273f0 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53  ster;.  char *zS
27400 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69  ql;.  InitData i
27410 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41  nitData;..  /* A
27420 6e 79 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ny prepared stat
27430 65 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b  ement that invok
27440 65 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  es this opcode w
27450 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73  ill hold mutexes
27460 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62  .  ** on every b
27470 74 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61  tree.  This is a
27480 20 70 72 65 72 65 71 75 69 73 69 74 65 20 66 6f   prerequisite fo
27490 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a  r invoking .  **
274a0 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
274b0 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66  back()..  */.#if
274c0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
274d0 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44  .  for(iDb=0; iD
274e0 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b  b<db->nDb; iDb++
274f0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  ){.    assert( i
27500 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33  Db==1 || sqlite3
27510 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28  BtreeHoldsMutex(
27520 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
27530 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  ) );.  }.#endif.
27540 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
27550 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
27560 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
27570 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
27580 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c  bHasProperty(db,
27590 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c   iDb, DB_SchemaL
275a0 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55  oaded) );.  /* U
275b0 73 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64  sed to be a cond
275c0 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20  itional */ {.   
275d0 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d   zMaster = SCHEM
275e0 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20  A_TABLE(iDb);.  
275f0 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20    initData.db = 
27600 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  db;.    initData
27610 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  .iDb = pOp->p1;.
27620 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45      initData.pzE
27630 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72  rrMsg = &p->zErr
27640 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20  Msg;.    zSql = 
27650 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
27660 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43  b,.       "SELEC
27670 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65  T name, rootpage
27680 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e  , sql FROM '%q'.
27690 25 73 20 57 48 45 52 45 20 25 73 20 4f 52 44 45  %s WHERE %s ORDE
276a0 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20  R BY rowid",.   
276b0 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d      db->aDb[iDb]
276c0 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c  .zName, zMaster,
276d0 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
276e0 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a   if( zSql==0 ){.
276f0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
27700 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c  E_NOMEM;.    }el
27710 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
27720 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d  ( db->init.busy=
27730 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  =0 );.      db->
27740 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20  init.busy = 1;. 
27750 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63       initData.rc
27760 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
27770 20 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d      assert( !db-
27780 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
27790 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
277a0 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71  te3_exec(db, zSq
277b0 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  l, sqlite3InitCa
277c0 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74  llback, &initDat
277d0 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  a, 0);.      if(
277e0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
277f0 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72   rc = initData.r
27800 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  c;.      sqlite3
27810 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29  DbFree(db, zSql)
27820 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
27830 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d  .busy = 0;.    }
27840 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
27850 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
27860 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
27870 6f 6e 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63  on(db);.  if( rc
27880 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
27890 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
278a0 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20  m;.  }.  break; 
278b0 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65   .}..#if !define
278c0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
278d0 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65  ALYZE)./* Opcode
278e0 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50  : LoadAnalysis P
278f0 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
27900 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f  Read the sqlite_
27910 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20  stat1 table for 
27920 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
27930 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74  load the content
27940 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
27950 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72  e into the inter
27960 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74  nal index hash t
27970 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c  able.  This will
27980 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e   cause.** the an
27990 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65  alysis to be use
279a0 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67  d when preparing
279b0 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
279c0 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65  queries..*/.case
279d0 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73   OP_LoadAnalysis
279e0 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
279f0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
27a00 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
27a10 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61   rc = sqlite3Ana
27a20 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f  lysisLoad(db, pO
27a30 70 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b  p->p1);.  break;
27a40 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21    .}.#endif /* !
27a50 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
27a60 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a  MIT_ANALYZE) */.
27a70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
27a80 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20  Table P1 * * P4 
27a90 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
27aa0 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
27ab0 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
27ac0 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
27ad0 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62  cribe.** the tab
27ae0 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  le named P4 in d
27af0 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
27b00 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
27b10 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  r a table.** is 
27b20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72  dropped in order
27b30 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
27b40 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
27b50 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
27b60 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
27b70 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
27b80 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
27b90 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20  P_DropTable: {. 
27ba0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
27bb0 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c  dDeleteTable(db,
27bc0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
27bd0 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
27be0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
27bf0 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34  pIndex P1 * * P4
27c00 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
27c10 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
27c20 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
27c30 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
27c40 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e  scribe.** the in
27c50 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  dex named P4 in 
27c60 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
27c70 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
27c80 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69  er an index.** i
27c90 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64  s dropped in ord
27ca0 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69  er to keep the i
27cb0 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
27cc0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
27cd0 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
27ce0 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
27cf0 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
27d00 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b   OP_DropIndex: {
27d10 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
27d20 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64  AndDeleteIndex(d
27d30 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
27d40 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
27d50 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
27d60 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a 20  ropTrigger P1 * 
27d70 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
27d80 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
27d90 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
27da0 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
27db0 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
27dc0 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20  e trigger named 
27dd0 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
27de0 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
27df0 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67 67  ed after a trigg
27e00 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  er.** is dropped
27e10 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
27e20 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
27e30 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
27e40 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
27e50 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
27e60 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
27e70 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
27e80 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69  rigger: {.  sqli
27e90 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
27ea0 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f  teTrigger(db, pO
27eb0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
27ec0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  );.  break;.}...
27ed0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
27ee0 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
27ef0 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  ECK./* Opcode: I
27f00 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32  ntegrityCk P1 P2
27f10 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44   P3 * P5.**.** D
27f20 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66  o an analysis of
27f30 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f   the currently o
27f40 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53  pen database.  S
27f50 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73  tore in.** regis
27f60 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20  ter P1 the text 
27f70 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  of an error mess
27f80 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61  age describing a
27f90 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20  ny problems..** 
27fa0 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61  If no problems a
27fb0 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20  re found, store 
27fc0 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74  a NULL in regist
27fd0 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  er P1..**.** The
27fe0 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   register P3 con
27ff0 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75  tains the maximu
28000 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f  m number of allo
28010 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41  wed errors..** A
28020 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65  t most reg(P3) e
28030 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65  rrors will be re
28040 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74  ported..** In ot
28050 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61  her words, the a
28060 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73  nalysis stops as
28070 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29   soon as reg(P1)
28080 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20   errors are .** 
28090 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69  seen.  Reg(P1) i
280a0 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
280b0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72  he number of err
280c0 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a  ors remaining..*
280d0 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61  *.** The root pa
280e0 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c  ge numbers of al
280f0 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  l tables in the 
28100 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74  database are int
28110 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69  eger.** stored i
28120 6e 20 72 65 67 28 50 31 29 2c 20 72 65 67 28 50  n reg(P1), reg(P
28130 31 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c  1+1), reg(P1+2),
28140 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65   ....  There are
28150 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f   P2 tables.** to
28160 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  tal..**.** If P5
28170 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
28180 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20  e check is done 
28190 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  on the auxiliary
281a0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
281b0 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20  e, not the main 
281c0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
281d0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
281e0 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
281f0 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72  ement the integr
28200 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61  ity_check pragma
28210 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
28220 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e  egrityCk: {.  in
28230 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a  t nRoot;      /*
28240 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
28250 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75  s to check.  (Nu
28260 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67  mber of root pag
28270 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  es.) */.  int *a
28280 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72  Root;     /* Arr
28290 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e  ay of rootpage n
282a0 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65  umbers for table
282b0 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20  s to be checked 
282c0 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
282d0 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
282e0 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  nter */.  int nE
282f0 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  rr;       /* Num
28300 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
28310 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72  ported */.  char
28320 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54   *z;        /* T
28330 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72  ext of the error
28340 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d   report */.  Mem
28350 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20   *pnErr;     /* 
28360 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67  Register keeping
28370 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73   track of errors
28380 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20   remaining */.. 
28390 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
283a0 65 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74  eader );.  nRoot
283b0 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
283c0 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b  sert( nRoot>0 );
283d0 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74  .  aRoot = sqlit
283e0 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62  e3DbMallocRaw(db
283f0 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e  , sizeof(int)*(n
28400 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28  Root+1) );.  if(
28410 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f   aRoot==0 ) goto
28420 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72   no_mem;.  asser
28430 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
28440 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
28450 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
28460 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d  .  pnErr = &aMem
28470 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
28480 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
28490 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
284a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
284b0 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d  nErr->flags & (M
284c0 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
284d0 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d  )==0 );.  pIn1 =
284e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
284f0 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52  .  for(j=0; j<nR
28500 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61  oot; j++){.    a
28510 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73  Root[j] = (int)s
28520 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
28530 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20  ue(&pIn1[j]);.  
28540 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30  }.  aRoot[j] = 0
28550 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
28560 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p5<db->nDb );. 
28570 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
28580 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
28590 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 35 29  ask)1)<<pOp->p5)
285a0 29 21 3d 30 20 29 3b 0a 20 20 7a 20 3d 20 73 71  )!=0 );.  z = sq
285b0 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 72  lite3BtreeIntegr
285c0 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62  ityCheck(db->aDb
285d0 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61  [pOp->p5].pBt, a
285e0 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20  Root, nRoot,.   
285f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69                (i
28610 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26  nt)pnErr->u.i, &
28620 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  nErr);.  sqlite3
28630 44 62 46 72 65 65 28 64 62 2c 20 61 52 6f 6f 74  DbFree(db, aRoot
28640 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20  );.  pnErr->u.i 
28650 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74  -= nErr;.  sqlit
28660 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
28670 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45  (pIn1);.  if( nE
28680 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  rr==0 ){.    ass
28690 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d  ert( z==0 );.  }
286a0 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b  else if( z==0 ){
286b0 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
286c0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
286d0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
286e0 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c  Str(pIn1, z, -1,
286f0 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71   SQLITE_UTF8, sq
28700 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d  lite3_free);.  }
28710 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
28720 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
28730 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
28740 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20  eEncoding(pIn1, 
28750 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65  encoding);.  bre
28760 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
28770 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
28780 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a  GRITY_CHECK */..
28790 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
287a0 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  tAdd P1 P2 * * *
287b0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
287c0 6f 77 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a  owset(P1)=r[P2].
287d0 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65  **.** Insert the
287e0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68   integer value h
287f0 65 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20  eld by register 
28800 50 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61  P2 into a boolea
28810 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20  n index.** held 
28820 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
28830 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69  **.** An asserti
28840 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69  on fails if P2 i
28850 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
28860 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
28870 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20  SetAdd: {       
28880 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20  /* in1, in2 */. 
28890 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
288a0 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
288b0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
288c0 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32  .  assert( (pIn2
288d0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
288e0 74 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28  t)!=0 );.  if( (
288f0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
28900 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a  M_RowSet)==0 ){.
28910 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
28920 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31  emSetRowSet(pIn1
28930 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31  );.    if( (pIn1
28940 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
28950 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20  wSet)==0 ) goto 
28960 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71  no_mem;.  }.  sq
28970 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
28980 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
28990 74 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20  t, pIn2->u.i);. 
289a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
289b0 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64  code: RowSetRead
289c0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
289d0 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
289e0 5d 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a  ]=rowset(P1).**.
289f0 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73  ** Extract the s
28a00 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72  mallest value fr
28a10 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  om boolean index
28a20 20 50 31 20 61 6e 64 20 70 75 74 20 74 68 61 74   P1 and put that
28a30 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72   value into.** r
28a40 65 67 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c  egister P3.  Or,
28a50 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65   if boolean inde
28a60 78 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c  x P1 is initiall
28a70 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50  y empty, leave P
28a80 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61  3.** unchanged a
28a90 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  nd jump to instr
28aa0 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61  uction P2..*/.ca
28ab0 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64  se OP_RowSetRead
28ac0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  : {       /* jum
28ad0 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a  p, in1, out3 */.
28ae0 20 20 69 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49    i64 val;..  pI
28af0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
28b00 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p1];.  if( (pIn1
28b10 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
28b20 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20  wSet)==0 .   || 
28b30 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
28b40 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
28b50 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b  t, &val)==0.  ){
28b60 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c  .    /* The bool
28b70 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70  ean index is emp
28b80 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ty */.    sqlite
28b90 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
28ba0 70 49 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d 20  pIn1);.    pc = 
28bb0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
28bc0 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76  else{.    /* A v
28bd0 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20  alue was pulled 
28be0 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a  from the index *
28bf0 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
28c00 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
28c10 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c  em[pOp->p3], val
28c20 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68  );.  }.  goto ch
28c30 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
28c40 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t;.}../* Opcode:
28c50 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50   RowSetTest P1 P
28c60 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70  2 P3 P4.** Synop
28c70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e  sis: if r[P3] in
28c80 20 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f   rowset(P1) goto
28c90 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
28ca0 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64  er P3 is assumed
28cb0 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69   to hold a 64-bi
28cc0 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
28cd0 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a   If register P1.
28ce0 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f  ** contains a Ro
28cf0 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20  wSet object and 
28d00 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65  that RowSet obje
28d10 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74  ct contains.** t
28d20 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e  he value held in
28d30 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67   P3, jump to reg
28d40 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77  ister P2. Otherw
28d50 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a  ise, insert the.
28d60 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33  ** integer in P3
28d70 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74   into the RowSet
28d80 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e   and continue on
28d90 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20   to the.** next 
28da0 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
28db0 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  e RowSet object 
28dc0 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72  is optimized for
28dd0 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20   the case where 
28de0 73 75 63 63 65 73 73 69 76 65 20 73 65 74 73 0a  successive sets.
28df0 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20  ** of integers, 
28e00 77 68 65 72 65 20 65 61 63 68 20 73 65 74 20 63  where each set c
28e10 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69  ontains no dupli
28e20 63 61 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a  cates. Each set.
28e30 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20  ** of values is 
28e40 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
28e50 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e  unique P4 value.
28e60 20 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a   The first set.*
28e70 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d  * must have P4==
28e80 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74  0, the final set
28e90 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74   P4=-1.  P4 must
28ea0 20 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72   be either -1 or
28eb0 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  .** non-negative
28ec0 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74  .  For non-negat
28ed0 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34  ive values of P4
28ee0 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20   only the lower 
28ef0 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69  4.** bits are si
28f00 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a  gnificant..**.**
28f10 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74   This allows opt
28f20 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20  imizations: (a) 
28f30 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65  when P4==0 there
28f40 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74   is no need to t
28f50 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65  est.** the rowse
28f60 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c  t object for P3,
28f70 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e   as it is guaran
28f80 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74  teed not to cont
28f90 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77  ain it,.** (b) w
28fa0 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65  hen P4==-1 there
28fb0 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69   is no need to i
28fc0 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c  nsert the value,
28fd0 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e   as it will.** n
28fe0 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66  ever be tested f
28ff0 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e  or, and (c) when
29000 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73   a value that is
29010 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69   part of set X i
29020 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74  s.** inserted, t
29030 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
29040 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65  to search to see
29050 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c   if the same val
29060 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  ue was.** previo
29070 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73  usly inserted as
29080 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28   part of set X (
29090 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70  only if it was p
290a0 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73  reviously.** ins
290b0 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
290c0 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29   some other set)
290d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
290e0 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20  SetTest: {      
290f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
29100 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  * jump, in1, in3
29110 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a   */.  int iSet;.
29120 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20    int exists;.. 
29130 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
29140 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
29150 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
29160 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70  .  iSet = pOp->p
29170 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  4.i;.  assert( p
29180 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In3->flags&MEM_I
29190 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  nt );..  /* If t
291a0 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67  here is anything
291b0 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f   other than a ro
291c0 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d  wset object in m
291d0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20  emory cell P1,. 
291e0 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f   ** delete it no
291f0 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65  w and initialize
29200 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74   P1 with an empt
29210 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20  y rowset.  */.  
29220 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
29230 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
29240 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
29250 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74  VdbeMemSetRowSet
29260 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20  (pIn1);.    if( 
29270 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
29280 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20  EM_RowSet)==0 ) 
29290 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
292a0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
292b0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
292c0 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  2 );.  assert( i
292d0 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e  Set==-1 || iSet>
292e0 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74  =0 );.  if( iSet
292f0 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d   ){.    exists =
29300 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
29310 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  st(pIn1->u.pRowS
29320 65 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  et, .           
29330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29340 20 20 20 20 28 75 38 29 28 69 53 65 74 3e 3d 30      (u8)(iSet>=0
29350 20 3f 20 69 53 65 74 20 26 20 30 78 66 20 3a 20   ? iSet & 0xf : 
29360 30 78 66 66 29 2c 0a 20 20 20 20 20 20 20 20 20  0xff),.         
29370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29380 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29        pIn3->u.i)
29390 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73  ;.    if( exists
293a0 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
293b0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
293c0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
293d0 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30   }.  if( iSet>=0
293e0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
293f0 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
29400 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
29410 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62  3->u.i);.  }.  b
29420 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
29430 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
29440 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65  IGGER../* Opcode
29450 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20  : Program P1 P2 
29460 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45  P3 P4 P5.**.** E
29470 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67  xecute the trigg
29480 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65  er program passe
29490 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34  d as P4 (type P4
294a0 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a  _SUBPROGRAM). .*
294b0 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73  *.** P1 contains
294c0 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
294d0 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
294e0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
294f0 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a  e first memory .
29500 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72  ** cell in an ar
29510 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73  ray of values us
29520 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20  ed as arguments 
29530 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  to the sub-progr
29540 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61  am. P2 .** conta
29550 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
29560 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68  to jump to if th
29570 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
29580 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a  rows an IGNORE .
29590 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69  ** exception usi
295a0 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66  ng the RAISE() f
295b0 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65  unction. Registe
295c0 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  r P3 contains th
295d0 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66  e address .** of
295e0 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69   a memory cell i
295f0 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65  n this (the pare
29600 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75  nt) VM that is u
29610 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  sed to allocate 
29620 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72  the .** memory r
29630 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
29640 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69  ub-vdbe at runti
29650 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  me..**.** P4 is 
29660 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
29670 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74   VM containing t
29680 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
29690 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  am..**.** If P5 
296a0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
296b0 6e 20 72 65 63 75 72 73 69 76 65 20 70 72 6f 67  n recursive prog
296c0 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69  ram invocation i
296d0 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61  s enabled..*/.ca
296e0 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b  se OP_Program: {
296f0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
29700 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20  */.  int nMem;  
29710 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
29720 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  Number of memory
29730 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73   registers for s
29740 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  ub-program */.  
29750 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20  int nByte;      
29760 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73          /* Bytes
29770 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63   of runtime spac
29780 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 73  e required for s
29790 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  ub-program */.  
297a0 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20  Mem *pRt;       
297b0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
297c0 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  ter to allocate 
297d0 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f  runtime space */
297e0 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
297f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
29800 65 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68  ed to iterate th
29810 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c  rough memory cel
29820 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e  ls */.  Mem *pEn
29830 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
29840 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63  /* Last memory c
29850 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79  ell in new array
29860 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
29870 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a  *pFrame;      /*
29880 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65 20   New vdbe frame 
29890 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f  to execute in */
298a0 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
298b0 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75  Program;   /* Su
298c0 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65  b-program to exe
298d0 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  cute */.  void *
298e0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
298f0 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74    /* Token ident
29900 69 66 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a  ifying trigger *
29910 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20  /..  pProgram = 
29920 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d  pOp->p4.pProgram
29930 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b  ;.  pRt = &aMem[
29940 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
29950 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  rt( pProgram->nO
29960 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49  p>0 );.  .  /* I
29970 66 20 74 68 65 20 70 35 20 66 6c 61 67 20 69 73  f the p5 flag is
29980 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63   clear, then rec
29990 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
299a0 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20 69 73  n of triggers is
299b0 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20   .  ** disabled 
299c0 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f  for backwards co
299d0 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70 35 20  mpatibility (p5 
299e0 69 73 20 73 65 74 20 69 66 20 74 68 69 73 20 73  is set if this s
299f0 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20  ub-program.  ** 
29a00 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67  is really a trig
29a10 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69  ger, not a forei
29a20 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61  gn key action, a
29a30 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a  nd the flag set.
29a40 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64    ** and cleared
29a50 20 62 79 20 74 68 65 20 22 50 52 41 47 4d 41 20   by the "PRAGMA 
29a60 72 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65  recursive_trigge
29a70 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63  rs" command is c
29a80 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a  lear)..  ** .  *
29a90 2a 20 49 74 20 69 73 20 72 65 63 75 72 73 69 76  * It is recursiv
29aa0 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  e invocation of 
29ab0 74 72 69 67 67 65 72 73 2c 20 61 74 20 74 68 65  triggers, at the
29ac0 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74   SQL level, that
29ad0 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c   is .  ** disabl
29ae0 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65  ed. In some case
29af0 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67  s a single trigg
29b00 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20  er may generate 
29b10 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20  more than one . 
29b20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28   ** SubProgram (
29b30 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20 6d  if the trigger m
29b40 61 79 20 62 65 20 65 78 65 63 75 74 65 64 20 77  ay be executed w
29b50 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ith more than on
29b60 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a  e different .  *
29b70 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  * ON CONFLICT al
29b80 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f  gorithm). SubPro
29b90 67 72 61 6d 20 73 74 72 75 63 74 75 72 65 73 20  gram structures 
29ba0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
29bb0 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72  a.  ** single tr
29bc0 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74  igger all have t
29bd0 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f  he same value fo
29be0 72 20 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d  r the SubProgram
29bf0 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72  .token .  ** var
29c00 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28  iable.  */.  if(
29c10 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
29c20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f  t = pProgram->to
29c30 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72  ken;.    for(pFr
29c40 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
29c50 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d  Frame && pFrame-
29c60 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d  >token!=t; pFram
29c70 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
29c80 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61  t);.    if( pFra
29c90 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  me ) break;.  }.
29ca0 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65  .  if( p->nFrame
29cb0 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  >=db->aLimit[SQL
29cc0 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45  ITE_LIMIT_TRIGGE
29cd0 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20  R_DEPTH] ){.    
29ce0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
29cf0 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  R;.    sqlite3Se
29d00 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
29d10 4d 73 67 2c 20 64 62 2c 20 22 74 6f 6f 20 6d 61  Msg, db, "too ma
29d20 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69  ny levels of tri
29d30 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29  gger recursion")
29d40 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
29d50 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20  ..  /* Register 
29d60 70 52 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  pRt is used to s
29d70 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  tore the memory 
29d80 72 65 71 75 69 72 65 64 20 74 6f 20 73 61 76 65  required to save
29d90 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20   the state.  ** 
29da0 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  of the current p
29db0 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20  rogram, and the 
29dc0 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
29dd0 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78  at runtime to ex
29de0 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74  ecute.  ** the t
29df0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20  rigger program. 
29e00 49 66 20 74 68 69 73 20 74 72 69 67 67 65 72 20  If this trigger 
29e10 68 61 73 20 62 65 65 6e 20 66 69 72 65 64 20 62  has been fired b
29e20 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20  efore, then pRt 
29e30 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79  .  ** is already
29e40 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65   allocated. Othe
29e50 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62  rwise, it must b
29e60 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20  e initialized.  
29e70 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66  */.  if( (pRt->f
29e80 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d  lags&MEM_Frame)=
29e90 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62  =0 ){.    /* Sub
29ea0 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20  Program.nMem is 
29eb0 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
29ec0 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  r of memory cell
29ed0 73 20 75 73 65 64 20 62 79 20 74 68 65 20 0a 20  s used by the . 
29ee0 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74     ** program st
29ef0 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72  ored in SubProgr
29f00 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20  am.aOp. As well 
29f10 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65  as these, one me
29f20 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c  mory.    ** cell
29f30 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
29f40 20 65 61 63 68 20 63 75 72 73 6f 72 20 75 73 65   each cursor use
29f50 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d  d by the program
29f60 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20  . Set local.    
29f70 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d  ** variable nMem
29f80 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62   (and later, Vdb
29f90 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d  eFrame.nChildMem
29fa0 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e  ) to this value.
29fb0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d  .    */.    nMem
29fc0 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65   = pProgram->nMe
29fd0 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  m + pProgram->nC
29fe0 73 72 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20  sr;.    nByte = 
29ff0 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64  ROUND8(sizeof(Vd
2a000 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20  beFrame)).      
2a010 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a          + nMem *
2a020 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20   sizeof(Mem).   
2a030 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72             + pPr
2a040 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69  ogram->nCsr * si
2a050 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 20  zeof(VdbeCursor 
2a060 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *).             
2a070 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e   + pProgram->nOn
2a080 63 65 20 2a 20 73 69 7a 65 6f 66 28 75 38 29 3b  ce * sizeof(u8);
2a090 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71  .    pFrame = sq
2a0a0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
2a0b0 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20  o(db, nByte);.  
2a0c0 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b    if( !pFrame ){
2a0d0 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
2a0e0 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  em;.    }.    sq
2a0f0 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
2a100 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52  ase(pRt);.    pR
2a110 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46  t->flags = MEM_F
2a120 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75  rame;.    pRt->u
2a130 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  .pFrame = pFrame
2a140 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76  ;..    pFrame->v
2a150 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65   = p;.    pFrame
2a160 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d  ->nChildMem = nM
2a170 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
2a180 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f  nChildCsr = pPro
2a190 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
2a1a0 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63 3b  pFrame->pc = pc;
2a1b0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65  .    pFrame->aMe
2a1c0 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20  m = p->aMem;.   
2a1d0 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20   pFrame->nMem = 
2a1e0 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72  p->nMem;.    pFr
2a1f0 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e  ame->apCsr = p->
2a200 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  apCsr;.    pFram
2a210 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e  e->nCursor = p->
2a220 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72  nCursor;.    pFr
2a230 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f  ame->aOp = p->aO
2a240 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  p;.    pFrame->n
2a250 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20  Op = p->nOp;.   
2a260 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d   pFrame->token =
2a270 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e   pProgram->token
2a280 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f  ;.    pFrame->aO
2a290 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e  nceFlag = p->aOn
2a2a0 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46 72 61  ceFlag;.    pFra
2a2b0 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20  me->nOnceFlag = 
2a2c0 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 0a 20  p->nOnceFlag;.. 
2a2d0 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46     pEnd = &VdbeF
2a2e0 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b  rameMem(pFrame)[
2a2f0 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
2a300 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d  m];.    for(pMem
2a310 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46  =VdbeFrameMem(pF
2a320 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e  rame); pMem!=pEn
2a330 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20  d; pMem++){.    
2a340 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20    pMem->flags = 
2a350 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
2a360 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20       pMem->db = 
2a370 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  db;.    }.  }els
2a380 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  e{.    pFrame = 
2a390 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20  pRt->u.pFrame;. 
2a3a0 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67     assert( pProg
2a3b0 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72  ram->nMem+pProgr
2a3c0 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65  am->nCsr==pFrame
2a3d0 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20  ->nChildMem );. 
2a3e0 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67     assert( pProg
2a3f0 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d  ram->nCsr==pFram
2a400 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a  e->nChildCsr );.
2a410 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3d 3d      assert( pc==
2a420 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20  pFrame->pc );.  
2a430 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b  }..  p->nFrame++
2a440 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  ;.  pFrame->pPar
2a450 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ent = p->pFrame;
2a460 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52  .  pFrame->lastR
2a470 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
2a480 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61  ;.  pFrame->nCha
2a490 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65  nge = p->nChange
2a4a0 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
2a4b0 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20   0;.  p->pFrame 
2a4c0 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61  = pFrame;.  p->a
2a4d0 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64  Mem = aMem = &Vd
2a4e0 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
2a4f0 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65  e)[-1];.  p->nMe
2a500 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69  m = pFrame->nChi
2a510 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72  ldMem;.  p->nCur
2a520 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d  sor = (u16)pFram
2a530 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20  e->nChildCsr;.  
2a540 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65  p->apCsr = (Vdbe
2a550 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b  Cursor **)&aMem[
2a560 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d  p->nMem+1];.  p-
2a570 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72  >aOp = aOp = pPr
2a580 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d  ogram->aOp;.  p-
2a590 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d  >nOp = pProgram-
2a5a0 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65  >nOp;.  p->aOnce
2a5b0 46 6c 61 67 20 3d 20 28 75 38 20 2a 29 26 70 2d  Flag = (u8 *)&p-
2a5c0 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73 6f  >apCsr[p->nCurso
2a5d0 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c  r];.  p->nOnceFl
2a5e0 61 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ag = pProgram->n
2a5f0 4f 6e 63 65 3b 0a 20 20 70 63 20 3d 20 2d 31 3b  Once;.  pc = -1;
2a600 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e 61 4f 6e  .  memset(p->aOn
2a610 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f  ceFlag, 0, p->nO
2a620 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20 62 72 65  nceFlag);..  bre
2a630 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2a640 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20  : Param P1 P2 * 
2a650 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
2a660 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76  pcode is only ev
2a670 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75  er present in su
2a680 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65  b-programs calle
2a690 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50  d via the .** OP
2a6a0 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63  _Program instruc
2a6b0 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c  tion. Copy a val
2a6c0 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f  ue currently sto
2a6d0 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20  red in a memory 
2a6e0 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20  .** cell of the 
2a6f0 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29  calling (parent)
2a700 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50   frame to cell P
2a710 32 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  2 in the current
2a720 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72   frames .** addr
2a730 65 73 73 20 73 70 61 63 65 2e 20 54 68 69 73 20  ess space. This 
2a740 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67  is used by trigg
2a750 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61  er programs to a
2a760 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20  ccess the new.* 
2a770 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61  .** and old.* va
2a780 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  lues..**.** The 
2a790 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 63  address of the c
2a7a0 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ell in the paren
2a7b0 74 20 66 72 61 6d 65 20 69 73 20 64 65 74 65 72  t frame is deter
2a7c0 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a  mined by adding.
2a7d0 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
2a7e0 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
2a7f0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
2a800 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
2a810 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e  to the.** callin
2a820 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73  g OP_Program ins
2a830 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
2a840 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20  e OP_Param: {   
2a850 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
2a860 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
2a870 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
2a880 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20  e;.  Mem *pIn;. 
2a890 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72   pFrame = p->pFr
2a8a0 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46  ame;.  pIn = &pF
2a8b0 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
2a8c0 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70  p1 + pFrame->aOp
2a8d0 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d  [pFrame->pc].p1]
2a8e0 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64  ;   .  sqlite3Vd
2a8f0 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
2a900 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f  (pOut, pIn, MEM_
2a910 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b  Ephem);.  break;
2a920 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69  .}..#endif /* #i
2a930 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2a940 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69  T_TRIGGER */..#i
2a950 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2a960 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a  T_FOREIGN_KEY./*
2a970 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74   Opcode: FkCount
2a980 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
2a990 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74  * Synopsis: fkct
2a9a0 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20  r[P1]+=P2.**.** 
2a9b0 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e  Increment a "con
2a9c0 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22  straint counter"
2a9d0 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20 62   by P2 (P2 may b
2a9e0 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f  e negative or po
2a9f0 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50  sitive)..** If P
2aa00 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  1 is non-zero, t
2aa10 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
2aa20 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69  traint counter i
2aa30 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a  s incremented .*
2aa40 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72 65  * (deferred fore
2aa50 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
2aa60 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c  nts). Otherwise,
2aa70 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20   if P1 is zero, 
2aa80 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  the .** statemen
2aa90 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
2aaa0 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69  remented (immedi
2aab0 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
2aac0 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f  constraints)..*/
2aad0 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74  .case OP_FkCount
2aae0 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e  er: {.  if( db->
2aaf0 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44  flags & SQLITE_D
2ab00 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64  eferFKs ){.    d
2ab10 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
2ab20 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ons += pOp->p2;.
2ab30 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
2ab40 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e  >p1 ){.    db->n
2ab50 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20  DeferredCons += 
2ab60 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
2ab70 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73  {.    p->nFkCons
2ab80 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70  traint += pOp->p
2ab90 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
2aba0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  }../* Opcode: Fk
2abb0 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a  IfZero P1 P2 * *
2abc0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2abd0 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20  if fkctr[P1]==0 
2abe0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
2abf0 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20  is opcode tests 
2ac00 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79  if a foreign key
2ac10 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
2ac20 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ter is currently
2ac30 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c   zero..** If so,
2ac40 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
2ac50 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69  tion P2. Otherwi
2ac60 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  se, fall through
2ac70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a   to the next .**
2ac80 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
2ac90 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  .** If P1 is non
2aca0 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
2acb0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
2acc0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
2acd0 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
2ace0 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65  .** is zero (the
2acf0 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73   one that counts
2ad00 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
2ad10 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29  aint violations)
2ad20 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65  . If P1 is.** ze
2ad30 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20  ro, the jump is 
2ad40 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61  taken if the sta
2ad50 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e  tement constrain
2ad60 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72  t-counter is zer
2ad70 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20  o.** (immediate 
2ad80 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
2ad90 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
2ada0 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  s)..*/.case OP_F
2adb0 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  kIfZero: {      
2adc0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2add0 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
2ade0 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65     if( db->nDefe
2adf0 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64  rredCons==0 && d
2ae00 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
2ae10 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f  ons==0 ) pc = pO
2ae20 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65  p->p2-1;.  }else
2ae30 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b  {.    if( p->nFk
2ae40 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26  Constraint==0 &&
2ae50 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
2ae60 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20  mCons==0 ) pc = 
2ae70 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20  pOp->p2-1;.  }. 
2ae80 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2ae90 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49   /* #ifndef SQLI
2aea0 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2aeb0 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  KEY */..#ifndef 
2aec0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
2aed0 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63  INCREMENT./* Opc
2aee0 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50  ode: MemMax P1 P
2aef0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2af00 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72  sis: r[P1]=max(r
2af10 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a  [P1],r[P2]).**.*
2af20 2a 20 50 31 20 69 73 20 61 20 72 65 67 69 73 74  * P1 is a regist
2af30 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66  er in the root f
2af40 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20  rame of this VM 
2af50 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20  (the root frame 
2af60 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20  is.** different 
2af70 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74  from the current
2af80 20 66 72 61 6d 65 20 69 66 20 74 68 69 73 20 69   frame if this i
2af90 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65  nstruction is be
2afa0 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20  ing executed.** 
2afb0 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f  within a sub-pro
2afc0 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76  gram). Set the v
2afd0 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
2afe0 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d   P1 to the maxim
2aff0 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75  um of .** its cu
2b000 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20  rrent value and 
2b010 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
2b020 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
2b030 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
2b040 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72   throws an error
2b050 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63   if the memory c
2b060 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69  ell is not initi
2b070 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67  ally.** an integ
2b080 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  er..*/.case OP_M
2b090 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20  emMax: {        
2b0a0 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
2b0b0 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20  Frame *pFrame;. 
2b0c0 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29   if( p->pFrame )
2b0d0 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65  {.    for(pFrame
2b0e0 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
2b0f0 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72  me->pParent; pFr
2b100 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
2b110 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d  ent);.    pIn1 =
2b120 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
2b130 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65  Op->p1];.  }else
2b140 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d  {.    pIn1 = &aM
2b150 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d  em[pOp->p1];.  }
2b160 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
2b170 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
2b180 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
2b190 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
2b1a0 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
2b1b0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69  pOp->p2];.  sqli
2b1c0 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
2b1d0 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66  rify(pIn2);.  if
2b1e0 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32  ( pIn1->u.i<pIn2
2b1f0 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31  ->u.i){.    pIn1
2b200 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e  ->u.i = pIn2->u.
2b210 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  i;.  }.  break;.
2b220 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2b230 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
2b240 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  EMENT */../* Opc
2b250 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32  ode: IfPos P1 P2
2b260 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2b270 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 67  is: if r[P1]>0 g
2b280 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20  oto P2.**.** If 
2b290 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
2b2a0 69 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72  ister P1 is 1 or
2b2b0 20 67 72 65 61 74 65 72 2c 20 6a 75 6d 70 20 74   greater, jump t
2b2c0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69  o P2..**.** It i
2b2d0 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65  s illegal to use
2b2e0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
2b2f0 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20  n on a register 
2b300 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  that does.** not
2b310 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
2b320 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69  ger.  An asserti
2b330 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65  on fault will re
2b340 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e  sult if you try.
2b350 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f  .*/.case OP_IfPo
2b360 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
2b370 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
2b380 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2b390 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2b3a0 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
2b3b0 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  nt );.  if( pIn1
2b3c0 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20  ->u.i>0 ){.     
2b3d0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
2b3e0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2b3f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e  ../* Opcode: IfN
2b400 65 67 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  eg P1 P2 * * *.*
2b410 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
2b420 5b 50 31 5d 3c 30 20 67 6f 74 6f 20 50 32 0a 2a  [P1]<0 goto P2.*
2b430 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  *.** If the valu
2b440 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
2b450 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 7a 65   is less than ze
2b460 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  ro, jump to P2. 
2b470 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
2b480 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
2b490 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
2b4a0 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
2b4b0 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
2b4c0 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2b4d0 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
2b4e0 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
2b4f0 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
2b500 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20  ase OP_IfNeg: { 
2b510 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2b520 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
2b530 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2b540 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
2b550 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
2b560 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2b570 3c 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  <0 ){.     pc = 
2b580 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
2b590 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2b5a0 4f 70 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50  Opcode: IfZero P
2b5b0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
2b5c0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 2b 3d  ynopsis: r[P1]+=
2b5d0 50 33 2c 20 69 66 20 72 5b 50 31 5d 3d 3d 30 20  P3, if r[P1]==0 
2b5e0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
2b5f0 65 20 72 65 67 69 73 74 65 72 20 50 31 20 6d 75  e register P1 mu
2b600 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
2b610 74 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65  teger.  Add lite
2b620 72 61 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a  ral P3 to the.**
2b630 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
2b640 65 72 20 50 31 2e 20 20 49 66 20 74 68 65 20 72  er P1.  If the r
2b650 65 73 75 6c 74 20 69 73 20 65 78 61 63 74 6c 79  esult is exactly
2b660 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20   0, jump to P2. 
2b670 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
2b680 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
2b690 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
2b6a0 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
2b6b0 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
2b6c0 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2b6d0 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
2b6e0 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
2b6f0 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
2b700 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b  ase OP_IfZero: {
2b710 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2b720 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
2b730 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2b740 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
2b750 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2b760 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d  ;.  pIn1->u.i +=
2b770 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20   pOp->p3;.  if( 
2b780 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a  pIn1->u.i==0 ){.
2b790 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
2b7a0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
2b7b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2b7c0 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50  : AggStep * P2 P
2b7d0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
2b7e0 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d  sis: accum=r[P3]
2b7f0 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a   step(r[P2@P5]).
2b800 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
2b810 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
2b820 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  for an aggregate
2b830 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69  .  The.** functi
2b840 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65  on has P5 argume
2b850 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20 70  nts.   P4 is a p
2b860 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75  ointer to the Fu
2b870 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75  ncDef.** structu
2b880 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69 65  re that specifie
2b890 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  s the function. 
2b8a0 20 55 73 65 20 72 65 67 69 73 74 65 72 0a 2a 2a   Use register.**
2b8b0 20 50 33 20 61 73 20 74 68 65 20 61 63 63 75 6d   P3 as the accum
2b8c0 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ulator..**.** Th
2b8d0 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61  e P5 arguments a
2b8e0 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  re taken from re
2b8f0 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74  gister P2 and it
2b900 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  s.** successors.
2b910 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53  .*/.case OP_AggS
2b920 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  tep: {.  int n;.
2b930 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
2b940 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65  pMem;.  Mem *pRe
2b950 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  c;.  sqlite3_con
2b960 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69  text ctx;.  sqli
2b970 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61  te3_value **apVa
2b980 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  l;..  n = pOp->p
2b990 35 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 3d  5;.  assert( n>=
2b9a0 30 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 26 61  0 );.  pRec = &a
2b9b0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
2b9c0 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67  apVal = p->apArg
2b9d0 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56 61  ;.  assert( apVa
2b9e0 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66  l || n==0 );.  f
2b9f0 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
2ba00 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61  , pRec++){.    a
2ba10 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2ba20 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20 61  d(pRec) );.    a
2ba30 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a  pVal[i] = pRec;.
2ba40 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
2ba50 61 6e 67 65 28 70 2c 20 70 52 65 63 29 3b 0a 20  ange(p, pRec);. 
2ba60 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ba70 6d 53 74 6f 72 65 54 79 70 65 28 70 52 65 63 29  mStoreType(pRec)
2ba80 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e  ;.  }.  ctx.pFun
2ba90 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
2baa0 63 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  c;.  assert( pOp
2bab0 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
2bac0 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
2bad0 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 63 74 78  Cursor) );.  ctx
2bae0 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26  .pMem = pMem = &
2baf0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2bb00 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63 74   pMem->n++;.  ct
2bb10 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  x.s.flags = MEM_
2bb20 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a 20  Null;.  ctx.s.z 
2bb30 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61  = 0;.  ctx.s.zMa
2bb40 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e  lloc = 0;.  ctx.
2bb50 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74  s.xDel = 0;.  ct
2bb60 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63  x.s.db = db;.  c
2bb70 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a  tx.isError = 0;.
2bb80 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 30 3b    ctx.pColl = 0;
2bb90 0a 20 20 63 74 78 2e 73 6b 69 70 46 6c 61 67 20  .  ctx.skipFlag 
2bba0 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70  = 0;.  if( ctx.p
2bbb0 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20  Func->funcFlags 
2bbc0 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  & SQLITE_FUNC_NE
2bbd0 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73  EDCOLL ){.    as
2bbe0 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70  sert( pOp>p->aOp
2bbf0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2bc00 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d  pOp[-1].p4type==
2bc10 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
2bc20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
2bc30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c  ].opcode==OP_Col
2bc40 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e  lSeq );.    ctx.
2bc50 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e  pColl = pOp[-1].
2bc60 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20  p4.pColl;.  }.  
2bc70 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65  (ctx.pFunc->xSte
2bc80 70 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61  p)(&ctx, n, apVa
2bc90 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34  l); /* IMP: R-24
2bca0 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69  505-23230 */.  i
2bcb0 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29  f( ctx.isError )
2bcc0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
2bcd0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2bce0 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
2bcf0 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
2bd00 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72  (&ctx.s));.    r
2bd10 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b  c = ctx.isError;
2bd20 0a 20 20 7d 0a 20 20 69 66 28 20 63 74 78 2e 73  .  }.  if( ctx.s
2bd30 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20 20 61  kipFlag ){.    a
2bd40 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
2bd50 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
2bd60 71 20 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70  q );.    i = pOp
2bd70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28  [-1].p1;.    if(
2bd80 20 69 20 29 20 73 71 6c 69 74 65 33 56 64 62 65   i ) sqlite3Vdbe
2bd90 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
2bda0 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 0a 20  m[i], 1);.  }.. 
2bdb0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
2bdc0 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a  elease(&ctx.s);.
2bdd0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2bde0 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c  Opcode: AggFinal
2bdf0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
2be00 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
2be10 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a  =r[P1] N=P2.**.*
2be20 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 66 69  * Execute the fi
2be30 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e  nalizer function
2be40 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
2be50 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65  e.  P1 is.** the
2be60 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
2be70 20 74 68 61 74 20 69 73 20 74 68 65 20 61 63 63   that is the acc
2be80 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65  umulator for the
2be90 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a   aggregate..**.*
2bea0 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
2beb0 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
2bec0 74 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75  that the step fu
2bed0 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64  nction takes and
2bee0 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
2bef0 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
2bf00 65 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63  ef for this func
2bf10 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a  tion.  The P2.**
2bf20 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74   argument is not
2bf30 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70   used by this op
2bf40 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c  code.  It is onl
2bf50 79 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d  y there to disam
2bf60 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74  biguate.** funct
2bf70 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61  ions that can ta
2bf80 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65  ke varying numbe
2bf90 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  rs of arguments.
2bfa0 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75    The.** P4 argu
2bfb0 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65  ment is only nee
2bfc0 64 65 64 20 66 6f 72 20 74 68 65 20 64 65 67 65  ded for the dege
2bfd0 6e 65 72 61 74 65 20 63 61 73 65 20 77 68 65 72  nerate case wher
2bfe0 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75  e.** the step fu
2bff0 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70  nction was not p
2c000 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64  reviously called
2c010 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
2c020 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a  Final: {.  Mem *
2c030 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  pMem;.  assert( 
2c040 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
2c050 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p1<=(p->nMem-p
2c060 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
2c070 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
2c080 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2c090 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
2c0a0 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41  ~(MEM_Null|MEM_A
2c0b0 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20  gg))==0 );.  rc 
2c0c0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
2c0d0 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70  Finalize(pMem, p
2c0e0 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20  Op->p4.pFunc);. 
2c0f0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73   if( rc ){.    s
2c100 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2c110 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2c120 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
2c130 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29  alue_text(pMem))
2c140 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
2c150 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
2c160 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67  g(pMem, encoding
2c170 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
2c180 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a  BLOBSIZE(pMem);.
2c190 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
2c1a0 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29  eMemTooBig(pMem)
2c1b0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
2c1c0 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
2c1d0 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
2c1e0 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a  LITE_OMIT_WAL./*
2c1f0 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f   Opcode: Checkpo
2c200 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  int P1 P2 P3 * *
2c210 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e  .**.** Checkpoin
2c220 74 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 54  t database P1. T
2c230 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69  his is a no-op i
2c240 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72  f P1 is not curr
2c250 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20  ently in.** WAL 
2c260 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20  mode. Parameter 
2c270 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c  P2 is one of SQL
2c280 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50  ITE_CHECKPOINT_P
2c290 41 53 53 49 56 45 2c 20 46 55 4c 4c 0a 2a 2a 20  ASSIVE, FULL.** 
2c2a0 6f 72 20 52 45 53 54 41 52 54 2e 20 20 57 72 69  or RESTART.  Wri
2c2b0 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d  te 1 or 0 into m
2c2c0 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63 68  em[P3] if the ch
2c2d0 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e 73  eckpoint returns
2c2e0 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20  .** SQLITE_BUSY 
2c2f0 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74 69  or not, respecti
2c300 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68 65  vely.  Write the
2c310 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
2c320 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61   in the.** WAL a
2c330 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f  fter the checkpo
2c340 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b  int into mem[P3+
2c350 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65  1] and the numbe
2c360 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e  r of pages.** in
2c370 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 68 61   the WAL that ha
2c380 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69  ve been checkpoi
2c390 6e 74 65 64 20 61 66 74 65 72 20 74 68 65 20 63  nted after the c
2c3a0 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d  heckpoint.** com
2c3b0 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b  pletes into mem[
2c3c0 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72 20  P3+2].  However 
2c3d0 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d  on an error, mem
2c3e0 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65  [P3+1] and.** me
2c3f0 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69 74  m[P3+2] are init
2c400 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a  ialized to -1..*
2c410 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b 70  /.case OP_Checkp
2c420 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b  oint: {.  int i;
2c430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c440 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
2c450 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
2c460 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20 20  nt aRes[3];     
2c470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2c480 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d  * Results */.  M
2c490 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20  em *pMem;       
2c4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2c4b0 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74 73 20  * Write results 
2c4c0 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72  here */..  asser
2c4d0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
2c4e0 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20 3d  0 );.  aRes[0] =
2c4f0 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20   0;.  aRes[1] = 
2c500 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20  aRes[2] = -1;.  
2c510 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
2c520 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
2c530 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20  NT_PASSIVE.     
2c540 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
2c550 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
2c560 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70  FULL.       || p
2c570 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
2c580 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52  HECKPOINT_RESTAR
2c590 54 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  T.  );.  rc = sq
2c5a0 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
2c5b0 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
2c5c0 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20  ->p2, &aRes[1], 
2c5d0 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28  &aRes[2]);.  if(
2c5e0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
2c5f0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
2c600 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73  ITE_OK;.    aRes
2c610 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66  [0] = 1;.  }.  f
2c620 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26  or(i=0, pMem = &
2c630 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69  aMem[pOp->p3]; i
2c640 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29  <3; i++, pMem++)
2c650 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2c660 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65  eMemSetInt64(pMe
2c670 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29  m, (i64)aRes[i])
2c680 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61  ;.  }    .  brea
2c690 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a  k;.};  .#endif..
2c6a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2c6b0 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70  MIT_PRAGMA./* Op
2c6c0 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64  code: JournalMod
2c6d0 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
2c6e0 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20  *.** Change the 
2c6f0 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20  journal mode of 
2c700 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 50  database P1 to P
2c710 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e  3. P3 must be on
2c720 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45  e of the.** PAGE
2c730 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58  R_JOURNALMODE_XX
2c740 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61  X values. If cha
2c750 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68  nging between th
2c760 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61  e various rollba
2c770 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c  ck.** modes (del
2c780 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70  ete, truncate, p
2c790 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20  ersist, off and 
2c7a0 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73  memory), this is
2c7b0 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65   a simple.** ope
2c7c0 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73  ration. No IO is
2c7d0 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a   required..**.**
2c7e0 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74   If changing int
2c7f0 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20  o or out of WAL 
2c800 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64 75  mode the procedu
2c810 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c  re is more compl
2c820 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72  icated..**.** Wr
2c830 69 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e  ite a string con
2c840 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61  taining the fina
2c850 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74  l journal-mode t
2c860 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
2c870 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61  /.case OP_Journa
2c880 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f  lMode: {    /* o
2c890 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
2c8a0 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20  /.  Btree *pBt; 
2c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8c0 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20      /* Btree to 
2c8d0 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d  change journal m
2c8e0 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65  ode of */.  Page
2c8f0 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20  r *pPager;      
2c900 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
2c910 61 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  ager associated 
2c920 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e  with pBt */.  in
2c930 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20  t eNew;         
2c940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2c950 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   New journal mod
2c960 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b  e */.  int eOld;
2c970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c980 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c         /* The ol
2c990 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a  d journal mode *
2c9a0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
2c9b0 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73  _OMIT_WAL.  cons
2c9c0 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d  t char *zFilenam
2c9d0 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
2c9e0 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ame of database 
2c9f0 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20  file for pPager 
2ca00 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 65 4e 65  */.#endif..  eNe
2ca10 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  w = pOp->p3;.  a
2ca20 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47  ssert( eNew==PAG
2ca30 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44  ER_JOURNALMODE_D
2ca40 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c  ELETE .       ||
2ca50 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2ca60 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54  RNALMODE_TRUNCAT
2ca70 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  E .       || eNe
2ca80 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2ca90 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20  MODE_PERSIST .  
2caa0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2cab0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2cac0 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  OFF.       || eN
2cad0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2cae0 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20  LMODE_MEMORY.   
2caf0 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2cb00 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2cb10 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  AL.       || eNe
2cb20 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2cb30 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a  MODE_QUERY.  );.
2cb40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2cb50 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2cb60 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
2cb70 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2cb80 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20  ==0 );..  pBt = 
2cb90 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
2cba0 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d  .pBt;.  pPager =
2cbb0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
2cbc0 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20  er(pBt);.  eOld 
2cbd0 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 47 65  = sqlite3PagerGe
2cbe0 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2cbf0 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77  ger);.  if( eNew
2cc00 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2cc10 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77  ODE_QUERY ) eNew
2cc20 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21   = eOld;.  if( !
2cc30 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f  sqlite3PagerOkTo
2cc40 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64  ChangeJournalMod
2cc50 65 28 70 50 61 67 65 72 29 20 29 20 65 4e 65 77  e(pPager) ) eNew
2cc60 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65   = eOld;..#ifnde
2cc70 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2cc80 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20  L.  zFilename = 
2cc90 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65  sqlite3PagerFile
2cca0 6e 61 6d 65 28 70 50 61 67 65 72 2c 20 31 29 3b  name(pPager, 1);
2ccb0 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c  ..  /* Do not al
2ccc0 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f 6e  low a transition
2ccd0 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65   to journal_mode
2cce0 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61 62  =WAL for a datab
2ccf0 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70  ase.  ** in temp
2cd00 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f 72  orary storage or
2cd10 20 69 66 20 74 68 65 20 56 46 53 20 64 6f 65 73   if the VFS does
2cd20 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68 61   not support sha
2cd30 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f  red memory .  */
2cd40 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47  .  if( eNew==PAG
2cd50 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2cd60 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74 65  AL.   && (sqlite
2cd70 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e  3Strlen30(zFilen
2cd80 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20 20  ame)==0         
2cd90 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a    /* Temp file *
2cda0 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71 6c  /.       || !sql
2cdb0 69 74 65 33 50 61 67 65 72 57 61 6c 53 75 70 70  ite3PagerWalSupp
2cdc0 6f 72 74 65 64 28 70 50 61 67 65 72 29 29 20 20  orted(pPager))  
2cdd0 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65   /* No shared-me
2cde0 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a  mory support */.
2cdf0 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20    ){.    eNew = 
2ce00 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  eOld;.  }..  if(
2ce10 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20   (eNew!=eOld).  
2ce20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52   && (eOld==PAGER
2ce30 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2ce40 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2ce50 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29  JOURNALMODE_WAL)
2ce60 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64  .  ){.    if( !d
2ce70 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c  b->autoCommit ||
2ce80 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31   db->nVdbeRead>1
2ce90 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
2cea0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
2ceb0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
2cec0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2ced0 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20 20 20   db, .          
2cee0 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25  "cannot change %
2cef0 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20  s wal mode from 
2cf00 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
2cf10 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  tion",.         
2cf20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f   (eNew==PAGER_JO
2cf30 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20  URNALMODE_WAL ? 
2cf40 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66  "into" : "out of
2cf50 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  ").      );.    
2cf60 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 65 6c    break;.    }el
2cf70 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20  se{. .      if( 
2cf80 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
2cf90 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20  NALMODE_WAL ){. 
2cfa0 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61         /* If lea
2cfb0 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63  ving WAL mode, c
2cfc0 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c  lose the log fil
2cfd0 65 2e 20 49 66 20 73 75 63 63 65 73 73 66 75 6c  e. If successful
2cfe0 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20  , the call.     
2cff0 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c     ** to PagerCl
2d000 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f  oseWal() checkpo
2d010 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73  ints and deletes
2d020 20 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64   the write-ahead
2d030 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a  -log .        **
2d040 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53   file. An EXCLUS
2d050 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69  IVE lock may sti
2d060 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68  ll be held on th
2d070 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
2d080 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65  .        ** afte
2d090 72 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 72  r a successful r
2d0a0 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20  eturn. .        
2d0b0 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  */.        rc = 
2d0c0 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73  sqlite3PagerClos
2d0d0 65 57 61 6c 28 70 50 61 67 65 72 29 3b 0a 20 20  eWal(pPager);.  
2d0e0 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
2d0f0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
2d100 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65       sqlite3Page
2d110 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rSetJournalMode(
2d120 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20  pPager, eNew);. 
2d130 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
2d140 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50  else if( eOld==P
2d150 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2d160 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20  _MEMORY ){.     
2d170 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61     /* Cannot tra
2d180 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79  nsition directly
2d190 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20   from MEMORY to 
2d1a0 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f  WAL.  Use mode O
2d1b0 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73  FF.        ** as
2d1c0 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65   an intermediate
2d1d0 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69   */.        sqli
2d1e0 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
2d1f0 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50  alMode(pPager, P
2d200 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2d210 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20  _OFF);.      }. 
2d220 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20   .      /* Open 
2d230 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  a transaction on
2d240 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2d250 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f  le. Regardless o
2d260 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20  f the journal.  
2d270 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69      ** mode, thi
2d280 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c  s transaction al
2d290 77 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c  ways uses a roll
2d2a0 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20  back journal..  
2d2b0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
2d2c0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
2d2d0 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d  eIsInTrans(pBt)=
2d2e0 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  =0 );.      if( 
2d2f0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2d300 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
2d310 6c 69 74 65 33 42 74 72 65 65 53 65 74 56 65 72  lite3BtreeSetVer
2d320 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d  sion(pBt, (eNew=
2d330 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2d340 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29  DE_WAL ? 2 : 1))
2d350 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
2d360 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66    }.#endif /* if
2d370 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2d380 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72  _WAL */..  if( r
2d390 63 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20  c ){.    eNew = 
2d3a0 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e 65 77  eOld;.  }.  eNew
2d3b0 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 53   = sqlite3PagerS
2d3c0 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
2d3d0 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20  ager, eNew);..  
2d3e0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
2d3f0 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66  ->p2];.  pOut->f
2d400 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d  lags = MEM_Str|M
2d410 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
2d420 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  rm;.  pOut->z = 
2d430 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a  (char *)sqlite3J
2d440 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65  ournalModename(e
2d450 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  New);.  pOut->n 
2d460 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
2d470 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f  0(pOut->z);.  pO
2d480 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
2d490 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33  _UTF8;.  sqlite3
2d4a0 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
2d4b0 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e  ng(pOut, encodin
2d4c0 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a  g);.  break;.};.
2d4d0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2d4e0 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a  _OMIT_PRAGMA */.
2d4f0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2d500 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d  LITE_OMIT_VACUUM
2d510 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
2d520 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48  LITE_OMIT_ATTACH
2d530 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63  )./* Opcode: Vac
2d540 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  uum * * * * *.**
2d550 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65  .** Vacuum the e
2d560 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e 20  ntire database. 
2d570 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c   This opcode wil
2d580 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20 76 69  l cause other vi
2d590 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65  rtual.** machine
2d5a0 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 20  s to be created 
2d5b0 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61 79  and run.  It may
2d5c0 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 66   not be called f
2d5d0 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20  rom within.** a 
2d5e0 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a  transaction..*/.
2d5f0 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20  case OP_Vacuum: 
2d600 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  {.  assert( p->r
2d610 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
2d620 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56  rc = sqlite3RunV
2d630 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73  acuum(&p->zErrMs
2d640 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b  g, db);.  break;
2d650 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21  .}.#endif..#if !
2d660 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2d670 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a  MIT_AUTOVACUUM).
2d680 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56  /* Opcode: IncrV
2d690 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20  acuum P1 P2 * * 
2d6a0 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20  *.**.** Perform 
2d6b0 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66  a single step of
2d6c0 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c   the incremental
2d6d0 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72   vacuum procedur
2d6e0 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64  e on.** the P1 d
2d6f0 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20  atabase. If the 
2d700 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73  vacuum has finis
2d710 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  hed, jump to ins
2d720 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20  truction.** P2. 
2d730 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20  Otherwise, fall 
2d740 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2d750 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2d760 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72  .*/.case OP_Incr
2d770 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20  Vacuum: {       
2d780 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74   /* jump */.  Bt
2d790 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73  ree *pBt;..  ass
2d7a0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2d7b0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
2d7c0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2d7d0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
2d7e0 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70  (((yDbMask)1)<<p
2d7f0 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20  Op->p1))!=0 );. 
2d800 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
2d810 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 42 74  Only==0 );.  pBt
2d820 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
2d830 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20  p1].pBt;.  rc = 
2d840 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72  sqlite3BtreeIncr
2d850 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 69  Vacuum(pBt);.  i
2d860 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  f( rc==SQLITE_DO
2d870 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  NE ){.    pc = p
2d880 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
2d890 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
2d8a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2d8b0 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
2d8c0 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20  : Expire P1 * * 
2d8d0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20  * *.**.** Cause 
2d8e0 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74  precompiled stat
2d8f0 65 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65  ements to become
2d900 20 65 78 70 69 72 65 64 2e 20 41 6e 20 65 78 70   expired. An exp
2d910 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a  ired statement.*
2d920 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20  * fails with an 
2d930 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53 51  error code of SQ
2d940 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 66 20 69  LITE_SCHEMA if i
2d950 74 20 69 73 20 65 76 65 72 20 65 78 65 63 75 74  t is ever execut
2d960 65 64 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69  ed .** (via sqli
2d970 74 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20  te3_step())..** 
2d980 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20  .** If P1 is 0, 
2d990 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61  then all SQL sta
2d9a0 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65  tements become e
2d9b0 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69 73  xpired. If P1 is
2d9c0 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68   non-zero,.** th
2d9d0 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72  en only the curr
2d9e0 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
2d9f0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 66 66  statement is aff
2da00 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20  ected. .*/.case 
2da10 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69  OP_Expire: {.  i
2da20 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  f( !pOp->p1 ){. 
2da30 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
2da40 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
2da50 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  ts(db);.  }else{
2da60 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
2da70 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
2da80 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
2da90 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
2daa0 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CACHE./* Opcode:
2dab0 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32   TableLock P1 P2
2dac0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
2dad0 70 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f  psis: iDb=P1 roo
2dae0 74 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a  t=P2 write=P3.**
2daf0 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63  .** Obtain a loc
2db00 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61  k on a particula
2db10 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e  r table. This in
2db20 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c  struction is onl
2db30 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74  y used when.** t
2db40 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
2db50 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
2db60 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ed. .**.** P1 is
2db70 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
2db80 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71  e database in sq
2db90 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74  lite3.aDb[] of t
2dba0 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f  he database.** o
2dbb0 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b  n which the lock
2dbc0 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41   is acquired.  A
2dbd0 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74   readlock is obt
2dbe0 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f  ained if P3==0 o
2dbf0 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63  r.** a write loc
2dc00 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a  k if P3==1..**.*
2dc10 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P2 contains th
2dc20 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
2dc30 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b  he table to lock
2dc40 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61  ..**.** P4 conta
2dc50 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ins a pointer to
2dc60 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
2dc70 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63   table being loc
2dc80 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  ked. This is onl
2dc90 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e  y.** used to gen
2dca0 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d  erate an error m
2dcb0 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f  essage if the lo
2dcc0 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74  ck cannot be obt
2dcd0 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ained..*/.case O
2dce0 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20  P_TableLock: {. 
2dcf0 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20   u8 isWriteLock 
2dd00 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20  = (u8)pOp->p3;. 
2dd10 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b   if( isWriteLock
2dd20 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67   || 0==(db->flag
2dd30 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  s&SQLITE_ReadUnc
2dd40 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20  ommitted) ){.   
2dd50 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70   int p1 = pOp->p
2dd60 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20  1; .    assert( 
2dd70 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e  p1>=0 && p1<db->
2dd80 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72  nDb );.    asser
2dd90 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
2dda0 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
2ddb0 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 20  <<p1))!=0 );.   
2ddc0 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65   assert( isWrite
2ddd0 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69  Lock==0 || isWri
2dde0 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20  teLock==1 );.   
2ddf0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2de00 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e  eeLockTable(db->
2de10 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70  aDb[p1].pBt, pOp
2de20 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63  ->p2, isWriteLoc
2de30 6b 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26  k);.    if( (rc&
2de40 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f  0xFF)==SQLITE_LO
2de50 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 63 6f  CKED ){.      co
2de60 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f  nst char *z = pO
2de70 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73  p->p4.z;.      s
2de80 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2de90 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2dea0 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65   "database table
2deb0 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c   is locked: %s",
2dec0 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   z);.    }.  }. 
2ded0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2dee0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2def0 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a  SHARED_CACHE */.
2df00 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2df10 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2df20 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65  E./* Opcode: VBe
2df30 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  gin * * * P4 *.*
2df40 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
2df50 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73   pointer to an s
2df60 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
2df70 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61  cture. If so, ca
2df80 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69  ll the .** xBegi
2df90 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61  n method for tha
2dfa0 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  t table..**.** A
2dfb0 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20  lso, whether or 
2dfc0 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20 63  not P4 is set, c
2dfd0 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20 69  heck that this i
2dfe0 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c  s not being call
2dff0 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69  ed from.** withi
2e000 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20  n a callback to 
2e010 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2e020 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20  xSync() method. 
2e030 49 66 20 69 74 20 69 73 2c 20 74 68 65 20 65 72  If it is, the er
2e040 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c  ror.** code will
2e050 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54   be set to SQLIT
2e060 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73  E_LOCKED..*/.cas
2e070 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20  e OP_VBegin: {. 
2e080 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a   VTable *pVTab;.
2e090 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70    pVTab = pOp->p
2e0a0 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20  4.pVtab;.  rc = 
2e0b0 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
2e0c0 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69  (db, pVTab);.  i
2e0d0 66 28 20 70 56 54 61 62 20 29 20 73 71 6c 69 74  f( pVTab ) sqlit
2e0e0 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
2e0f0 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70 56 74  sg(p, pVTab->pVt
2e100 61 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ab);.  break;.}.
2e110 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2e120 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2e130 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2e140 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2e150 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2e160 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a 20  e: VCreate P1 * 
2e170 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2e180 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
2e190 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
2e1a0 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 43  n database P1. C
2e1b0 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65 20  all the xCreate 
2e1c0 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74 68  method.** for th
2e1d0 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  at table..*/.cas
2e1e0 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a  e OP_VCreate: {.
2e1f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
2e200 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c  abCallCreate(db,
2e210 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2e220 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67  4.z, &p->zErrMsg
2e230 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
2e240 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2e250 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2e260 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2e270 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2e280 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
2e290 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a   VDestroy P1 * *
2e2a0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
2e2b0 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
2e2c0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
2e2d0 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 43   database P1.  C
2e2e0 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79  all the xDestroy
2e2f0 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68   method.** of th
2e300 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  at table..*/.cas
2e310 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b  e OP_VDestroy: {
2e320 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
2e330 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20 73  od = 2;.  rc = s
2e340 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65  qlite3VtabCallDe
2e350 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70  stroy(db, pOp->p
2e360 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
2e370 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
2e380 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
2e390 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2e3a0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2e3b0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
2e3c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2e3d0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2e3e0 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a  de: VOpen P1 * *
2e3f0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
2e400 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
2e410 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
2e420 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
2e430 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
2e440 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72  ..** P1 is a cur
2e450 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69  sor number.  Thi
2e460 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61  s opcode opens a
2e470 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76   cursor to the v
2e480 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  irtual.** table 
2e490 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20  and stores that 
2e4a0 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f  cursor in P1..*/
2e4b0 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20  .case OP_VOpen: 
2e4c0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
2e4d0 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pCur;.  sqlite3_
2e4e0 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74  vtab_cursor *pVt
2e4f0 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69  abCursor;.  sqli
2e500 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2e510 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  .  sqlite3_modul
2e520 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61  e *pModule;..  a
2e530 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
2e540 64 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d 20  der );.  pCur = 
2e550 30 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72  0;.  pVtabCursor
2e560 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20   = 0;.  pVtab = 
2e570 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
2e580 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
2e590 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  = (sqlite3_modul
2e5a0 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e *)pVtab->pModu
2e5b0 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56 74  le;.  assert(pVt
2e5c0 61 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a  ab && pModule);.
2e5d0 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
2e5e0 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56  xOpen(pVtab, &pV
2e5f0 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71  tabCursor);.  sq
2e600 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
2e610 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
2e620 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
2e630 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49  ==rc ){.    /* I
2e640 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65  nitialize sqlite
2e650 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61  3_vtab_cursor ba
2e660 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20  se class */.    
2e670 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
2e680 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20  ab = pVtab;..   
2e690 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76   /* Initialize v
2e6a0 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63  dbe cursor objec
2e6b0 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20  t */.    pCur = 
2e6c0 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
2e6d0 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31  , pOp->p1, 0, -1
2e6e0 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70 43  , 0);.    if( pC
2e6f0 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75 72  ur ){.      pCur
2e700 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20  ->pVtabCursor = 
2e710 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 20  pVtabCursor;.   
2e720 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
2e730 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
2e740 20 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c   1;.      pModul
2e750 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43  e->xClose(pVtabC
2e760 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
2e770 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2e780 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2e790 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2e7a0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2e7b0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2e7c0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2e7d0 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50 33  VFilter P1 P2 P3
2e7e0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
2e7f0 73 3a 20 69 50 6c 61 6e 3d 72 5b 50 33 5d 20 7a  s: iPlan=r[P3] z
2e800 50 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20  Plan='P4'.**.** 
2e810 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P1 is a cursor o
2e820 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65  pened using VOpe
2e830 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64  n.  P2 is an add
2e840 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
2e850 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72  if.** the filter
2e860 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73  ed result set is
2e870 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34   empty..**.** P4
2e880 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20   is either NULL 
2e890 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  or a string that
2e8a0 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62   was generated b
2e8b0 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  y the xBestIndex
2e8c0 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  .** method of th
2e8d0 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69  e module.  The i
2e8e0 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
2e8f0 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69   the P4 string i
2e900 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65  s left.** to the
2e910 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
2e920 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
2e930 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
2e940 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  s the xFilter me
2e950 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74  thod on the virt
2e960 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66  ual table specif
2e970 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54  ied.** by P1.  T
2e980 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79  he integer query
2e990 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20   plan parameter 
2e9a0 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74  to xFilter is st
2e9b0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
2e9c0 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72  .** P3. Register
2e9d0 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65   P3+1 stores the
2e9e0 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20   argc parameter 
2e9f0 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  to be passed to 
2ea00 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d  the.** xFilter m
2ea10 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73  ethod. Registers
2ea20 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63   P3+2..P3+1+argc
2ea30 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a   are the argc.**
2ea40 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61   additional para
2ea50 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65  meters which are
2ea60 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46   passed to.** xF
2ea70 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52  ilter as argv. R
2ea80 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63  egister P3+2 bec
2ea90 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65  omes argv[0] whe
2eaa0 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c  n passed to xFil
2eab0 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d  ter..**.** A jum
2eac0 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20  p is made to P2 
2ead0 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  if the result se
2eae0 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e  t after filterin
2eaf0 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79  g would be empty
2eb00 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69  ..*/.case OP_VFi
2eb10 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  lter: {   /* jum
2eb20 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b  p */.  int nArg;
2eb30 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20  .  int iQuery;. 
2eb40 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
2eb50 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
2eb60 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20    Mem *pQuery;. 
2eb70 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73   Mem *pArgc;.  s
2eb80 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
2eb90 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
2eba0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2ebb0 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75  *pVtab;.  VdbeCu
2ebc0 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e  rsor *pCur;.  in
2ebd0 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a  t res;.  int i;.
2ebe0 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a    Mem **apArg;..
2ebf0 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d    pQuery = &aMem
2ec00 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72  [pOp->p3];.  pAr
2ec10 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b  gc = &pQuery[1];
2ec20 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
2ec30 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2ec40 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2ec50 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52  d(pQuery) );.  R
2ec60 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
2ec70 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a  p->p3, pQuery);.
2ec80 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
2ec90 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
2eca0 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70   pVtabCursor = p
2ecb0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2ecc0 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74 61  ;.  pVtab = pVta
2ecd0 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
2ece0 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
2ecf0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f  b->pModule;..  /
2ed00 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78  * Grab the index
2ed10 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63   number and argc
2ed20 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
2ed30 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79   assert( (pQuery
2ed40 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29  ->flags&MEM_Int)
2ed50 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c  !=0 && pArgc->fl
2ed60 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
2ed70 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41    nArg = (int)pA
2ed80 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65  rgc->u.i;.  iQue
2ed90 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79  ry = (int)pQuery
2eda0 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ->u.i;..  /* Inv
2edb0 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20  oke the xFilter 
2edc0 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20  method */.  {.  
2edd0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61    res = 0;.    a
2ede0 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pArg = p->apArg;
2edf0 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20  .    for(i = 0; 
2ee00 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
2ee10 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26      apArg[i] = &
2ee20 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20  pArgc[i+1];.    
2ee30 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2ee40 53 74 6f 72 65 54 79 70 65 28 61 70 41 72 67 5b  StoreType(apArg[
2ee50 69 5d 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  i]);.    }..    
2ee60 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
2ee70 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  = 1;.    rc = pM
2ee80 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70  odule->xFilter(p
2ee90 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65  VtabCursor, iQue
2eea0 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e  ry, pOp->p4.z, n
2eeb0 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20  Arg, apArg);.   
2eec0 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
2eed0 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 0;.    sqlite
2eee0 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
2eef0 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
2ef00 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2ef10 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  OK ){.      res 
2ef20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
2ef30 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2ef40 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 72 65 73    }..    if( res
2ef50 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
2ef60 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
2ef70 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75  }.  }.  pCur->nu
2ef80 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72  llRow = 0;..  br
2ef90 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2efa0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2efb0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2efc0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2efd0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2efe0 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d  * Opcode: VColum
2eff0 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  n P1 P2 P3 * *.*
2f000 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
2f010 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a  ]=vcolumn(P2).**
2f020 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61  .** Store the va
2f030 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68  lue of the P2-th
2f040 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68   column of.** th
2f050 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72  e row of the vir
2f060 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20  tual-table that 
2f070 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f  the .** P1 curso
2f080 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f  r is pointing to
2f090 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
2f0a0 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  3..*/.case OP_VC
2f0b0 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74  olumn: {.  sqlit
2f0c0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
2f0d0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
2f0e0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
2f0f0 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20  .  Mem *pDest;. 
2f100 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
2f110 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64   sContext;..  Vd
2f120 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d  beCursor *pCur =
2f130 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2f140 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2f150 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
2f160 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2f170 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
2f180 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
2f190 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65  Cursor) );.  pDe
2f1a0 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  st = &aMem[pOp->
2f1b0 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
2f1c0 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74  oChange(p, pDest
2f1d0 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
2f1e0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71  ullRow ){.    sq
2f1f0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
2f200 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
2f210 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
2f220 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  ab = pCur->pVtab
2f230 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
2f240 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
2f250 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
2f260 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  ert( pModule->xC
2f270 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65  olumn );.  memse
2f280 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20  t(&sContext, 0, 
2f290 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29  sizeof(sContext)
2f2a0 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74  );..  /* The out
2f2b0 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72  put cell may alr
2f2c0 65 61 64 79 20 68 61 76 65 20 61 20 62 75 66 66  eady have a buff
2f2d0 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f  er allocated. Mo
2f2e0 76 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 72  ve.  ** the curr
2f2f0 65 6e 74 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20  ent contents to 
2f300 73 43 6f 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e  sContext.s so in
2f310 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66   case the user-f
2f320 75 6e 63 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61  unction .  ** ca
2f330 6e 20 75 73 65 20 74 68 65 20 61 6c 72 65 61 64  n use the alread
2f340 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  y allocated buff
2f350 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c  er instead of al
2f360 6c 6f 63 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a  locating a .  **
2f370 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20   new one..  */. 
2f380 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
2f390 6f 76 65 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c  ove(&sContext.s,
2f3a0 20 70 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65   pDest);.  MemSe
2f3b0 74 54 79 70 65 46 6c 61 67 28 26 73 43 6f 6e 74  tTypeFlag(&sCont
2f3c0 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  ext.s, MEM_Null)
2f3d0 3b 0a 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  ;..  rc = pModul
2f3e0 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d  e->xColumn(pCur-
2f3f0 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 73  >pVtabCursor, &s
2f400 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32  Context, pOp->p2
2f410 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
2f420 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
2f430 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73 43  pVtab);.  if( sC
2f440 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20 29  ontext.isError )
2f450 7b 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74  {.    rc = sCont
2f460 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d  ext.isError;.  }
2f470 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20  ..  /* Copy the 
2f480 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75  result of the fu
2f490 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 50 33  nction to the P3
2f4a0 20 72 65 67 69 73 74 65 72 2e 20 57 65 0a 20 20   register. We.  
2f4b0 2a 2a 20 64 6f 20 74 68 69 73 20 72 65 67 61 72  ** do this regar
2f4c0 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
2f4d0 20 6f 72 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72   or not an error
2f4e0 20 6f 63 63 75 72 72 65 64 20 74 6f 20 65 6e 73   occurred to ens
2f4f0 75 72 65 20 61 6e 79 0a 20 20 2a 2a 20 64 79 6e  ure any.  ** dyn
2f500 61 6d 69 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  amic allocation 
2f510 69 6e 20 73 43 6f 6e 74 65 78 74 2e 73 20 28 61  in sContext.s (a
2f520 20 4d 65 6d 20 73 74 72 75 63 74 29 20 69 73 20   Mem struct) is 
2f530 20 72 65 6c 65 61 73 65 64 2e 0a 20 20 2a 2f 0a   released..  */.
2f540 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
2f550 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 73 43 6f  ngeEncoding(&sCo
2f560 6e 74 65 78 74 2e 73 2c 20 65 6e 63 6f 64 69 6e  ntext.s, encodin
2f570 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  g);.  sqlite3Vdb
2f580 65 4d 65 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20  eMemMove(pDest, 
2f590 26 73 43 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20  &sContext.s);.  
2f5a0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
2f5b0 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a  Op->p3, pDest);.
2f5c0 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
2f5d0 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20  BSIZE(pDest);.. 
2f5e0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
2f5f0 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29  MemTooBig(pDest)
2f600 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
2f610 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
2f620 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2f630 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2f640 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2f650 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2f660 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2f670 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31  Opcode: VNext P1
2f680 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2f690 41 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20  Advance virtual 
2f6a0 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20  table P1 to the 
2f6b0 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20  next row in its 
2f6c0 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a  result set and.*
2f6d0 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  * jump to instru
2f6e0 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69  ction P2.  Or, i
2f6f0 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
2f700 62 6c 65 20 68 61 73 20 72 65 61 63 68 65 64 0a  ble has reached.
2f710 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74  ** the end of it
2f720 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68  s result set, th
2f730 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
2f740 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
2f750 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
2f760 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f   OP_VNext: {   /
2f770 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69  * jump */.  sqli
2f780 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2f790 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
2f7a0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
2f7b0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56  ;.  int res;.  V
2f7c0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
2f7d0 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70  ..  res = 0;.  p
2f7e0 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
2f7f0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2f800 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
2f810 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43  rsor );.  if( pC
2f820 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  ur->nullRow ){. 
2f830 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
2f840 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56  pVtab = pCur->pV
2f850 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
2f860 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
2f870 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
2f880 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
2f890 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20  >xNext );..  /* 
2f8a0 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74  Invoke the xNext
2f8b0 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65  () method of the
2f8c0 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69   module. There i
2f8d0 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65  s no way for the
2f8e0 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67  .  ** underlying
2f8f0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
2f900 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  to return an err
2f910 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73  or if one occurs
2f920 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65   during.  ** xNe
2f930 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69  xt(). Instead, i
2f940 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  f an error occur
2f950 73 2c 20 74 72 75 65 20 69 73 20 72 65 74 75 72  s, true is retur
2f960 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20  ned (indicating 
2f970 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20  that .  ** data 
2f980 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e  is available) an
2f990 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  d the error code
2f9a0 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78   returned when x
2f9b0 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73  Column or.  ** s
2f9c0 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64  ome other method
2f9d0 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64   is next invoked
2f9e0 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69 72   on the save vir
2f9f0 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f  tual table curso
2fa00 72 2e 0a 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56  r..  */.  p->inV
2fa10 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20  tabMethod = 1;. 
2fa20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2fa30 4e 65 78 74 28 70 43 75 72 2d 3e 70 56 74 61 62  Next(pCur->pVtab
2fa40 43 75 72 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e  Cursor);.  p->in
2fa50 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a  VtabMethod = 0;.
2fa60 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
2fa70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
2fa80 61 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  ab);.  if( rc==S
2fa90 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2faa0 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78  res = pModule->x
2fab0 45 6f 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43  Eof(pCur->pVtabC
2fac0 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 0a 20 20 69  ursor);.  }..  i
2fad0 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f  f( !res ){.    /
2fae0 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61  * If there is da
2faf0 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a  ta, jump to P2 *
2fb00 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  /.    pc = pOp->
2fb10 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f  p2 - 1;.  }.  go
2fb20 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
2fb30 65 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66  errupt;.}.#endif
2fb40 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2fb50 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2fb60 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2fb70 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2fb80 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65  E./* Opcode: VRe
2fb90 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  name P1 * * P4 *
2fba0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
2fbb0 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
2fbc0 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
2fbd0 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
2fbe0 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
2fbf0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
2fc00 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f  kes the correspo
2fc10 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65  nding xRename me
2fc20 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a  thod. The value.
2fc30 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ** in register P
2fc40 31 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  1 is passed as t
2fc50 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e  he zName argumen
2fc60 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65  t to the xRename
2fc70 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65   method..*/.case
2fc80 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20   OP_VRename: {. 
2fc90 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
2fca0 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61  Vtab;.  Mem *pNa
2fcb0 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70  me;..  pVtab = p
2fcc0 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
2fcd0 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26  tab;.  pName = &
2fce0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2fcf0 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e   assert( pVtab->
2fd00 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
2fd10 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65   );.  assert( me
2fd20 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20  mIsValid(pName) 
2fd30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
2fd40 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2fd50 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
2fd60 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b  pOp->p1, pName);
2fd70 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65  .  assert( pName
2fd80 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
2fd90 72 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  r );.  testcase(
2fda0 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
2fdb0 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65  ITE_UTF8 );.  te
2fdc0 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
2fdd0 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
2fde0 42 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  BE );.  testcase
2fdf0 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51  ( pName->enc==SQ
2fe00 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a  LITE_UTF16LE );.
2fe10 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2fe20 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
2fe30 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55  (pName, SQLITE_U
2fe40 54 46 38 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  TF8);.  if( rc==
2fe50 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2fe60 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f   rc = pVtab->pMo
2fe70 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56  dule->xRename(pV
2fe80 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a  tab, pName->z);.
2fe90 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
2fea0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
2feb0 56 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78  Vtab);.    p->ex
2fec0 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  pired = 0;.  }. 
2fed0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2fee0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2fef0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2ff00 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55  LE./* Opcode: VU
2ff10 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50  pdate P1 P2 P3 P
2ff20 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
2ff30 3a 20 64 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a  : data=r[P3@P2].
2ff40 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
2ff50 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
2ff60 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
2ff70 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
2ff80 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
2ff90 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
2ffa0 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
2ffb0 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74  ding xUpdate met
2ffc0 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a  hod. P2 values.*
2ffd0 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73  * are contiguous
2ffe0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74   memory cells st
2fff0 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20  arting at P3 to 
30000 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64  pass to the xUpd
30010 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  ate .** invocati
30020 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e  on. The value in
30030 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32   register (P3+P2
30040 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  -1) corresponds 
30050 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20  to the .** p2th 
30060 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61  element of the a
30070 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64  rgv array passed
30080 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a   to xUpdate..**.
30090 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d  ** The xUpdate m
300a0 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20  ethod will do a 
300b0 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53  DELETE or an INS
300c0 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20  ERT or both..** 
300d0 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d  The argv[0] elem
300e0 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65  ent (which corre
300f0 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79  sponds to memory
30100 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20   cell P3).** is 
30110 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72  the rowid of a r
30120 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49  ow to delete.  I
30130 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c  f argv[0] is NUL
30140 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65  L then no .** de
30150 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20  letion occurs.  
30160 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d  The argv[1] elem
30170 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64  ent is the rowid
30180 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20   of the new .** 
30190 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62  row.  This can b
301a0 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74  e NULL to have t
301b0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
301c0 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20   select the new 
301d0 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74  .** rowid for it
301e0 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65  self.  The subse
301f0 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69  quent elements i
30200 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20  n the array are 
30210 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f  .** the values o
30220 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
30230 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20   new row..**.** 
30240 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f  If P2==1 then no
30250 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f   insert is perfo
30260 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69  rmed.  argv[0] i
30270 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a  s the rowid of.*
30280 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  * a row to delet
30290 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  e..**.** P1 is a
302a0 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49   boolean flag. I
302b0 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  f it is set to t
302c0 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64  rue and the xUpd
302d0 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73  ate call.** is s
302e0 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20  uccessful, then 
302f0 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
30300 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61  ed by sqlite3_la
30310 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
30320 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20  ) .** is set to 
30330 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
30340 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72   rowid for the r
30350 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64  ow just inserted
30360 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68  ..**.** P5 is th
30370 65 20 65 72 72 6f 72 20 61 63 74 69 6f 6e 73 20  e error actions 
30380 28 4f 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f  (OE_Replace, OE_
30390 46 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c  Fail, OE_Ignore,
303a0 20 65 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c   etc) to.** appl
303b0 79 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66  y in the case of
303c0 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61   a constraint fa
303d0 69 6c 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65  ilure on an inse
303e0 72 74 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f  rt or update..*/
303f0 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65  .case OP_VUpdate
30400 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
30410 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c  ab *pVtab;.  sql
30420 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
30430 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67  dule;.  int nArg
30440 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c  ;.  int i;.  sql
30450 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b  ite_int64 rowid;
30460 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a  .  Mem **apArg;.
30470 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73    Mem *pX;..  as
30480 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31  sert( pOp->p2==1
30490 20 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e          || pOp->
304a0 70 35 3d 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c  p5==OE_Fail   ||
304b0 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c   pOp->p5==OE_Rol
304c0 6c 62 61 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c  lback .       ||
304d0 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f   pOp->p5==OE_Abo
304e0 72 74 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  rt || pOp->p5==O
304f0 45 5f 49 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d  E_Ignore || pOp-
30500 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a  >p5==OE_Replace.
30510 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70    );.  assert( p
30520 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
30530 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
30540 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
30550 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71  .  pModule = (sq
30560 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70  lite3_module *)p
30570 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
30580 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b   nArg = pOp->p2;
30590 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
305a0 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20  p4type==P4_VTAB 
305b0 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  );.  if( ALWAYS(
305c0 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65  pModule->xUpdate
305d0 29 20 29 7b 0a 20 20 20 20 75 38 20 76 74 61 62  ) ){.    u8 vtab
305e0 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d  OnConflict = db-
305f0 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b  >vtabOnConflict;
30600 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e  .    apArg = p->
30610 61 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20  apArg;.    pX = 
30620 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
30630 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
30640 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
30650 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
30660 6c 69 64 28 70 58 29 20 29 3b 0a 20 20 20 20 20  lid(pX) );.     
30670 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
30680 65 28 70 2c 20 70 58 29 3b 0a 20 20 20 20 20 20  e(p, pX);.      
30690 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
306a0 6f 72 65 54 79 70 65 28 70 58 29 3b 0a 20 20 20  oreType(pX);.   
306b0 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58     apArg[i] = pX
306c0 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20  ;.      pX++;.  
306d0 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74 61 62    }.    db->vtab
306e0 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70  OnConflict = pOp
306f0 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d 20 70  ->p5;.    rc = p
30700 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28  Module->xUpdate(
30710 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41  pVtab, nArg, apA
30720 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20  rg, &rowid);.   
30730 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c   db->vtabOnConfl
30740 69 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66  ict = vtabOnConf
30750 6c 69 63 74 3b 0a 20 20 20 20 73 71 6c 69 74 65  lict;.    sqlite
30760 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
30770 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
30780 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
30790 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b  OK && pOp->p1 ){
307a0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e  .      assert( n
307b0 41 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30  Arg>1 && apArg[0
307c0 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e  ] && (apArg[0]->
307d0 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20  flags&MEM_Null) 
307e0 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73  );.      db->las
307f0 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
30800 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  id = rowid;.    
30810 7d 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78  }.    if( (rc&0x
30820 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53  ff)==SQLITE_CONS
30830 54 52 41 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70  TRAINT && pOp->p
30840 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72  4.pVtab->bConstr
30850 61 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 69 66  aint ){.      if
30860 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67  ( pOp->p5==OE_Ig
30870 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 20 20  nore ){.        
30880 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
30890 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
308a0 20 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74       p->errorAct
308b0 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d  ion = ((pOp->p5=
308c0 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f  =OE_Replace) ? O
308d0 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70  E_Abort : pOp->p
308e0 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  5);.      }.    
308f0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e  }else{.      p->
30900 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d  nChange++;.    }
30910 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
30920 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
30930 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
30940 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20  LE */..#ifndef  
30950 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
30960 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63  R_PRAGMAS./* Opc
30970 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50  ode: Pagecount P
30980 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
30990 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
309a0 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  nt number of pag
309b0 65 73 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  es in database P
309c0 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  1 to memory cell
309d0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
309e0 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20  Pagecount: {    
309f0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
30a00 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
30a10 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69  pOut->u.i = sqli
30a20 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65  te3BtreeLastPage
30a30 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  (db->aDb[pOp->p1
30a40 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b  ].pBt);.  break;
30a50 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  .}.#endif...#ifn
30a60 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  def  SQLITE_OMIT
30a70 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
30a80 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67 63  * Opcode: MaxPgc
30a90 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nt P1 P2 P3 * *.
30aa0 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65 74  **.** Try to set
30ab0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
30ac0 65 20 63 6f 75 6e 74 20 66 6f 72 20 64 61 74 61  e count for data
30ad0 62 61 73 65 20 50 31 20 74 6f 20 74 68 65 20 76  base P1 to the v
30ae0 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44  alue in P3..** D
30af0 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65 20 6d 61  o not let the ma
30b00 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
30b10 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20   fall below the 
30b20 63 75 72 72 65 6e 74 20 70 61 67 65 20 63 6f 75  current page cou
30b30 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74  nt and.** do not
30b40 20 63 68 61 6e 67 65 20 74 68 65 20 6d 61 78 69   change the maxi
30b50 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 76  mum page count v
30b60 61 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a  alue if P3==0..*
30b70 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6d  *.** Store the m
30b80 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
30b90 74 20 61 66 74 65 72 20 74 68 65 20 63 68 61 6e  t after the chan
30ba0 67 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ge in register P
30bb0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61  2..*/.case OP_Ma
30bc0 78 50 67 63 6e 74 3a 20 7b 20 20 20 20 20 20 20  xPgcnt: {       
30bd0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
30be0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 75 6e 73  release */.  uns
30bf0 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61 78  igned int newMax
30c00 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  ;.  Btree *pBt;.
30c10 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
30c20 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
30c30 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69   newMax = 0;.  i
30c40 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
30c50 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74    newMax = sqlit
30c60 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28  e3BtreeLastPage(
30c70 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65  pBt);.    if( ne
30c80 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64  wMax < (unsigned
30c90 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61  )pOp->p3 ) newMa
30ca0 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f  x = (unsigned)pO
30cb0 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75  p->p3;.  }.  pOu
30cc0 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33  t->u.i = sqlite3
30cd0 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e  BtreeMaxPageCoun
30ce0 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a  t(pBt, newMax);.
30cf0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
30d00 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  f.../* Opcode: I
30d10 6e 69 74 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  nit * P2 * P4 *.
30d20 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 53 74  ** Synopsis:  St
30d30 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a 20  art at P2.**.** 
30d40 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61 69 6e  Programs contain
30d50 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e   a single instan
30d60 63 65 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  ce of this opcod
30d70 65 20 61 73 20 74 68 65 20 76 65 72 79 20 66 69  e as the very fi
30d80 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a 2a  rst.** opcode..*
30d90 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20  *.** If tracing 
30da0 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74  is enabled (by t
30db0 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65  he sqlite3_trace
30dc0 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74  ()) interface, t
30dd0 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38  hen.** the UTF-8
30de0 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65   string containe
30df0 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74  d in P4 is emitt
30e00 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20  ed on the trace 
30e10 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72 20  callback..** Or 
30e20 69 66 20 50 34 20 69 73 20 62 6c 61 6e 6b 2c 20  if P4 is blank, 
30e30 75 73 65 20 74 68 65 20 73 74 72 69 6e 67 20 72  use the string r
30e40 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
30e50 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20  e3_sql()..**.** 
30e60 49 66 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  If P2 is not zer
30e70 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  o, jump to instr
30e80 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61  uction P2..*/.ca
30e90 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20 20 20  se OP_Init: {   
30ea0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
30eb0 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65  /.  char *zTrace
30ec0 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20  ;.  char *z;..  
30ed0 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 7b 0a 20  if( pOp->p2 ){. 
30ee0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
30ef0 2d 20 31 3b 0a 20 20 7d 0a 23 69 66 6e 64 65 66  - 1;.  }.#ifndef
30f00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
30f10 43 45 0a 20 20 69 66 28 20 64 62 2d 3e 78 54 72  CE.  if( db->xTr
30f20 61 63 65 0a 20 20 20 26 26 20 21 70 2d 3e 64 6f  ace.   && !p->do
30f30 69 6e 67 52 65 72 75 6e 0a 20 20 20 26 26 20 28  ingRerun.   && (
30f40 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70  zTrace = (pOp->p
30f50 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20  4.z ? pOp->p4.z 
30f60 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20  : p->zSql))!=0. 
30f70 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69   ){.    z = sqli
30f80 74 65 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c  te3VdbeExpandSql
30f90 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20  (p, zTrace);.   
30fa0 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e   db->xTrace(db->
30fb0 70 54 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20  pTraceArg, z);. 
30fc0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
30fd0 28 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69 66  (db, z);.  }.#if
30fe0 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 46  def SQLITE_USE_F
30ff0 43 4e 54 4c 5f 54 52 41 43 45 0a 20 20 7a 54 72  CNTL_TRACE.  zTr
31000 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a  ace = (pOp->p4.z
31010 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70   ? pOp->p4.z : p
31020 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a  ->zSql);.  if( z
31030 54 72 61 63 65 20 29 7b 0a 20 20 20 20 69 6e 74  Trace ){.    int
31040 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   i;.    for(i=0;
31050 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
31060 7b 0a 20 20 20 20 20 20 69 66 28 20 4d 41 53 4b  {.      if( MASK
31070 42 49 54 28 69 29 20 26 20 70 2d 3e 62 74 72 65  BIT(i) & p->btre
31080 65 4d 61 73 6b 29 3d 3d 30 20 29 20 63 6f 6e 74  eMask)==0 ) cont
31090 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  inue;.      sqli
310a0 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c  te3_file_control
310b0 28 64 62 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  (db, db->aDb[i].
310c0 7a 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43  zName, SQLITE_FC
310d0 4e 54 4c 5f 54 52 41 43 45 2c 20 7a 54 72 61 63  NTL_TRACE, zTrac
310e0 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  e);.    }.  }.#e
310f0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55  ndif /* SQLITE_U
31100 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 20 2a  SE_FCNTL_TRACE *
31110 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
31120 44 45 42 55 47 0a 20 20 69 66 28 20 28 64 62 2d  DEBUG.  if( (db-
31130 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
31140 53 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20 20  SqlTrace)!=0.   
31150 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f  && (zTrace = (pO
31160 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70  p->p4.z ? pOp->p
31170 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21  4.z : p->zSql))!
31180 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c 69  =0.  ){.    sqli
31190 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 22  te3DebugPrintf("
311a0 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22  SQL-trace: %s\n"
311b0 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a 23  , zTrace);.  }.#
311c0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
311d0 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20  DEBUG */.#endif 
311e0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  /* SQLITE_OMIT_T
311f0 52 41 43 45 20 2a 2f 0a 20 20 62 72 65 61 6b 3b  RACE */.  break;
31200 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
31210 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a  Noop * * * * *.*
31220 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e  *.** Do nothing.
31230 20 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69    This instructi
31240 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65 66  on is often usef
31250 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20  ul as a jump.** 
31260 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a  destination..*/.
31270 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63 20  /*.** The magic 
31280 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61  Explain opcode a
31290 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64  re only inserted
312a0 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32   when explain==2
312b0 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f   (which.** is to
312c0 20 73 61 79 20 77 68 65 6e 20 74 68 65 20 45 58   say when the EX
312d0 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
312e0 20 73 79 6e 74 61 78 20 69 73 20 75 73 65 64 2e   syntax is used.
312f0 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ).** This opcode
31300 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61   records informa
31310 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70  tion from the op
31320 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73 20  timizer.  It is 
31330 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  the.** the same 
31340 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69  as a no-op.  Thi
31350 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20 61  s opcodesnever a
31360 70 70 65 61 72 73 20 69 6e 20 61 20 72 65 61 6c  ppears in a real
31370 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a   VM program..*/.
31380 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20 20  default: {      
31390 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 72      /* This is r
313a0 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e  eally OP_Noop an
313b0 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a  d OP_Explain */.
313c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
313d0 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c  pcode==OP_Noop |
313e0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
313f0 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20 20 62  P_Explain );.  b
31400 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a  reak;.}../******
31410 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31420 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31430 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31440 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31450 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63  *******.** The c
31460 61 73 65 73 20 6f 66 20 74 68 65 20 73 77 69 74  ases of the swit
31470 63 68 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f  ch statement abo
31480 76 65 20 74 68 69 73 20 6c 69 6e 65 20 73 68 6f  ve this line sho
31490 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e  uld all be inden
314a0 74 65 64 0a 2a 2a 20 62 79 20 36 20 73 70 61 63  ted.** by 6 spac
314b0 65 73 2e 20 20 42 75 74 20 74 68 65 20 6c 65 66  es.  But the lef
314c0 74 2d 6d 6f 73 74 20 36 20 73 70 61 63 65 73 20  t-most 6 spaces 
314d0 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f 76 65  have been remove
314e0 64 20 74 6f 20 69 6d 70 72 6f 76 65 20 74 68 65  d to improve the
314f0 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69 74 79 2e  .** readability.
31500 20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e    From this poin
31510 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e  t on down, the n
31520 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f  ormal indentatio
31530 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72  n rules are.** r
31540 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a  estored..*******
31550 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31560 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31570 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31580 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31590 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23  ******/.    }..#
315a0 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
315b0 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75  LE.    {.      u
315c0 36 34 20 65 6c 61 70 73 65 64 20 3d 20 73 71 6c  64 elapsed = sql
315d0 69 74 65 33 48 77 74 69 6d 65 28 29 20 2d 20 73  ite3Hwtime() - s
315e0 74 61 72 74 3b 0a 20 20 20 20 20 20 70 4f 70 2d  tart;.      pOp-
315f0 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6c 61 70 73  >cycles += elaps
31600 65 64 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63  ed;.      pOp->c
31610 6e 74 2b 2b 3b 0a 23 69 66 20 30 0a 20 20 20 20  nt++;.#if 0.    
31620 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 6f      fprintf(stdo
31630 75 74 2c 20 22 25 31 30 6c 6c 75 20 22 2c 20 65  ut, "%10llu ", e
31640 6c 61 70 73 65 64 29 3b 0a 20 20 20 20 20 20 20  lapsed);.       
31650 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
31660 74 4f 70 28 73 74 64 6f 75 74 2c 20 6f 72 69 67  tOp(stdout, orig
31670 50 63 2c 20 26 61 4f 70 5b 6f 72 69 67 50 63 5d  Pc, &aOp[origPc]
31680 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a  );.#endif.    }.
31690 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54  #endif..    /* T
316a0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64  he following cod
316b0 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20 74  e adds nothing t
316c0 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66 75 6e  o the actual fun
316d0 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a  ctionality.    *
316e0 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d  * of the program
316f0 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68 65  .  It is only he
31700 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61  re for testing a
31710 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20 20  nd debugging..  
31720 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68 65    ** On the othe
31730 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73 20  r hand, it does 
31740 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73 20  burn CPU cycles 
31750 65 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f 75  every time throu
31760 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65 76  gh.    ** the ev
31770 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20 53  aluator loop.  S
31780 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20 69  o we can leave i
31790 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42 55  t out when NDEBU
317a0 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20  G is defined..  
317b0 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45    */.#ifndef NDE
317c0 42 55 47 0a 20 20 20 20 61 73 73 65 72 74 28 20  BUG.    assert( 
317d0 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70 2d 3e  pc>=-1 && pc<p->
317e0 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  nOp );..#ifdef S
317f0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
31800 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20  if( db->flags & 
31810 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
31820 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72 63   ){.      if( rc
31830 21 3d 30 20 29 20 70 72 69 6e 74 66 28 22 72 63  !=0 ) printf("rc
31840 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20  =%d\n",rc);.    
31850 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61    if( pOp->opfla
31860 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32  gs & (OPFLG_OUT2
31870 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f 50 46 4c  _PRERELEASE|OPFL
31880 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20 20  G_OUT2) ){.     
31890 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65     registerTrace
318a0 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b  (pOp->p2, &aMem[
318b0 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20  pOp->p2]);.     
318c0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70   }.      if( pOp
318d0 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
318e0 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20 20  G_OUT3 ){.      
318f0 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28    registerTrace(
31900 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70  pOp->p3, &aMem[p
31910 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20  Op->p3]);.      
31920 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 20  }.    }.#endif  
31930 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
31940 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44  */.#endif  /* ND
31950 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20  EBUG */.  }  /* 
31960 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66  The end of the f
31970 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20  or(;;) loop the 
31980 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f 70  loops through op
31990 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  codes */..  /* I
319a0 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20  f we reach this 
319b0 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20  point, it means 
319c0 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20 69  that execution i
319d0 73 20 66 69 6e 69 73 68 65 64 20 77 69 74 68 0a  s finished with.
319e0 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66    ** an error of
319f0 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f   some kind..  */
31a00 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74  .vdbe_error_halt
31a10 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63 20 29  :.  assert( rc )
31a20 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a  ;.  p->rc = rc;.
31a30 20 20 74 65 73 74 63 61 73 65 28 20 73 71 6c 69    testcase( sqli
31a40 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
31a50 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73 71 6c  xLog!=0 );.  sql
31a60 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22 73 74  ite3_log(rc, "st
31a70 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73 20 61  atement aborts a
31a80 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22 2c 20  t %d: [%s] %s", 
31a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31aa0 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c      pc, p->zSql,
31ab0 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
31ac0 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
31ad0 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  p);.  if( rc==SQ
31ae0 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
31af0 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69   ) db->mallocFai
31b00 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  led = 1;.  rc = 
31b10 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
31b20 69 66 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f  if( resetSchemaO
31b30 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20 20 20  nFault>0 ){.    
31b40 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
31b50 63 68 65 6d 61 28 64 62 2c 20 72 65 73 65 74 53  chema(db, resetS
31b60 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29 3b  chemaOnFault-1);
31b70 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73 20  .  }..  /* This 
31b80 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20  is the only way 
31b90 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63  out of this proc
31ba0 65 64 75 72 65 2e 20 20 57 65 20 68 61 76 65 20  edure.  We have 
31bb0 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65 20  to.  ** release 
31bc0 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 62  the mutexes on b
31bd0 74 72 65 65 73 20 74 68 61 74 20 77 65 72 65 20  trees that were 
31be0 61 63 71 75 69 72 65 64 20 61 74 20 74 68 65 0a  acquired at the.
31bf0 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62    ** top. */.vdb
31c00 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d 3e  e_return:.  db->
31c10 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
31c20 52 6f 77 69 64 3b 0a 20 20 74 65 73 74 63 61 73  Rowid;.  testcas
31c30 65 28 20 6e 56 6d 53 74 65 70 3e 30 20 29 3b 0a  e( nVmStep>0 );.
31c40 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51    p->aCounter[SQ
31c50 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
31c60 56 4d 5f 53 54 45 50 5d 20 2b 3d 20 28 69 6e 74  VM_STEP] += (int
31c70 29 6e 56 6d 53 74 65 70 3b 0a 20 20 73 71 6c 69  )nVmStep;.  sqli
31c80 74 65 33 56 64 62 65 4c 65 61 76 65 28 70 29 3b  te3VdbeLeave(p);
31c90 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20  .  return rc;.. 
31ca0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
31cb0 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20   if a string or 
31cc0 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e  blob larger than
31cd0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
31ce0 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75  TH.  ** is encou
31cf0 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f  ntered..  */.too
31d00 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 53  _big:.  sqlite3S
31d10 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
31d20 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72 69 6e  rMsg, db, "strin
31d30 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69  g or blob too bi
31d40 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  g");.  rc = SQLI
31d50 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74  TE_TOOBIG;.  got
31d60 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
31d70 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
31d80 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f   here if a mallo
31d90 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a  c() fails..  */.
31da0 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61  no_mem:.  db->ma
31db0 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
31dc0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
31dd0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
31de0 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f  db, "out of memo
31df0 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ry");.  rc = SQL
31e00 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74  ITE_NOMEM;.  got
31e10 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
31e20 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
31e30 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20 6f 74   here for any ot
31e40 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61 74 61  her kind of fata
31e50 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20 22 72  l error.  The "r
31e60 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a  c" variable.  **
31e70 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65   should hold the
31e80 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20   error number.. 
31e90 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f   */.abort_due_to
31ea0 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65 72 74  _error:.  assert
31eb0 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20  ( p->zErrMsg==0 
31ec0 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  );.  if( db->mal
31ed0 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63 20 3d  locFailed ) rc =
31ee0 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
31ef0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
31f00 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  IOERR_NOMEM ){. 
31f10 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
31f20 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
31f30 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
31f40 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20  e3ErrStr(rc));. 
31f50 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65   }.  goto vdbe_e
31f60 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a  rror_halt;..  /*
31f70 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66   Jump to here if
31f80 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 74   the sqlite3_int
31f90 65 72 72 75 70 74 28 29 20 41 50 49 20 73 65 74  errupt() API set
31fa0 73 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 0a  s the interrupt.
31fb0 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a    ** flag..  */.
31fc0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
31fd0 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65 72 74  errupt:.  assert
31fe0 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
31ff0 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63 20 3d  rupted );.  rc =
32000 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
32010 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b  T;.  p->rc = rc;
32020 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
32030 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
32040 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
32050 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20  e3ErrStr(rc));. 
32060 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
32070 5f 68 61 6c 74 3b 0a 7d 0a                       _halt;.}.